diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..7e7eb1a --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,42 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/go +{ + "name": "Go", + "image": "mcr.microsoft.com/devcontainers/go:0-1-bullseye", + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Set *default* container specific settings.json values on container create. + "settings": { + "go.toolsManagement.checkForUpdates": "local", + "go.useLanguageServer": true, + "go.gopath": "/go" + }, + "extensions": [ + "k--kato.intellij-idea-keybindings" + ] + } + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers/features/desktop-lite:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/go:1": {}, + "ghcr.io/devcontainers/features/rust:1": {}, + "ghcr.io/devcontainers/features/sshd:1": {}, + "ghcr.io/dhoeric/features/k9s:1": {}, + "ghcr.io/guiyomh/features/goreleaser:0": {} + } + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "go version", + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.ko.yaml b/.ko.yaml deleted file mode 100644 index 64bba94..0000000 --- a/.ko.yaml +++ /dev/null @@ -1,4 +0,0 @@ -#defaultBaseImage: docker.io/library/ubuntu:bionic - -defaultBaseImage: gcr.io/dmeshgate/ugate-dev:latest - diff --git a/.run/go-ugate.run.xml b/.run/go-ugate.run.xml deleted file mode 100644 index 880c1db..0000000 --- a/.run/go-ugate.run.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.run/ugate-alice.run.xml b/.run/ugate-alice.run.xml index 456bc11..3d6ba76 100644 --- a/.run/ugate-alice.run.xml +++ b/.run/ugate-alice.run.xml @@ -1,15 +1,15 @@ - - - + + + - + - - - + + + diff --git a/.run/ugate-bob.run.xml b/.run/ugate-bob.run.xml index 50fa2a8..240fbfc 100644 --- a/.run/ugate-bob.run.xml +++ b/.run/ugate-bob.run.xml @@ -1,15 +1,15 @@ - - - + + + - + - + diff --git a/.run/ugate-carol.run.xml b/.run/ugate-carol.run.xml deleted file mode 100644 index 639327a..0000000 --- a/.run/ugate-carol.run.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.run/ugate-gate.run.xml b/.run/ugate-gate.run.xml index 492edb9..f84581b 100644 --- a/.run/ugate-gate.run.xml +++ b/.run/ugate-gate.run.xml @@ -1,6 +1,5 @@ - diff --git a/.run/ugate-s1.run.xml b/.run/ugate-s1.run.xml deleted file mode 100644 index 3764101..0000000 --- a/.run/ugate-s1.run.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.run/ugate.run.xml b/.run/ugate.run.xml index d29072c..95dcd46 100644 --- a/.run/ugate.run.xml +++ b/.run/ugate.run.xml @@ -1,3 +1,15 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..88c8610 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,15 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "echo", + "type": "shell", + "command": "make", + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/Makefile b/Makefile index 5951d1e..0bcd005 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) -OUT=${ROOT_DIR}/out +OUT=${ROOT_DIR}/../out/ugate #IMAGE ?= gcr.io/dmeshgate/ugate REPO ?= ghcr.io/costinm/ugate @@ -14,14 +14,21 @@ deploy: deploy/cloudrun deploy/helm deploy/cloudrun: docker push/ugate run/cloudrun + deploy/helm: docker push/ugate run/helm docker: docker build -t ${IMAGE}:latest . docker/dev: - #docker pull golang:latest - docker build -t ${IMAGE}-dev:latest -f tools/dev/Dockerfile tools/dev + docker build -t ${IMAGE}-dev:latest -f tools/dev/Dockerfile.devbase \ + tools/dev + +docker/dev-istio: + #docker pull gcr.io/istio-testing/build-tools:master-latest + docker build -t ${IMAGE}-dev-istio:latest -f tools/dev/Dockerfile.istio-dev \ + tools/dev + docker push ${IMAGE}-dev-istio:latest push/dev: docker push ${IMAGE}-dev:latest @@ -29,6 +36,21 @@ push/dev: run/dev: docker run -it --entrypoint /bin/bash gcr.io/dmeshgate/ugate-dev:latest +docker/devui: + #docker pull golang:latest + docker build -t ${IMAGE}-dev:cinamon-latest -f tools/dev/Dockerfile.cinamon tools/dev + +push/devui: + docker push ${IMAGE}-dev:cinamon-latest + +run/devui: + docker run -it \ + --entrypoint /bin/bash \ + --rm --name dev \ + -p 18080:8080 -p 32000:22000 -p 8444:8444 \ + -v /x/sync/dmesh-src/ugate-ws:/work \ + ${IMAGE}-dev:cinamon-latest + run/docker-image: docker run -P -v /ws/dmesh-src/work/s1:/var/lib/istio \ -v ${ROOT_DIR}:/ws \ @@ -74,11 +96,11 @@ fw/kiali: # Build with docker: 26 sec # Both use skaffold # Faster than docker. -push/ko: - (cd cmd/ugate && ko publish . --bare) - -deps/ko: - go install github.com/google/ko@latest +#push/ko: +# (cd cmd/ugate && ko publish . --bare) +# +#deps/ko: +# go install github.com/google/ko@latest # Run ugate in cloudrun. # Storage: Env variables, GCP resources (buckets,secrets,k8s) @@ -138,10 +160,6 @@ test/iptables: iptables-save |grep ISTIO > ${OUT}/iptables_443_5201.out diff ${OUT}/iptables_443_5201.out cmd/ugate/testdata/iptables/iptables_443_5201.out -okteto: - # curl https://get.okteto.com -sSfL | sh - okteto up - HOSTS=c1 home ## For debug @@ -166,15 +184,32 @@ update: deps: go install github.com/bufbuild/buf/cmd/buf@latest + go install istio.io/tools/cmd/protoc-gen-docs@latest + go install istio.io/tools/cmd/protoc-gen-crds@latest + go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest go install google.golang.org/protobuf/cmd/protoc-gen-go@latest go install github.com/bufbuild/connect-go/cmd/protoc-gen-connect-go@latest + go install github.com/mikefarah/yq/v4@latest # debug tool for std grpc - need http/tcp equivalent go install -v github.com/grpc-ecosystem/grpcdebug@latest # Test tool go install github.com/bojand/ghz/cmd/ghz@latest + curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + chmod +x ./kubectl + mv ./kubectl /usr/local/bin + + go install github.com/knusbaum/go9p/cmd/mount9p@latest + go install github.com/knusbaum/go9p/cmd/export9p@latest + go install github.com/knusbaum/go9p/cmd/import9p@latest + + proto-gen: PATH:=${HOME}/go/bin:${PATH} proto-gen: cd proto && buf generate + + +# Other options: +# GOEXPERIMENT=boringcrypto and "-tags boringcrypto" diff --git a/cmd/capture.sh b/cmd/capture.sh index 961a42b..0f626bf 100755 --- a/cmd/capture.sh +++ b/cmd/capture.sh @@ -2,26 +2,144 @@ PROXY_HOME=${PROXY_HOME:-/ws/istio-proxy} -function nat_setup() { - groupadd -g 1337 istio - mkdir /opt/dmesh - mkdir /opt/dmesh/bin - mkdir /var/dmesh - chgrp istio /opt/dmesh - chgrp istio /opt/dmesh/bin - chgrp istio /var/dmesh - chmod 775 /var/dmesh -} +HTTP_PORT=14080 +U=${GWUSER:-build} # istio-proxy +PROXY_GID="1337" -# Fow for network packet to app: +# Flow for network packet to app: # raw/pre -> conntrack -> mangle/pre -> nat/pre -> route -> mangle/in -> filter/in -> sock # # Flow from app to net; # route -> raw/out -> conntrack -> mangle/out -> route -> nat/out -> filter/out -> mangle/post -> nat/post - # Local IPs: hostname -I +# Naming: +# DMESH_${TABLE}_${HOOK}_${SUFFIX} +# The hook is pre, post, out +# + + +# For port 80 - we don't need tproxy or redirect - DNAT works too ! +function http() { + # From: https://v2.gost.run/en/redirect/, etc - no need of tproxy or original dst for HTTP or for SNI routing + # This can also be sent directly to another host (TODO: check on pods) + iptables -t nat -A OUTPUT -p tcp --dport 82 \ + -j DNAT \ + --to-destination 127.0.0.1:${HTTP_PORT} + + #--match multiport ! --dports 15001,1080 \ + +} + +function init_tun() { + local D=${1:-0} + local T=dmesh${D} + local TIP=10.16.${D}.1 + + ip tuntap add dev $T mode tun user $U group 1337 + # No IP6 address - confuses linux + ip addr add $TIP/24 dev $T + #ip route add fd:8::0/64 dev $T + ip link set $T up + + echo 2 > /proc/sys/net/ipv4/conf/$T/rp_filter + + #iptables -t filter -A DMESH_FILTER_IN -i dmesh1 -j LOG --log-prefix "dmesh1-f-in " + #iptables -t filter -A DMESH_FILTER_IN -i $T -j ACCEPT + #ip6tables -t filter -A DMESH_FILTER_IN -i $T -j ACCEPT + + # Mark packets + #iptables -t mangle -A DMESH_MANGLE_PRE -i $T -j MARK --set-mark 1337 + #ip6tables -t mangle -A DMESH_MANGLE_PRE -i $T -j MARK --set-mark 1337 + + # VIPs (services) and mesh IPs assigned to nodes are routed to the tun + # This is the easy part - there is no real destination, 'real' hosts require + # special processing if the router runs in same namespace, since it needs to + # send packets to the real route/interface. + + #ip addr add 2001:470:1f04:429::3/128 dev dmesh1 + #ip route add 2001:470:1f04:429:80::0/65 dev dmesh1 + #ip route add fd:0${D}::/16 dev dmesh1 + ip route add 10.1.${D}.0/24 dev $T + + # Anything marked with 1001 will be routed to dmesh1 interface + # This is in addition to all VIPs and other ranges with normal routes. + # + ip rule add fwmark 100${D} lookup 100${D} + #ip route add ::/0 dev dmesh1 src 2001:470:1f04:429::3 table 1338 + #ip route add ::/0 dev $T table 100${D} + #ip route add 0.0.0.0/0 dev $T table 100${D} + ip route add local 0.0.0.0/0 dev lo table 100${D} + + # Can't use -o with PREROUTING and tproxu - just i + iptables -t mangle -A PREROUTING -i $T -p tcp \ + -j TPROXY --tproxy-mark 100${D} --on-port 14006 + iptables -t mangle -A PREROUTING -i $T -p udp \ + -j TPROXY --tproxy-mark 100${D} --on-port 14006 + +} + +function init_veth() { + local MARK=6 + + ip netns add mesh + + ip link add dev veth-mesh type veth peer name veth-hostmesh + ip link set veth-mesh netns mesh + + ip -n mesh addr add 10.253.2.1/24 dev veth-mesh + ip netns exec mesh route add default dev veth-mesh + + ip addr add 10.253.1.1/24 dev veth-hostmesh + + # VIPs (services and istio virtual pod IPs) - standard route is sufficient + ip route add 10.253.4.0/24 via 10.253.2.1 dev veth-hostmesh + + ip netns exec mesh ip addr + ip -n mesh link set dev veth-mesh up + ip -n mesh link set dev lo up + ip link set dev veth-hostmesh up + + ip -n mesh rule add fwmark $MARK lookup $MARK + ip -n mesh route add local 0.0.0.0/0 dev lo table $MARK + + # Not clear if required +# ip netns exec mesh iptables -t mangle -N DIVERT +# ip netns exec mesh iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT +# ip netns exec mesh iptables -t mangle -A DIVERT -j MARK --set-mark $MARK +# ip netns exec mesh iptables -t mangle -A DIVERT -j ACCEPT + + ip netns exec mesh iptables -t mangle -A PREROUTING -i veth-mesh -p tcp \ + -j TPROXY --tproxy-mark $MARK --on-port 14006 + # Ugate must run in this namespace - or pass a socket there + +} + +function del_veth() { + ip link del dev vm1 + + # https://gist.github.com/NiceRath/900f115f216c942283584c41baeb209f + # Delete all + nft flush ruleset + nft list ruleset +} + +function del_tun() { + local D=${1:-0} + local T=dmesh${D} + + iptables -t mangle -D PREROUTING -i $T -p tcp \ + -j TPROXY --tproxy-mark 100${D} --on-port 14006 + iptables -t mangle -D PREROUTING -i $T -p udp \ + -j TPROXY --tproxy-mark 100${D} --on-port 14006 + + ip rule delete from all fwmark 100${D} lookup 100${D} + ip route flush table 100${D} + + ip link set $T down + ip tuntap del dev $T mode tun || true +} # Once, at boot time. Can be cleaned with dmeshclean # @@ -32,85 +150,74 @@ function nat_setup() { # # Example: # iptables -t mangle -A DMESH_MANGLE_OUT -j MARK -p tcp -m tcp --dport 5227 --set-mark 1338 -function dmeshinit() { - U=${GWUSER:-costin} # istio-proxy - - # Run with 'sg' - - ip tuntap add dev dmesh1 mode tun user $U group 1337 - ip addr add 10.12.0.5 dev dmesh1 +function onBoot() { + # + sysctl -w net.ipv4.ip_forward=1 - # No IP6 address - confuses linux - ip link set dmesh1 up - # Accept anything from dmesh1 + # Create the jump tables - for easy cleanup and org iptables -t filter -N DMESH_FILTER_IN ip6tables -t filter -N DMESH_FILTER_IN - iptables -t filter -A INPUT -j DMESH_FILTER_IN - ip6tables -t filter -A INPUT -j DMESH_FILTER_IN - #iptables -t filter -A DMESH_FILTER_IN -i dmesh1 -j LOG --log-prefix "dmesh1-f-in " - iptables -t filter -A DMESH_FILTER_IN -i dmesh1 -j ACCEPT - ip6tables -t filter -A DMESH_FILTER_IN -i dmesh1 -j ACCEPT - - # Mark packets from dmesh1 iptables -t mangle -N DMESH_MANGLE_PRE ip6tables -t mangle -N DMESH_MANGLE_PRE - iptables -t mangle -A PREROUTING -j DMESH_MANGLE_PRE - ip6tables -t mangle -A PREROUTING -j DMESH_MANGLE_PRE - iptables -t mangle -A DMESH_MANGLE_PRE -i dmesh1 -j MARK --set-mark 1337 - ip6tables -t mangle -A DMESH_MANGLE_PRE -i dmesh1 -j MARK --set-mark 1337 - iptables -t mangle -N DMESH ip6tables -t mangle -N DMESH - # Output from apps: what is included and what is not. iptables -t mangle -N DMESH_MANGLE_OUT ip6tables -t mangle -N DMESH_MANGLE_OUT - # Common/fixed configuration for mangle/OUTPUT # This applies to packets sent from local applications iptables -t mangle -N DMESH_MANGLE_OUT_START ip6tables -t mangle -N DMESH_MANGLE_OUT_START + + # Hook the tables at the appropriate points + iptables -t mangle -A PREROUTING -j DMESH_MANGLE_PRE + ip6tables -t mangle -A PREROUTING -j DMESH_MANGLE_PRE + iptables -t filter -A INPUT -j DMESH_FILTER_IN + ip6tables -t filter -A INPUT -j DMESH_FILTER_IN iptables -t mangle -A OUTPUT -j DMESH_MANGLE_OUT_START ip6tables -t mangle -A OUTPUT -j DMESH_MANGLE_OUT_START + # All + # Istio also has ISTIO_OUTPUT on nat + + #init_tun 1 + init_tun 0 + + # Istio-proxy iptables -t mangle -A DMESH_MANGLE_OUT_START -m owner --gid-owner $U -j RETURN ip6tables -t mangle -A DMESH_MANGLE_OUT_START -m owner --gid-owner $U -j RETURN + # Localhost iptables -t mangle -A DMESH_MANGLE_OUT_START -d 127.0.0.1/32 -j RETURN ip6tables -t mangle -A DMESH_MANGLE_OUT_START -d ::1/128 -j RETURN + iptables -t mangle -A DMESH_MANGLE_OUT_START -j DMESH_MANGLE_OUT ip6tables -t mangle -A DMESH_MANGLE_OUT_START -j DMESH_MANGLE_OUT - iptables -t mangle -A OUTPUT -j DMESH_MANGLE_OUT - ip6tables -t mangle -A OUTPUT -j DMESH_MANGLE_OUT - - # - echo 2 > /proc/sys/net/ipv4/conf/dmesh1/rp_filter - sysctl -w net.ipv4.ip_forward=1 - #ip addr add 2001:470:1f04:429::3/128 dev dmesh1 - #ip route add 2001:470:1f04:429:80::0/65 dev dmesh1 - ip route add fd::/8 dev dmesh1 - ip route add 10.10.0.0/16 dev dmesh1 - ip route add 10.12.0.0/16 dev dmesh1 - # Anything marked with 1338 will be routed to dmesh1 interface - ip rule add fwmark 1338 lookup 1338 - #ip route add ::/0 dev dmesh1 src 2001:470:1f04:429::3 table 1338 - ip route add ::/0 dev dmesh1 table 1338 - ip route add 0.0.0.0/0 dev dmesh1 src 10.12.0.5 table 1338 - # 1337 means deliver to local host + # 1337 means deliver to local host - this is used with TPROXY + # Requires root and transparent. ip rule add fwmark 1337 lookup 1337 ip rule add iif dmesh1 lookup 1337 + ip route add local 0.0.0.0/0 dev lo table 1337 #ip route add local ::/0 dev lo table 1337 - # All - iptables -t mangle -A PREROUTING -i dmesh1 -j TPROXY --tproxy-mark 1337/0xffffffff --on-port 15006 - iptables -t mangle -A PREROUTING -o dmesh1 -j TPROXY --tproxy-mark 1337/0xffffffff --on-port 15006 + # Istio uses: + # iptables -t mangle -A ISTIO_TPROXY ! -d 127.0.0.1/32 -p tcp -j TPROXY --tproxy-mark 1337/0xffffffff --on-port 15006 + + # Optimization for established: + # iptables -t mangle -A ISTIO_INBOUND -p tcp -m socket -j ISTIO_DIVERT || echo "No socket match support" +} + +function debug() { + ip rule list + ip -s -d -a route list table all | grep -v "table local" |grep -v "table main" + } function dmeshclean() { @@ -120,6 +227,8 @@ function dmeshclean() { ip rule delete from all fwmark 1337 lookup 1337 ip route flush table 1337 + # Must first -F (flush), then delete the rule using (-D) then delete the chain (-X) + iptables -t mangle -F DMESH_MANGLE_OUT iptables -t mangle -F DMESH_MANGLE_OUT_START iptables -t mangle -F DMESH @@ -145,41 +254,12 @@ function dmeshclean() { ip6tables -t mangle -X DMESH_MANGLE_PRE ip6tables -t mangle -X DMESH_MANGLE_OUT ip6tables -t mangle -X DMESH - - ip link set dmesh1 down - - ip tuntap del dev dmesh1 mode tun || true -} - -# Gateway mode, running as istio-proxy -function dmeshbg() { - cd $PROXY_HOME - - ./dmesh > ./proxy.log 2>&1 & - echo $! > ./proxy.pid -} - -# Gateway mode, running as istio-proxy -function dmeshbggw() { - cd $PROXY_HOME - export DMESH_IF=none - ./dmesh } -function dmeshgw() { - cp /ws/dmesh/bin/dmesh ${PROXY_HOME}/dmesh - chown istio-proxy ${PROXY_HOME}/dmesh - su -s /bin/bash -c "/usr/local/bin/dmeshroot.sh runbggw" istio-proxy -} -function dmeshon() { - cp /ws/dmesh/bin/dmesh ${PROXY_HOME}/dmesh - chown istio-proxy ${PROXY_HOME}/dmesh - su -s /bin/sh -c "/usr/local/bin/dmeshroot.sh runbg" istio-proxy - capture -} -# This is the main function to capture outbound traffic, by marking it to 1338 which is routed to dmesh tun device. +# This is the main function to capture outbound traffic, by marking it to 1338 which is routed +# to dmesh tun device. function capture() { ip6tables -t mangle -F DMESH_MANGLE_OUT iptables -t mangle -F DMESH_MANGLE_OUT @@ -205,6 +285,111 @@ function capture() { # Capture everything else iptables -t mangle -A DMESH_MANGLE_OUT -j MARK --set-mark 1338 ip6tables -t mangle -A DMESH_MANGLE_OUT -j MARK --set-mark 1338 + iptables -t mangle -A DMESH_MANGLE_OUT -j ACCEPT + ip6tables -t mangle -A DMESH_MANGLE_OUT -j ACCEPT +} + +function ipt() { + local A=$* + + iptables $A + ip6tables $A +} + +function istio_iptable_output() { + local OR=${OUTBOUND_IP_RANGES_INCLUDE:-10.15.0.0/16,10.16.0.0/16} + IFS=, + + IPTCMD=${IPTCMD:-iptables -t nat } + + ${IPTCMD} -F ISTIO_OUTPUT + + iptables -t mangle -A DMESH_MANGLE_PRE --match mark --mark 12 -j RETURN + iptables -t mangle -A DMESH_MANGLE_POST --match mark --mark 12 -j RETURN + ${IPTCMD} -A ISTIO_OUTPUT --match mark --mark 12 -j RETURN + + # Apply port based exclusions. Must be applied before connections back to self + # are redirected. + if [ -n "${OUTBOUND_PORTS_EXCLUDE}" ]; then + for port in ${OUTBOUND_PORTS_EXCLUDE}; do + ${IPTCMD} -A ISTIO_OUTPUT --dport "${port}" -j RETURN + done + fi + + # 127.0.0.6 is bind connect from inbound passthrough cluster + ${IPTCMD} -A ISTIO_OUTPUT -o lo -s 127.0.0.6/32 -j RETURN + + # Redirect app calls back to itself via Envoy when using the service VIP or endpoint + # address, e.g. appN => Envoy (client) => Envoy (server) => appN. + ${IPTCMD} -A ISTIO_OUTPUT -o lo ! -d 127.0.0.1/32 -j ISTIO_TPROXY + + ${IPTCMD} -A ISTIO_OUTPUT -m owner --uid-owner 0 -j RETURN + for gid in ${PROXY_GID}; do + # Avoid infinite loops. Don't redirect Envoy traffic directly back to + # Envoy for non-loopback traffic. + ${IPTCMD} -A ISTIO_OUTPUT -m owner --gid-owner "${gid}" -j RETURN + done + + # Skip redirection for Envoy-aware applications and + # container-to-container traffic both of which explicitly use + # localhost. + ${IPTCMD} -A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN + + if "${OR}" == "*" ; then + # Must be mangle table + iptables -t mangle -A DMESH_MANGLE_OUT -p udp -j MARK --set-mark 1337 + iptables -t mangle -A DMESH_MANGLE_PRE -p udp -j ISTIO_TPROXY + else + for cidr in ${OR}; do + iptables -t mangle -A DMESH_MANGLE_OUT -p udp -d ${cidr} -j MARK --set-mark 1337 + iptables -t mangle -A DMESH_MANGLE_PRE -p udp -d ${cidr} -j ISTIO_TPROXY + done + fi + + iptables -t mangle -A DMESH_MANGLE_PRE -j RETURN + + #${IPTCMD} -A ISTIO_OUTPUT -j MARK --set-mark 1337 + +} + + +function captureOptIn() { + local PORTS=$1 + ip6tables -t mangle -F DMESH_MANGLE_OUT + iptables -t mangle -F DMESH_MANGLE_OUT + + iptables -t mangle -F ISTIO_INBOUND + + if [ "${INBOUND_PORTS_INCLUDE}" == "*" ]; then + + # Makes sure SSH is not redirected + iptables -t mangle -A ISTIO_INBOUND -p tcp --dport 22 -j RETURN + + # Apply any user-specified port exclusions. + if [ -n "${INBOUND_PORTS_EXCLUDE}" ]; then + for port in ${INBOUND_PORTS_EXCLUDE}; do + iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -j RETURN + done + fi + + # If an inbound packet belongs to an established socket, route it to the + # loopback interface. + iptables -t mangle -A ISTIO_INBOUND -m socket -j ISTIO_DIVERT || echo "No socket match support" + + # Otherwise, it's a new connection. Redirect it using TPROXY. + iptables -t mangle -A ISTIO_INBOUND -j ISTIO_TPROXY + + else + + for port in ${INBOUND_PORTS_INCLUDE}; do + iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -m socket -j ISTIO_DIVERT || echo "No socket match support" + iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -j ISTIO_TPROXY + done + fi + + iptables -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 80 \ + --set-mark 1338 + } function capture_in() { @@ -221,51 +406,50 @@ function capture_in() { iptables -t mangle -A DMESH_MANGLE_PRE -j MARK --set-mark 1338 } -function dmeshoff() { - ip6tables -t mangle -F DMESH_MANGLE_OUT - iptables -t mangle -F DMESH_MANGLE_OUT - kill -9 $(cat /ws/istio-proxy/proxy.pid) + +# "init" ) +# dmeshinit ;; +# "start" ) +# dmeshon ;; +# "capture" ) +# capture ;; +# "run" ) +# dmeshon ;; +# "gw" ) +# dmeshgw ;; +# "runbg" ) +# dmeshbg ;; +# "runbggw" ) +# dmeshbggw ;; +# "dnson" ) +# captureDNSRedir ;; +# +# "dnsoff" ) +# captureDNSStop ;; +# +# "stop" ) +# dmeshoff ;; +# "clean" ) +# dmeshoff +# +# dmeshclean ;; + +function help() { + echo "'init' must be called once, followed by start/stop " + echo + echo "start: start proxy, running as istio-proxy/1337" + echo "stop: stop proxy and interception" + echo + echo "gw: run as istio-proxy, gatway mode" + echo + echo "dnson/dnsoff: enable dns capture" + echo + echo "init: prepare" + echo "clean: remove routes, devices and iptables" } -case "$1" in - "init" ) - dmeshinit ;; - "start" ) - dmeshon ;; - "capture" ) - capture ;; - "run" ) - dmeshon ;; - "gw" ) - dmeshgw ;; - "runbg" ) - dmeshbg ;; - "runbggw" ) - dmeshbggw ;; - "dnson" ) - captureDNSRedir ;; - - "dnsoff" ) - captureDNSStop ;; - - "stop" ) - dmeshoff ;; - "clean" ) - dmeshoff - - dmeshclean ;; - - * ) - echo "'init' must be called once, followed by start/stop " - echo - echo "start: start proxy, running as istio-proxy/1337" - echo "stop: stop proxy and interception" - echo - echo "gw: run as istio-proxy, gatway mode" - echo - echo "dnson/dnsoff: enable dns capture" - echo - echo "init: prepare" - echo "clean: remove routes, devices and iptables" - ;; -esac + + +CMD=$1 +shift +$CMD $* diff --git a/cmd/capture_tproxy.sh b/cmd/capture_tproxy.sh deleted file mode 100644 index 97b00ab..0000000 --- a/cmd/capture_tproxy.sh +++ /dev/null @@ -1,255 +0,0 @@ -#!/usr/bin/env bash - -# -# Once: ipt_init ( can be reverted with ipt_reset) -# - will set common hooks and rules -# -# tunup/tundown - setup dmesh1 and prepare for capture - -# Create common tables for dmesh. -# DMESH + MANGLE|NAT + PRE|POST|OUT -# ISTIO_REDIRECT -# ISTIO_DIVERT - set mark -# ISTIO_TPROXY - set port, mark - -PROXY_GID="1337" -#addgroup --gid 1337 istio-proxy - - -function ipt_init() { - # When using TPROXY, create a new chain for routing all inbound traffic to - # Envoy. Any packet entering this chain gets marked with the ${INBOUND_TPROXY_MARK} mark, - # so that they get routed to the loopback interface in order to get redirected to Envoy. - # In the ISTIO_INBOUND chain, '-j ISTIO_DIVERT' reroutes to the loopback - # interface. - # Mark all inbound packets. - iptables -t mangle -N ISTIO_DIVERT - - # TODO: only TCP ? - iptables -t mangle -A ISTIO_DIVERT -j MARK --set-mark 1337 - iptables -t mangle -A ISTIO_DIVERT -j ACCEPT - - # Create a new chain for redirecting inbound traffic to the common Envoy - # port. - # In the ISTIO_INBOUND chain, '-j RETURN' bypasses Envoy and - # '-j ISTIO_TPROXY' redirects to Envoy. - iptables -t mangle -N ISTIO_TPROXY - iptables -t mangle -A ISTIO_TPROXY ! -d 127.0.0.1/32 -p tcp -j TPROXY --tproxy-mark 1337/0xffffffff --on-port 15006 - - # Route all packets marked in chain ISTIO_DIVERT using routing table ${INBOUND_TPROXY_ROUTE_TABLE}. - ip -f inet rule add fwmark 1337 lookup 133 - # In routing table ${INBOUND_TPROXY_ROUTE_TABLE}, create a single default rule to route all traffic to - # the loopback interface. - ip -f inet route add local default dev lo table 133 - - iptables -t mangle -N ISTIO_INBOUND - # Bypass tproxy for established sockets - iptables -t mangle -A ISTIO_INBOUND -p tcp -m socket -j ISTIO_DIVERT || echo "No socket match support" - iptables -t mangle -A PREROUTING -p tcp -j ISTIO_INBOUND - - iptables -t nat -N ISTIO_OUTPUT - iptables -t nat -A OUTPUT -p tcp -j ISTIO_OUTPUT - - iptables -t filter -N DMESH_FILTER_IN - iptables -t filter -A INPUT -j DMESH_FILTER_IN - - iptables -t filter -N DMESH_FILTER_OUT - iptables -t filter -A OUTPUT -j DMESH_FILTER_OUT - - iptables -t filter -N DMESH_FILTER_FWD - iptables -t filter -A FORWARD -j DMESH_FILTER_FWD - - iptables -t nat -N DMESH_TCP_PRE - iptables -t nat -A PREROUTING -p tcp -j DMESH_TCP_PRE - - iptables -t mangle -N DMESH_MANGLE_PRE - iptables -t mangle -A PREROUTING -j DMESH_MANGLE_PRE - - iptables -t mangle -N DMESH_MANGLE_POST - iptables -t mangle -A POSTROUTING -j DMESH_MANGLE_POST - - iptables -t mangle -N DMESH_MANGLE_OUT - iptables -t mangle -A OUTPUT -j DMESH_MANGLE_OUT - - # Per user/gid mark must be set on OUTPUT (or POSTROUTE). We set a mark. - #GID=$(id -g costin) - iptables -t mangle -A DMESH_MANGLE_OUT -m owner --gid-owner ${PROXY_GID} -j MARK --set-mark 12 - iptables -t mangle -A DMESH_MANGLE_OUT -m owner --gid-owner ${PROXY_GID} -j RETURN - - #iptables -t mangle -A ISTIO_DIVERT -j LOG -p udp --log-prefix "dmesh-divert-udp" - #iptables -t mangle -A ISTIO_DIVERT -j LOG -p tcp --log-prefix "dmesh-divert-tcp" - - #iptables -t mangle -A ISTIO_TPROXY -j LOG --log-prefix "dmesh-tproxy" - - - # In routing table ${INBOUND_TPROXY_ROUTE_TABLE}, create a single default rule to route all traffic to - # the loopback interface. - - #ip rule list - #ip -s -d -a route list table all | grep -v "table local" |grep -v "table main" - -} - -# Opposite of init - delete the interception -function ipt_clean() { - # Flush and delete the istio chains. - iptables -t nat -F ISTIO_OUTPUT 2>/dev/null - iptables -t mangle -F ISTIO_INBOUND 2>/dev/null - - iptables -t mangle -F DMESH_MANGLE_POST - iptables -t mangle -F DMESH_MANGLE_PRE - - iptables -t filter -F DMESH_FILTER_IN - iptables -t filter -F DMESH_FILTER_OUT - iptables -t filter -F DMESH_FILTER_FWD -} - -# Clean and delete all tables created by DMESH -function ipt_reset() { - ipt_clean - - iptables -t mangle -F ISTIO_DIVERT 2>/dev/null - iptables -t mangle -F ISTIO_TPROXY 2>/dev/null - iptables -t mangle -F DMESH_MANGLE_OUT - iptables -t nat -F DMESH_TCP_PRE - - ip rule delete from all fwmark 1337 lookup 133 - ip -f inet route del local default dev lo table 133 - - # Make sure we're in clean state - iptables -t mangle -D POSTROUTING -j DMESH_MANGLE_POST - iptables -t mangle -D PREROUTING -j DMESH_MANGLE_PRE - iptables -t mangle -D OUTPUT -j DMESH_MANGLE_OUT - iptables -t mangle -D PREROUTING -p tcp -j ISTIO_INBOUND - iptables -t nat -D OUTPUT -p tcp -j ISTIO_OUTPUT - - iptables -t filter -D FORWARD -j DMESH_FILTER_FWD - iptables -t filter -D INPUT -j DMESH_FILTER_IN - iptables -t filter -D OUTPUT -j DMESH_FILTER_OUT - iptables -t nat -D PREROUTING -p tcp -j DMESH_TCP_PRE - - iptables -t nat -X DMESH_TCP_PRE - - iptables -t mangle -X ISTIO_TPROXY - iptables -t mangle -X ISTIO_DIVERT - iptables -t mangle -X ISTIO_INBOUND - iptables -t nat -X ISTIO_OUTPUT - - iptables -t mangle -X DMESH_MANGLE_POST - iptables -t mangle -X DMESH_MANGLE_PRE - iptables -t mangle -X DMESH_MANGLE_OUT - iptables -t filter -X DMESH_FILTER_IN - iptables -t filter -X DMESH_FILTER_OUT - iptables -t filter -X DMESH_FILTER_FWD -} - -# Simplified istio iptables script. -# Constants: -# - ISTIO_TPROXY_MARK=1337 -# - route table 133 -# - proxy port 15001 for outbound, 15004 for inbound -# - -# Based on INBOUND_PORT_INCLUDE/EXCLUDE, set capture for in ports. -# This is redirected from PREROUTING table -function istio_iptable_input() { - iptables -t mangle -F ISTIO_INBOUND - - if [ "${INBOUND_PORTS_INCLUDE}" == "*" ]; then - - # Makes sure SSH is not redirected - iptables -t mangle -A ISTIO_INBOUND -p tcp --dport 22 -j RETURN - - # Apply any user-specified port exclusions. - if [ -n "${INBOUND_PORTS_EXCLUDE}" ]; then - for port in ${INBOUND_PORTS_EXCLUDE}; do - iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -j RETURN - done - fi - - # If an inbound packet belongs to an established socket, route it to the - # loopback interface. - iptables -t mangle -A ISTIO_INBOUND -m socket -j ISTIO_DIVERT || echo "No socket match support" - - # Otherwise, it's a new connection. Redirect it using TPROXY. - iptables -t mangle -A ISTIO_INBOUND -j ISTIO_TPROXY - - else - - for port in ${INBOUND_PORTS_INCLUDE}; do - iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -m socket -j ISTIO_DIVERT || echo "No socket match support" - iptables -t mangle -A ISTIO_INBOUND --dport "${port}" -j ISTIO_TPROXY - done - fi -} - -function istio_iptable_output() { - local OR=${OUTBOUND_IP_RANGES_INCLUDE:-10.15.0.0/16,10.16.0.0/16} - IFS=, - - IPTCMD=${IPTCMD:-iptables -t nat } - - ${IPTCMD} -F ISTIO_OUTPUT - - iptables -t mangle -A DMESH_MANGLE_PRE --match mark --mark 12 -j RETURN - iptables -t mangle -A DMESH_MANGLE_POST --match mark --mark 12 -j RETURN - ${IPTCMD} -A ISTIO_OUTPUT --match mark --mark 12 -j RETURN - - # Apply port based exclusions. Must be applied before connections back to self - # are redirected. - if [ -n "${OUTBOUND_PORTS_EXCLUDE}" ]; then - for port in ${OUTBOUND_PORTS_EXCLUDE}; do - ${IPTCMD} -A ISTIO_OUTPUT --dport "${port}" -j RETURN - done - fi - - # 127.0.0.6 is bind connect from inbound passthrough cluster - ${IPTCMD} -A ISTIO_OUTPUT -o lo -s 127.0.0.6/32 -j RETURN - - # Redirect app calls back to itself via Envoy when using the service VIP or endpoint - # address, e.g. appN => Envoy (client) => Envoy (server) => appN. - ${IPTCMD} -A ISTIO_OUTPUT -o lo ! -d 127.0.0.1/32 -j ISTIO_TPROXY - - ${IPTCMD} -A ISTIO_OUTPUT -m owner --uid-owner 0 -j RETURN - for gid in ${PROXY_GID}; do - # Avoid infinite loops. Don't redirect Envoy traffic directly back to - # Envoy for non-loopback traffic. - ${IPTCMD} -A ISTIO_OUTPUT -m owner --gid-owner "${gid}" -j RETURN - done - - # Skip redirection for Envoy-aware applications and - # container-to-container traffic both of which explicitly use - # localhost. - ${IPTCMD} -A ISTIO_OUTPUT -d 127.0.0.1/32 -j RETURN - - if "${OR}" == "*" ; then - # Must be mangle table - iptables -t mangle -A DMESH_MANGLE_OUT -p udp -j MARK --set-mark 1337 - iptables -t mangle -A DMESH_MANGLE_PRE -p udp -j ISTIO_TPROXY - else - for cidr in ${OR}; do - iptables -t mangle -A DMESH_MANGLE_OUT -p udp -d ${cidr} -j MARK --set-mark 1337 - iptables -t mangle -A DMESH_MANGLE_PRE -p udp -d ${cidr} -j ISTIO_TPROXY - done - fi - - iptables -t mangle -A DMESH_MANGLE_PRE -j RETURN - - #${IPTCMD} -A ISTIO_OUTPUT -j MARK --set-mark 1337 - -} - - -# Outbound capture, using iptables TPROXY. -function ipt_capture_udp() { - - #iptables -t mangle -A DMESH_MANGLE_PRE -d 127.0.0.1/32 -j RETURN - - - # Outbound - iptables -t mangle -A DMESH_MANGLE_PRE --match mark --mark 1337 -j ISTIO_TPROXY - -} - - - diff --git a/cmd/capture_tun.sh b/cmd/capture_tun.sh index b62068f..32add28 100644 --- a/cmd/capture_tun.sh +++ b/cmd/capture_tun.sh @@ -12,7 +12,7 @@ function tunRoute() { # Find default GW - # 'default via 192.168.0.254 dev wlp2s0 proto dhcp metric 600 ' + # 'default via 192.168.0.254 dev wlp2s0 proto dhcp metrics 600 ' GW=$(/sbin/ip route | awk '/default/ { print $3 }') echo $GW > /tmp/DEFAULT_GW diff --git a/cmd/egress_tproxy.sh b/cmd/egress_tproxy.sh new file mode 100644 index 0000000..d86f7ef --- /dev/null +++ b/cmd/egress_tproxy.sh @@ -0,0 +1,209 @@ +#!/usr/bin/env bash + +# Egress capture. +# + +PROXY_GID="1337" + +# Port for capturing mesh services ( istio compat, load balancing ). +EPORT=${EPORT:-15001} + +function egress_routes() { + ip -6 addr add ::6/128 dev lo + + # The marked packets are routed to lo + ip -4 rule add fwmark ${EPORT} lookup ${EPORT} + ip -4 route add local default dev lo table ${EPORT} + + ip -6 rule add fwmark ${EPORT} lookup ${EPORT} + ip -6 route add local default dev lo table ${EPORT} +} + +function egress_routes_clean() { + ip -4 rule delete from all fwmark ${EPORT} lookup ${EPORT} + ip -4 -f inet route del local default dev lo table ${EPORT} + + ip -6 rule delete from all fwmark ${EPORT} lookup ${EPORT} + ip -6 -f inet route del local default dev lo table ${EPORT} +} + +function egress_tables() { + egress_routes $EPORT + _egress_tables "iptables" "127.0.0.1/32" + _egress_tables "ip6tables" "::1/128" +} + +function _egress_tables() { + local iptables=$1 + local LOCAL_RANGE=$2 + + # This table determines what gets marked - marks will result in a route to lo, and redirected + ${iptables} -t mangle -N DMESH_MANGLE_OUT + ${iptables} -t mangle -A OUTPUT -j DMESH_MANGLE_OUT + + + # This will redirect to tproxy anything on lo that is marked by the other rules + ${iptables} -t mangle -N DMESH_TPROXY + ${iptables} -t mangle -A PREROUTING -j DMESH_TPROXY + + ${iptables} -t mangle -N DMESH_CAPTURE_EGRESS + ${iptables} -t mangle -A DMESH_CAPTURE_EGRESS -j MARK --set-mark ${EPORT} + ${iptables} -t mangle -A DMESH_CAPTURE_EGRESS -j ACCEPT + + ${iptables} -t mangle -N DMESH_CAPTURE_MESH + ${iptables} -t mangle -A DMESH_CAPTURE_MESH -j MARK --set-mark ${MPORT} + ${iptables} -t mangle -A DMESH_CAPTURE_MESH -j ACCEPT + + ${iptables} -t mangle -N DMESH_CAPTURE_POD + ${iptables} -t mangle -A DMESH_CAPTURE_POD -j MARK --set-mark ${PPORT} + ${iptables} -t mangle -A DMESH_CAPTURE_POD -j ACCEPT + + # Added to prerouting, will redirect to tproxy: + # - all TCP and UDP with the mark + # - received on loopback + # - but not having dest on the loopback + # + # All outbound traffic to be captured will be routed using a special table that + # has default route set to loopback interface. + ${iptables} -t mangle -A DMESH_TPROXY -i lo -d ${LOCAL_RANGE} -j RETURN + + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${EPORT} -p tcp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${EPORT}/0xffffffff --on-port ${EPORT} + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${EPORT} -p udp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${EPORT}/0xffffffff --on-port ${EPORT} + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${MPORT} -p tcp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${MPORT}/0xffffffff --on-port ${MPORT} + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${MPORT} -p udp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${MPORT}/0xffffffff --on-port ${MPORT} + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${PPORT} -p tcp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${PPORT}/0xffffffff --on-port ${PPORT} + ${iptables} -t mangle -A DMESH_TPROXY --match mark --mark ${PPORT} -p udp -i lo ! -d ${LOCAL_RANGE} -j TPROXY --tproxy-mark ${PPORT}/0xffffffff --on-port ${PPORT} + +} + +# Empty the configurable chains +function egress_clean() { + iptables -t mangle -F DMESH_MANGLE_OUT + ip6tables -t mangle -F DMESH_MANGLE_OUT +} + +function egress_reset() { + egress_clean + _egress_reset iptables + _egress_reset ip6tables +} + +function _egress_reset() { + local iptables=$1 + + # Flush the tables + ${iptables} -t mangle -F DMESH_CAPTURE_POD + ${iptables} -t mangle -F DMESH_CAPTURE_EGRESS + ${iptables} -t mangle -F DMESH_CAPTURE_MESH + ${iptables} -t mangle -F DMESH_TPROXY + + # Remove the tables from the top chains + ${iptables} -t mangle -D PREROUTING -j DMESH_TPROXY + ${iptables} -t mangle -D OUTPUT -j DMESH_MANGLE_OUT + + # Remove the tables - now empty and not used + ${iptables} -t mangle -X DMESH_CAPTURE_POD + ${iptables} -t mangle -X DMESH_CAPTURE_EGRESS + ${iptables} -t mangle -X DMESH_CAPTURE_MESH + ${iptables} -t mangle -X DMESH_TPROXY + ${iptables} -t mangle -X DMESH_MANGLE_OUT +} + +# Decides which packets will be captured. +function egress_capture() { + iptables -t mangle -A DMESH_MANGLE_OUT -o lo -s 127.0.0.6/32 -j RETURN + ip6tables -t mangle -A DMESH_MANGLE_OUT -o lo -s ::6/128 -j RETURN + + # Loopback not impacted + iptables -t mangle -A DMESH_MANGLE_OUT -o lo -d 127.0.0.0/8 -j RETURN + + # Instead: pod and VIP range explicitly captured + # Redirect app calls back to itself via Envoy when using the service VIP or endpoint + # address, e.g. appN => Envoy (client) => Envoy (server) => appN. + #iptables -t mangle -A DMESH_MANGLE_OUT -o lo ! -d 127.0.0.1/32 -j ISTIO_IN_REDIRECT + if [ ${#ipv4_ranges_exclude[@]} -gt 0 ]; then + for cidr in "${ipv4_ranges_exclude[@]}"; do + iptables -t nat -A ISTIO_OUTPUT -d "${cidr}" -j RETURN + done + fi + + _egress_capture iptables + _egress_capture ip6tables + + # For Service CIDR ranges - redirect to LB service port + # For Pod CIDR ranges - redirect to pod port + + # Everything else is public IP - redirect to egress port. + +} + +function _egress_capture() { + local iptables=$1 + + ${iptables} -t mangle -A DMESH_MANGLE_OUT -m owner --gid-owner ${PROXY_GID} -j RETURN + ${iptables} -t mangle -A DMESH_MANGLE_OUT -m owner --uid-owner 0 -j RETURN + + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 22 -j RETURN + + if [ -n "${OUTBOUND_PORTS_EXCLUDE}" ]; then + for port in ${OUTBOUND_PORTS_EXCLUDE}; do + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport "${port}" -j RETURN + done + fi + + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 15007 -j RETURN + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 15008 -j RETURN + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 15009 -j RETURN + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 15010 -j RETURN + + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 9999 -j DMESH_CAPTURE_EGRESS + ${iptables} -t mangle -A DMESH_MANGLE_OUT -p udp --dport 9999 -j DMESH_CAPTURE_EGRESS + + + #iptables -t mangle -A DMESH_MANGLE_PRE -m socket --transparent -j MARK --set-mark ${EPORT} +} + +function egress_capture6() { + ip6tables -t mangle -A DMESH_MANGLE_OUT -p tcp --dport 9999 -j MARK --set-mark ${EPORT} + ip6tables -t mangle -A DMESH_MANGLE_OUT -p udp --dport 9999 -j MARK --set-mark ${EPORT} +} + +export TUNUSER=${TUNUSER:-istio-proxy} +export N=${N:-0} + +# Capture using a TUN - gVisor or lwip. +function egress_tun() { + ip tuntap add dev dmesh${N} mode tun user ${TUNUSER} group ${TUNUSER} + ip addr add 10.11.${N}.1/24 dev dmesh${N} + # IP6 address may confuse linux + ip -6 addr add fd::1:${N}/64 dev dmesh${N} + ip link set dmesh${N} up + + # Route various ranges to dmesh1 - the gate can't initiate its own + # connections to those ranges. Service VIPs can also use this simpler model. + # ip route add fd::/8 dev ${N} + ip route add 10.10.${N}.0/24 dev dmesh${N} + + + # Don't remember why this was required + echo 2 > /proc/sys/net/ipv4/conf/dmesh${N}/rp_filter + sysctl -w net.ipv4.ip_forward=1 +} + +function egress_tun_cleanup() { + # App must be stopped + ip tuntap del dev dmesh${N} mode tun + + # ip rule delete fwmark 1{N}1 priority 10 lookup 1{N}1 + # ip route del default dev dmesh${N} table 1{N}1 + + # ip rule del fwmark 1{N}0 lookup 1{N}0 + # ip rule del iif dmesh${N} lookup 1{N}0 + # ip route del local 0.0.0.0/0 dev lo table 1{N}0 +} + + + +if [[ "$1" != "" ]]; then + $1 +fi diff --git a/cmd/go.mod b/cmd/go.mod new file mode 100644 index 0000000..d45904e --- /dev/null +++ b/cmd/go.mod @@ -0,0 +1,17 @@ +module github.com/costinm/ugate/cmd + +go 1.21 + +replace github.com/costinm/ugate => ../ + +replace github.com/costinm/ssg-mesh => ../../ssh-mesh + +require ( + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d // indirect + github.com/eycorsican/go-tun2socks v1.16.11 // indirect + github.com/songgao/water v0.0.0-20190725173103-fd331bda3f4b // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20231219180239-dc181d75b848 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sys v0.15.0 // indirect +) diff --git a/cmd/run.sh b/cmd/run.sh new file mode 100644 index 0000000..f892917 --- /dev/null +++ b/cmd/run.sh @@ -0,0 +1,53 @@ + +# Gateway mode, running as istio-proxy +function dmeshbg() { + cd $PROXY_HOME + + ./dmesh > ./proxy.log 2>&1 & + echo $! > ./proxy.pid +} + +# Gateway mode, running as istio-proxy +function dmeshbggw() { + cd $PROXY_HOME + export DMESH_IF=none + ./dmesh +} + +function dmeshgw() { + cp /ws/dmesh/bin/dmesh ${PROXY_HOME}/dmesh + chown istio-proxy ${PROXY_HOME}/dmesh + su -s /bin/bash -c "/usr/local/bin/dmeshroot.sh runbggw" istio-proxy +} + +function dmeshon() { + cp /ws/dmesh/bin/dmesh ${PROXY_HOME}/dmesh + chown istio-proxy ${PROXY_HOME}/dmesh + su -s /bin/sh -c "/usr/local/bin/dmeshroot.sh runbg" istio-proxy + capture +} + +function dmeshoff() { + ip6tables -t mangle -F DMESH_MANGLE_OUT + iptables -t mangle -F DMESH_MANGLE_OUT + kill -9 $(cat /ws/istio-proxy/proxy.pid) +} + +# Setup the dirs and user/group. +function setup_dirs() { + groupadd -g 1337 istio + + mkdir /opt/dmesh + mkdir /opt/dmesh/bin + mkdir /var/dmesh + + chgrp istio /opt/dmesh + chgrp istio /opt/dmesh/bin + chgrp istio /var/dmesh + + chmod 775 /var/dmesh +} + +CMD=$1 +shift +$CMD $* diff --git a/cmd/test.sh b/cmd/test.sh index eace4f0..683afa8 100755 --- a/cmd/test.sh +++ b/cmd/test.sh @@ -20,14 +20,15 @@ _do_start() { } prepare_root() { - sudo TUNDEV=0 ./setup.sh setup - sudo TUNDEV=1 ./setup.sh setup + sudo ./capture.sh init_tun 0 + sudo ./capture.sh init_tun 1 } # setup test rig # Alice: 6400, gvisor=(10.11.0.x, 10.10.0.x), test_setup() { _do_start iperf3 ${TOP} iperf3 -s + _do_start gate ${TOP}/cmd/ugate/testdata/gate ${TOP}/build/ugate _do_start alice ${TOP}/cmd/ugate/testdata/alice ${TOP}/build/ugate _do_start bob ${TOP}/cmd/ugate/testdata/bob ${TOP}/build/ugate @@ -69,7 +70,3 @@ test_run() { # } -test_cleanup() { - TUNDEV=0 sudo setup.sh clean - TUNDEV=1 sudo setup.sh clean -} diff --git a/ugated/cmd/README.md b/cmd/ugated/README.md similarity index 100% rename from ugated/cmd/README.md rename to cmd/ugated/README.md diff --git a/ugated/cmd/run.sh b/cmd/ugated/run.sh similarity index 100% rename from ugated/cmd/run.sh rename to cmd/ugated/run.sh diff --git a/ugated/cmd/skaffold.yaml b/cmd/ugated/skaffold.yaml similarity index 86% rename from ugated/cmd/skaffold.yaml rename to cmd/ugated/skaffold.yaml index 419735a..4b370cc 100644 --- a/ugated/cmd/skaffold.yaml +++ b/cmd/ugated/skaffold.yaml @@ -9,7 +9,7 @@ build: format: "2006-01-02_15-04" artifacts: - - image: grc.io/dmeshgate/ugate + - image: costinm/ugate context: . sync: @@ -18,20 +18,15 @@ build: dest: "www" custom: - buildCommand: ../../bin/ko-build.sh + buildCommand: make build dependencies: - # Explicit - can also guess from Dockerfile paths: - "../../pkg/**" - - "../../ext/**" - "." - "go.mod" - "go.sum" deploy: -# kubectl: -# manifests: -# - ../../k8s/ugate/templates/* helm: releases: - name: ugate diff --git a/cmd/ugated/ugate.yaml b/cmd/ugated/ugate.yaml new file mode 100644 index 0000000..746bc38 --- /dev/null +++ b/cmd/ugated/ugate.yaml @@ -0,0 +1,153 @@ +# Example config file - ugated uses the current directory, and in IDEs the default is the same as the binary. +# 'testdata' has more configs, including a test CA. +# +# + + +## Port-based listeners. +# - 'whitebox' egress - listen on 127.0.0.1, forwardTo +# - forward: listen on :port, forwardTo dest +# - 'input': listen on :port, forwardTo localhost or empty + +# Hosts represents pre-configured nodes. +# Key is the DNS name or VIP. +# If a host is not found here, discovery will be used ( DNS, control plane) +hosts: + localiperf: + addr: localhost:15102 + + # Live test server + h.webinf.info: + addr: h.webinf.info:443 +# id: B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA +# +# c1.webinf.info: +# addr: c1.webinf.info:15007 + +# Remote accept request (reverse forward, "-R") +# Will also include relays, stun, etc. +# TODO: could also be part of the hosts: definition, include a list +# of ports. This way we don't dup the public key. +remoteAccept: + h.webinf.info: "B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA" + + c1.webinf.info: "" + +# If using K8S for token auth. If a cert is missing this will also be used +# with Citadel. +# +# If a cert is provisioned, will be extracted from the cert. +# namespace: test +# serviceaccount: default + + +clusters: + # Special cluster name used for XDS config. + # If set XDS will be used. If not set, but if a default k8s cluster is found + # a request for istio-system/mesh-env config map is made to get the address + # and istiod certificate, as well as additional settings for GCP. + # This can include a cacert - but if certs are provisioned, the workload identity root + # will be used. +# istiod.istio-system.svc:15012: +# addr: 34.69.72.163:15012 +# tokenSource: istio-ca +# + + example.test.svc:8080: + id: example.test.svc:8080 + addr: 1.2.3.4:8080 + + # Alternative way to configure K8S GKE clusters. + # By default .kube/config and KUBECONFIG will be used to create k8s clusters. + # A cluster named "k8s" will be set as the default cluster and used for k8s tokens. +# gke_PROJECTID_LOCATION_CLUSTER: +# # certificate-authority-data: +# cacert: | +# -----BEGIN CERTIFICATE----- +# MII... +# -----END CERTIFICATE----- +# addr: ... +# # Extracted from the Secret. +# token: Bearer .... +basePort: 13000 + +dst: + # Key is used a FQDN, if not explicitly configured + # If VIP is missing - it can be resolved via DNS. + + # A service. + echo.svc.mymesh.internal: + vip: + - "10.1.1.10" + + # A host + echo.w.mymesh.internal: + addr: "127.0.0.1" # :14010 + +# All possible listeners +listeners: + + # ======== Egress + # Local traffic, will send to original dst or secure depending on dst. + + tpudp: + port: 14002 + protocol: tproxy_udp + + socks: + port: 14003 + protocol: socks + + tproxy: + port: 14006 + protocol: tproxy + + httpproxy: + port: 14005 + protocol: http_proxy + + # ======= HBone / multiplexed ingress + + # SSH-secured inbound connections + # Will forward to local ports just like HBone. + ssh: + port: 14022 + protocol: ssh + + # Plain text HTTP/2 + hbonec: + port: 14001 + protocol: hbonec + + # Plain text HTTP/1.1 + hbone1: + port: 14004 + protocol: hbone1 + + # TLS - H2 or H1 + hbone: + port: 14008 + protocol: hbone + + # ======= Admin/debug port + admin: + port: 14000 + protocol: admin + + # ======== Regular listeners + udp: + port: 14009 + protocol: udp + + mqtt: + port: 14009 + protocol: mqtt + + echo: + port: 14010 + protocol: echo + + + ipfs: + port: 14011 + protocol: ipfs diff --git a/tools/provision.sh b/cmd/ugated/ugate_default.yaml similarity index 100% rename from tools/provision.sh rename to cmd/ugated/ugate_default.yaml diff --git a/cmd/ugated/ugated.go b/cmd/ugated/ugated.go new file mode 100644 index 0000000..1ddf271 --- /dev/null +++ b/cmd/ugated/ugated.go @@ -0,0 +1,163 @@ +package main + +import ( + "context" + "fmt" + "github.com/costinm/ugate/pkg/ipfs" + "log" + _ "net/http/pprof" + "os" + + "github.com/costinm/meshauth" + meshauth_util "github.com/costinm/meshauth/util" + sshd "github.com/costinm/ssh-mesh" + "github.com/costinm/ugate" + "github.com/costinm/ugate/ugated" + "sigs.k8s.io/yaml" + + _ "github.com/costinm/ugate/pkg/ext/gvisor" + //_ "github.com/costinm/ugate/pkg/ext/ipfs" + _ "github.com/costinm/ugate/pkg/ext/lwip" + + "golang.org/x/exp/slog" +) + +// Multiprotocol mesh gateway +// +// - iptables capture +// - option to use mTLS - if the network is secure ( ipsec or equivalent ) no encryption +// - detect TLS and pass it through +// - inbound: extract metadata +// - DNS and DNS capture (if root) +// - control plane using webpush messaging +// - webRTC and H2 for mesh communication +// - convert from H2/H1, based on local port config. +// - SOCKS and PROXY +// +// This does not include TUN+lwIP, which is now only used with AndroidVPN in +// JNI mode (without many of the extras). +func main() { + ctx := context.Background() + // First step in a 'main' app is to bootstrap + // - identity - certs, JWTs, other sources - maybe self-signed if first boot + // - control plane and core config/discovery services - MDS, k8s, XDS + // - env variables and local files to locate the CP and overrides/defaults + + // SetCert configs from the current dir and var/lib/dmesh, or env variables + // Writes to current dir. + // TODO: other config sources, based on env + + // Use the detected config storage to load mesh settings + meshCfg := &ugate.MeshSettings{} + basecfg := meshauth_util.FindConfig("ugate", ".yaml") + if basecfg != nil { + err := yaml.Unmarshal(basecfg, meshCfg) + if err != nil { + panic(err) + } + } + + // ===== SSH protocol config ================= + // + sshCfg := &meshCfg.SSHConfig + + // SetCert keys, certs, configs from ~/.ssh/ - unless ssh was configured in the base config + if sshCfg.Private == "" { + sshd.EnvSSH(sshCfg) + } + + // From sshm.go + authn := meshauth.NewAuthn(&sshCfg.AuthnConfig) + + if len(sshCfg.AuthnConfig.Issuers) > 0 { + err := authn.FetchAllKeys(ctx, sshCfg.AuthnConfig.Issuers) + if err != nil { + log.Println("Issuers", err) + } + sshCfg.TokenChecker = authn.CheckJwtMap + } + + // ========== Mesh Auth ====================== + // TODO: use SSH config to bootstrap + + // init defaults for the rest + if meshCfg.BasePort == 0 { + meshCfg.BasePort = 14000 + } + + // Initialize the authentication and core config, using env + // variables, detection and local files. + meshAuth, _ := meshauth.FromEnv(&meshCfg.MeshCfg) + if meshAuth.Cert == nil { + // If no Cert was found - generate a self-signed for bootstrap. + // Additional mesh certs can be added later, if a control plane is found. + meshAuth.InitSelfSigned("") + // TODO: only if mesh control plane not set. + meshAuth.SaveCerts(".") + } + + // ========= UGateHandlers routing and extensions =========== + + ug := ugate.New(meshAuth, meshCfg) + + if ug.Listeners["hbonec"] == nil { + // Set if running in a knative env, or if an Envoy/ambient runs as a sidecar to handle + // TLS, QUIC, H2. In this mode only standard H2/MASQUE are supported, with + // reverse connections over POST or websocket. + knativePort := os.Getenv("PORT") + haddr := "" + if knativePort != "" { + haddr = ":" + knativePort + } else { + haddr = fmt.Sprintf("0.0.0.0:%d", meshCfg.BasePort) + } + ug.Listeners["hbonec"] = + &meshauth.PortListener{ + Address: haddr, + Protocol: "hbonec"} + } + + if ug.Listeners["ssh"] == nil { + ug.Listeners["ssh"] = &meshauth.PortListener{ + Address: fmt.Sprintf(":%d", meshCfg.BasePort + 22), + Protocol: "ssh"} + } + if ug.Listeners["socks"] == nil { + ug.Listeners["socks"] = &meshauth.PortListener{ + Address: fmt.Sprintf("127.0.0.1:%d", meshCfg.BasePort + 8), + Protocol: "socks"} + } + if ug.Listeners["tproxy"] == nil { + ug.Listeners["tproxy"] = &meshauth.PortListener{ + Address: fmt.Sprintf(":%d", meshCfg.BasePort + 6), + Protocol: "tproxy"} + } + if ug.Listeners["quic"] == nil { + ug.Listeners["quic"] = &meshauth.PortListener{ + Address: fmt.Sprintf(":%d", meshCfg.BasePort + 9), + Protocol: "quic"} + } + + // Register core protocols. + ugated.Init(ug) + + ipfs.Init(ug) + + ug.Start() + // Start a SSH mesh node. This allows other authorized local nodes to jump and a debug + // interface. + + for _, h := range ug.StartFunctions { + go h(ug) + } + + // Log - may be sent to otel. + slog.Info("ugate/start", + "meshEnv", ug.Auth.ID, + "name", ug.Auth.Name, + "basePort", ug.BasePort, + "pub", meshauth.PublicKeyBase32SHA(meshauth.PublicKey(ug.Auth.Cert.PrivateKey)), + "vip", ug.Auth.VIP6) + + meshauth_util.MainEnd() +} diff --git a/cmd/wp/testdata/sub_browser1.json b/cmd/wp/testdata/sub_browser1.json deleted file mode 100644 index eb6f19f..0000000 --- a/cmd/wp/testdata/sub_browser1.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "endpoint": "https://updates.push.services.mozilla.com/push/v1/gAAAAABXMRmjsxpU7aqwHIKnC41PvQDkn5dqAL2S0Geq-2DtG7H6W6Geql1YMpihJ6GeHtg-SNfUCX4lLfxAyMLu7JVZRFH_4bXL_MhgXIqWWIQcGGx5YnGdvvtOaf82EmyOpoWvlf0E", - "keys": { - "auth": "S0DdWigLjQ-5j4Ug9McYgQ", - "p256dh": "BIRCXK5p71SKDo7Gy8gaXLnLsvJRjSyoxim9MVEQgL2Mb5YCXUdbjJXcU_sdhmwSm6T5NWTfJ1hwmn8cph8Jw98" - } -} diff --git a/cmd/wp/wp.go b/cmd/wp/wp.go deleted file mode 100644 index 1162853..0000000 --- a/cmd/wp/wp.go +++ /dev/null @@ -1,120 +0,0 @@ -package main - -import ( - "bytes" - "encoding/base64" - "flag" - "fmt" - "io/ioutil" - "net/http" - "net/http/httputil" - "os" - - "github.com/costinm/meshauth" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - msgs "github.com/costinm/ugate/webpush" -) - -var ( - to = flag.String("to", "", "Destination. A config file or env variable required") - data = flag.String("data", "", "Message to send, if empty stdin will be used") - verbose = flag.Bool("v", false, "Verbose messages") -) - -var hc *http.Client - -// Send a signed and encrypted message to a node, using Webpush protocol. -// -// This is used for control and events. -func main() { - flag.Parse() - - config := ugatesvc.NewConf("./", "./var/lib/dmesh/") - authz, _ := meshauth.FromEnv("", false) - - // Use ug as transport - will route to the mesh nodes. - ug := ugatesvc.New(config, authz, nil) - - hc = &http.Client{ - Transport: ug, - } - - sendMessage(config, *to, authz, *verbose, *data) -} - -// Send an encrypted message to a node. -func sendMessage(config ugate.ConfStore, toS string, vapid *meshauth.MeshAuth, show bool, msg string) { - var err error - if msg == "" { - msgB, err := ioutil.ReadAll(os.Stdin) - if err != nil { - fmt.Println("Failed to read message") - os.Exit(3) - } - msg = string(msgB) - } - - destURL := "" - var destPubK []byte - var authk []byte - - // Format expected to be same as the browser sub in webpush - subs := ugate.ConfStr(config, "sub_"+toS, "") - if subs != "" { - to, err := msgs.SubscriptionFromJSON([]byte(subs)) - if err != nil { - fmt.Println("Invalid endpoint "+flag.Arg(1), err) - os.Exit(3) - } - destURL = to.Endpoint - destPubK = to.Key - authk = to.Auth - if len(authk) == 0 { - authk = []byte{1} - } - } - - ec := meshauth.NewContextSend(destPubK, authk) - c, _ := ec.Encrypt([]byte(msg)) - - ah := vapid.VAPIDToken(destURL) - - if show { - payload64 := base64.StdEncoding.EncodeToString(c) - cmd := "echo -n " + payload64 + " | base64 -d > /tmp/$$.bin; curl -XPOST --data-binary @/tmp/$$.bin" - cmd += " -proxy 127.0.0.1:5224" - cmd += " -Httl:0" - cmd += " -H\"authorization:" + ah + "\"" - fmt.Println(cmd + " " + destURL) - - return - } - - req, _ := http.NewRequest("POST", destURL, bytes.NewBuffer(c)) - req.Header.Add("ttl", "0") - req.Header.Add("authorization", ah) - req.Header.Add("Content-Encoding", "aes128gcm") - - res, err := hc.Do(req) - - if res == nil { - fmt.Println("Failed to send ", err) - - } else if err != nil { - fmt.Println("Failed to send ", err) - - } else if res.StatusCode != 201 { - //dmpReq, err := httputil.DumpRequest(req, true) - //fmt.Printf(string(dmpReq)) - dmp, _ := httputil.DumpResponse(res, true) - fmt.Println(string(dmp)) - fmt.Println("Failed to send ", err, res.StatusCode) - - } else if *verbose { - dmpReq, _ := httputil.DumpRequest(req, true) - fmt.Printf(string(dmpReq)) - dmp, _ := httputil.DumpResponse(res, true) - fmt.Printf(string(dmp)) - } -} diff --git a/docs/2023-06-9-updated-design.md b/docs/2023-06-9-updated-design.md new file mode 100644 index 0000000..171d6d4 --- /dev/null +++ b/docs/2023-06-9-updated-design.md @@ -0,0 +1,32 @@ +# Simplified design + +## Local Protocols + +- SOCKS5 - shadowsocks compatible +- TUN - for compat with Android +- TPROXY - for Istio ztunnel compat +- Iptables - fallback +- HA Proxy protocol + +Some inter-process communication between local containers, vm or processes is also +important, doesn't need encryption and can avoid memcopy and serialization: + +- Binder +- flatbuffers ? +- UDS + +## Remote protocols + +- HBone - for compat with Istio, browsers (CONNECT) +- WebRTC + +## Firewall bypassing + +Use standard TURN servers - with authentication and encryption. +This should work with browsers out of box, and may share infra. + +Why: well established protocols, secure enough for browsers and RTC + +As a 'remote gateway' server, it needs to listen on the Gateway ports and initiate +WebRTC to the behind-firewal servers. The goal is to avoid permanent idle connections +and share any firewall holes for UDP and TCP. diff --git a/docs/2024-02-01-updated-design.md b/docs/2024-02-01-updated-design.md new file mode 100644 index 0000000..ebd2bc8 --- /dev/null +++ b/docs/2024-02-01-updated-design.md @@ -0,0 +1,77 @@ +# Protocols + +Like ambient, the HTTP and TCP separation is restored. + +As the core mesh protocol - I'm moving back to SSH. I want to test an alternative to HBONE (to validate that other +protocols can be plugged), and I think SSH is a more useful protocol for devices and integrations. + +No longer using Quic or H3 - instead WebRTC and webtransport, as they have more support in browsers and are 'user space'. + +Basic support for HBONE/CONNECT is intended for interop with Istio and HTTP-based infra (cloudrun). + +Core protocols for listeners: +- SSH - main mesh - on default port +- hbone and hbonec - http handlers configured with the protocol handlers, on default port. +- HTTP, including H2C +- HTTPS, including H2. The listener also accepts TLS routes (SNI). +- MQTT +- SOCKS5 +- webrtc +- webtransport + +Extended protocols: +- ws +- quic +- h2r +- ipfs + + + +# Routing + +Coupling any particular routing or LB with the data plane is not ideal. + +Instead, the data/mesh layer is expected to integrate with a 'metadata system' that may provide information about +any particular destination. DNS is probably the best common option, but K8S, XDS servers and other options exist. + +UGate provides a Dialer and RoundTrip API, as well as egress proxy protocols - iptables, socks, http proxy, tun. + +The primary addressing is based on FQDN - HTTP, socks, Dial(), http_proxy have an address which is used as the key in +the discovery system or local config to find the metadata. + + +## IP-based mesh + +TUN, iptables only have access to an IP:port - just like Istio sidecars. Based on istio mistakes, this uses a more +restricted approach: + +- dedicated ports - 80, 443, 8080, ... - based on the port we can terminate http, http2 or sniff TLS and extract a FQDN, which will be used instead. +- for any other port, a PTR lookup to the MDS server or the local config should return a FQDN. + +Once the FQDN and metadata are available - it will follow the same model as FQDN-based routing. + +### XDS discovery + +TODO: If an XDS server is configured, it should be used first - expecting ambient or istio records. + +### K8S discovery + +If running in K8S env, the apiserver can be queried for config (not watched!). A per-node or larger cache should be used. + +### DNS discovery + +As a baseline, a secure DNS with DANE, TXT and other records is expected. + + + +## Self-assigned identity + +Original design was centered around a self-assigned public key identity. Other protocols use the same model, and it is still +worth exploring. Each workload still gets a unique public key, which is mapped to a IPv6 VIP and FQDN. + +As suffix, ".m", "h.mesh.internal", "h.mesh.example.com", ".m.example.com" could be used. + +When a client uses the 'self-assigned' FQDN or VIP, the following rules are used: +- VIP is mapped to FQDN first. +- local discovery (mDNS, local DNS, etc) are used for the FQDN to get A record. +- connection will validate the public key directly - treating it as a DANE record. diff --git a/docs/ambient.md b/docs/ambient.md new file mode 100644 index 0000000..1df50df --- /dev/null +++ b/docs/ambient.md @@ -0,0 +1,6 @@ +# Ambient mesh + +My take on Istio ambient is a bit different from the official docs. + +The fundamental idea of ambient is to separate L4 and L7 (OSI layers was a good +idea after all). diff --git a/docs/azure-gw.md b/docs/azure-gw.md new file mode 100644 index 0000000..019fa4a --- /dev/null +++ b/docs/azure-gw.md @@ -0,0 +1,42 @@ + +# Azure Gateway notes + +https://learn.microsoft.com/en-us/azure/application-gateway/for-containers/overview + +- "Application Gateway for Containers" - using Azure Resource Manager +- user deploys apps using Azure RM, uses Gateway API to configure, with "ALB" controller as CP. +- VNet for networking +- "User assigned managed identity" + +Features: +- splitting, mTLS, routing APIs +- "near real time" updates on add/move pod, routes, probes +- elastic ingress to AKS +- *outside of AKS cluster and responsible for ingress* +- L7 - based on hostname, headers, etc +- mTLS to backend ( not on frontend !) +- also support BYO - a Frontend resource should be provisioned first. +- or fully managed bu ALB + +Price: +- 1 CU = 2500 persistent connections, 2Mbps throughput, 1 compute unit +- a compute unit is 50 connection/sec with TLS, 10 RPS (!) +- one instance == 10 CU, equivalent to a pod, mapped to to 10 CU +- old LB - 0.24/gateway-hour, 0.008 per capacity-unit-h, more for firewall +- example: 8 instances + - 40 CU to handle 88Mbps + - $179 fixed plus 467 variable = 646 + - 80 CU == 800 RPS, 200k persistent connections. + - 0 min scale - $323 / month + + +Setup: +- create network in resource group: `az network alb create` +- create frontend `az network alb frontend create` +- delegate subnet - association resource: `az network vnet subnet update --delegations "trafficControlers"` +- delegate permissions `az role assignment create ...` +- create association - `az network alb association create ...` + +Notes: +- status address type IPAddress by value is a FQDN ! +- \ No newline at end of file diff --git a/docs/closing.md b/docs/closing.md new file mode 100644 index 0000000..7caae63 --- /dev/null +++ b/docs/closing.md @@ -0,0 +1,32 @@ +# Server-first closing + +The golang HTTP stack behavior prevents a server from closing the write stream before the client has finished. + +The 'FIN' is sent after the 'Handler' method has finished. It is likely other languages and stacks have similar +behavior. + +One option is to implement a raw, low-level H2 framer - this is possible, but would make it difficult to integrate with +existing applications for 'proxyless' behavior. + +The second options is to use some framing. Each data chunk in the HTTP stream will have a prefix - including the length +of the data frame, and a type to differentiate data and 'close'. + +Instead of an arbitrary framing, we can use an existing format - like gRPC stream: + +Regular data frames will be encoded as: + +- '0' +- 4 bytes frame length +- 0x02 - equivalent with tag=0, type=2 (bytes) +- DATA + +Close will be encoded as: + +- '0' +- 4 bytes length - 00 00 00 02 +- 0x08 - tag=1, type=1 (varint) +- 0 for FIN, 1 for RST (error close) +- (addional data may follow) + +A third option is to fork the http2 implmentation and add a CloseWrite call, which is already a TODO at the top of +server.go. diff --git a/docs/core.md b/docs/core.md new file mode 100644 index 0000000..8de61b0 --- /dev/null +++ b/docs/core.md @@ -0,0 +1,53 @@ +# Core protocols and services + +## DNS + +Everything starts with DNS - it is the backbone of Internet and largest discovery server. + +Modern DNS (on the internet) is using DNS-SEC - signed records, and DNS-over-TLS/HTTPS for +host-to-resolver OR plain DNS over a secure network (IP-Sec). Unfortunately in many cases 'modern' +is not used, in particular on home networks. + +A 'mesh' DNS should: +- provide extended discovery for pods and metadata (alternative to MDS) +- security +- operate in disconnected mode + +## DHCP and CNI-IPAM + +Most home networks and routers use dnsmasq - a combined DNS and DHCP server. It creates a +'database' with the allocs in a file - but it is not very distributed. It is however very small. + +Docker uses 02:42:IP_ADDR to FF:FF. (02 means 'local admin') + +On a mesh, it would be ideal for devices to use public-key based IP overlay addresses for containers +and apps, and possibly for hosts too, with IPv6 for the core network. Each network segment also +has FE80:: addresses. + +The mesh and DNS/discovery system will need to map pods/containers/devices to hosts and 'via' gateways. + +## SAMBA, NFS, WebDAV, S3 + +Blob storage is commonly used - needs to be secured and discoverable. + +## Prometheus, Jaeger, Zinc, Grafana + +That provides: +- a database with key/value based records and '[]float' values +- a blob database keyed by trace-id and with a 'json' body +- log storage with search +- visualisation + +## Cert-Manager + +ACME certs can also be managed with CLI tools. + +## Dynamic DNS registration + +For home networks. This is also something 'isolated' VMs, laptops, mobile devices should use - +using the org DNS. + + + + + diff --git a/docs/crane.md b/docs/crane.md new file mode 100644 index 0000000..b218375 --- /dev/null +++ b/docs/crane.md @@ -0,0 +1,78 @@ +# Crane + +Crane is a tool for directly interacting with a OCI registry. +Using 'gcrane' variant which has gcr.io extensions. + +An OCI registry is a HTTP(S) server supporting GET, POST for SHA-based blobs and a small tag->manifest. +The manifest stores the SHAs of the config and a list of diff.tar.gzip files. Crane can push/pull blobs, and modify +the manifest and config. + +Install: `go install github.com/google/go-containerregistry/cmd/gcrane@latest` +Or: `docker run --rm gcr.io/go-containerregistry/gcrane` + +Basic features: +- tag - operates directly on the remote, no need to pull/tag/push. Faster than copy. +- cp - copy from one repo to another, set tag as well. +- delete +- mutate - change labels, annotations, entrypoint, cmd, env, user. Can also 'append' a tarball - but must be a real .tar, can't be stdin. +- append - take base, layer (can be stdin). "--set-base-image-annotation" to include annotation about base for the new image. +- export - get a tar for the image +- flatten - single layer, combine all layers +- ls - list tags in repo + +Mutate also takes a "-o" to output a tarball image, or "-t" to tag. If not specified, push to the original image manifest. + +Low level: +- blob - read a single blob, using @sha256..., output a .tar.gz to stdout +- config - dump image config ( entrypoint, env, layers ? ) +- manifest - shows the list of tar.gz layers. Can be downloaded with blob +- digest - get image digest by tag +- pull - oci, legacy or tarball + +Advanced: +- rebase - take last layers from one image, add them to a different image. Replaces old_base with new_base +- GGCR_EXPERIMENT_ESTARGZ=1 env variable + +Library: +- Source, Sinks - remote, tarball, daemon, layout Image/Write +- can interact with Docker daemon +- Index: remote/layout/random +- Layer: remote, tarball + +```shell + +crane config gcr.io/istio-testing/proxyv2:1.12-dev-distroless |jq . +# shows 10 layers - first distroless, second our additions, last 8 small parts of istio + "config": { + "User": "65532", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", + "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt", + "ISTIO_META_ISTIO_PROXY_SHA=istio-proxy:ff44db02db5a99a7f06c31441c3a5a0f7ce9e2b4", + "ISTIO_META_ISTIO_VERSION=1.12-alpha.eae0ae5c1c492ce59ec56f73552a808b91687d58" + ], + "Entrypoint": [ + "/usr/local/bin/pilot-agent" + ], + "WorkingDir": "/", + "OnBuild": null + }, + + +$ gcrane manifest --platform linux/amd64 gcr.io/istio-testing/proxyv2:1.12-dev-distroless |jq . + + https://gcr.io/v2/istio-testing/proxyv2/blobs/sha256:c5dc4f258debef99ad7e7690d50bd879f1193553e0d36747e9626cd7ac3265f8 + https://storage.googleapis.com/artifacts.istio-testing.appspot.com/containers/images/sha256:c5dc4f258debef99ad7e7690d50bd879f1193553e0d36747e9626cd7ac3265f8 + +$ gcrane blob gcr.io/istio-testing@sha256:ed95b4ae780017a8aed1e302277312b9def69adfaf61f5fe86a3cc8a626b5b50 | tar tvfz - +- /var/lib/dpkg/tzdata, netbase, base +- tzdata: usr/share/zoneinfo /usr/sbin/tzconfig +- netbase: /etc/protocols,services,rpc,ethertypes +- /etc/passwd,group, nsswitch, +- /etc/ssl/certs/ca-certificates.crt +- base: /etc/host.conf, +- ./lib/x86_64-linux-gnu/libc-2.31.so + +gcrane append -f <(cd ../out/cert-ssh/bin && tar -cf - sshd) -t gcr.io/dmeshgate/ssh-signerd/sshd:latest + +``` diff --git a/docs/dev.md b/docs/dev.md index fdd6457..735f559 100644 --- a/docs/dev.md +++ b/docs/dev.md @@ -2,6 +2,10 @@ Few tools that accelerate and simplify the development, and their impact on projects. +```shell +curl https://$NAME/ --connect-to $NAME:443:127.0.0.1:15007 +``` + ## Ko @@ -28,68 +32,6 @@ kind.local == use local kind Can also cross-build, with "--platform=linux/amd64,linux/arm64" -# Skaffold - -It will also check if any file has changed, and in 'dev' mode -watch for changed files and re-deploy automatically. -It can also start a debugger and forward ports. - -Without certificates and for faster time: deploy in-cluster registry, -forward registry port to 5001. In-cluster registry runs on localhost:5001 - -- use shell script to build - most flexible, easy to plug in ko or other targets -- schema rewrite/refactoring removes comments. - - -```yaml -apiVersion: skaffold/v2beta14 -kind: Config -metadata: - name: istiod -... - - -build: - insecureRegistries: - - localhost:5001 - -... - - # Building real istiod - # Due to KO, which uses the image == last component of the go package - - image: pilot-discovery - context: /ws/istio-stable/src/istio.io/istio - custom: - buildCommand: /ws/dmesh-src/wpgate/bin/build-istiod.sh - dependencies: - paths: - - "pilot/**" - - context: . - custom: - buildCommand: ../../bin/build-istiod.sh - dependencies: - paths: - - "../../../istio/pilot/**" - -deploy: - kubectl: - manifests: - - ns.yaml - - ../helm/istiod/charts/*.yaml - -``` - -Env variables in the build command: - -```shell -PUSH_IMAGE=true -IMAGE=gcr.io/dmeshgate/istiod:t-2021-05-15_11-23 -IMAGE_REPO=gcr.io/dmeshgate/istiod -IMAGE_TAG=t-2021-05-15_11-23 -SKAFFOLD_UPDATE_CHECK=false - -``` ## Okteto diff --git a/docs/dns_sni.md b/docs/dns_sni.md deleted file mode 100644 index 758fc7f..0000000 --- a/docs/dns_sni.md +++ /dev/null @@ -1,51 +0,0 @@ -# Notes on DNS and SNI - -For TLS, the main routing info is the SNI part of ClientHello. - -For compatibility with most clients, it must be a hostname - i.e. subject to: -- max 256 bytes -- each label max 63B -- start with letter, contains letter and digits and "-" (not in first or last). - - -Standard convention for IDN is to start with "xn--" prefix to indicate UTF name. -IPFS/LibP2P also have the convention to start with a byte identifying the syntax of the rest. -Starting with a 'type' also makes sure it starts with a letter, and the rest can be -hex or base32. - -DNS allows _ and other binary characters - but this is unlikely to work with TLS clients -and servers. - -https://github.com/multiformats/multibase defines some prefixes to identify the base -encoding of a string. We also want to use a tag to identify what kind of address it is. -They use: -- 'f' = hexadecimal -- 'b' = base32 (lowercase) - not using 0, 1, 8, 9 or - - -For ugate needs, the first label of the domain is used to encode the node ID or dest. -Since this is a mangled name, we can also use the size for the identifier and presence -of dashes. - -We may support: -- ugate 32-byte KEY, base32 ( 32 * 8 / 5) = 52 chars, can't be encoded in hex. This is - the primary format, since it can encode a ED25519 public key or SHA. -- ugate 8-byte ID, hex: 16hex digits = 16 chars. Base32 is 13 chars, not worth it. -- ipv4 - simplest is 'i80-10-1-1-2' -- ipv6 - simplest is 'p80-fd--01' ( : replaced with -) - will have double dash or > 3 dashes -- alternative - all hex, no dashes: 12 chars for IPv4 and port, 36 chars for IPv6 and port - -Since first char must be a letter, and hex and base32 can start with digit, prefixes are used: -- u - for 32-byte base32 ID -- f - for 8 byte hex -- a - for hex IP and port, len determines ipv4 vs ipv6 -- i - for port-ipv4 -- p - for port-ipv6 - max is 36 bytes (16 + 2), leaving 63-36-1=26bytes - -The ugate primary port is expected to handle 'BTS'-style communication, with the first -component used to identify the mesh address. An optional prefix "nXXX-" may identify -the network. We need to keep the net id short - max 24 bytes. - -For short namespace/service, we can also use: -- s[PORT]--SVC-NS - if len > 63, the truncated SHA with prefix -- can be added as suffix -- s[PORT]-[NUMBER]-SVC-NS for stateful sets - diff --git a/docs/egress_port_listener.md b/docs/egress_port_listener.md new file mode 100644 index 0000000..fe59085 --- /dev/null +++ b/docs/egress_port_listener.md @@ -0,0 +1,45 @@ +K8S: +API_SERVER/api/v1/namespaces/%s/pods/%s/portforward +Forwards a local port to the pod, using SPDY or Websocket. + +Docs and other options: +https://blog.ston3o.me/how-to-expose-local-server-behind-firewall/ +- OpenVPN - easy to setup docker container +- upnpc +- tor + ngrok - free 40 con/min + pagekite - py, $3/month + bleenco/localtunnel (go) + localtunnel/localtunnel (js) + yaler - commercial + inlets / rancher remote dialer + +socks bind standard - not commonly implemented + +ssh -R remote_server_ip:12345:localhost:12345 +- multiplexed over ssh TCP con, flow control per socket + + +``` + byte SSH_MSG_CHANNEL_OPEN + string "forwarded-tcpip" + uint32 sender channel + + uint32 initial window size + uint32 maximum packet size + + string address that was connected + uint32 port that was connected + + string originator IP address + uint32 originator port +``` + +concourse TSA - uses ssh, default 2222 +'beacon' is effectively using ssh command to forward ports +"golang.org/x/crypto/ssh" +https://github.com/concourse/tsa/blob/master/tsacmd/server.go + +Rancher 'Reverse Tunneling Dialer' and 'inlets': +- use websocket - no multiplexing. +- binary messages, using websocket frames diff --git a/docs/gamma_issues.md b/docs/gamma_issues.md new file mode 100644 index 0000000..2ff0ac1 --- /dev/null +++ b/docs/gamma_issues.md @@ -0,0 +1,197 @@ +# GAMMA issues and alternatives + +## Background + +GAMMA is a workgroup attempting to apply the K8S Gateway API and model for 'mesh'. + +The term 'mesh' is defined in a different way by each product - but generally +in K8S context refers to policies applied on the communication between workloads and +Services. + +HttpRoute is the central API. The Gateway API abstracts a reverse proxy / load balancer +that may route to backends and enforce policies. + +A very important decision is that the Gateway implementation may choose to run an +in-cluster deployment - or may use external multi-tenant infrastructure. + +In many cases it is far more efficient to share resources - if one namespace +needs few 100 qps it is overkill to allocate even 1 CPU - and in most cases +due to replication even more will be wasted. Sharing a gateway across clusters +or even tenants can result in lower costs and higher performance, and may +be easier to manage. + +There are also cases where a dedicated deployment is needed - both cases are allowed. + +A Gateway is usually associated with a custom DNS domain and external IP - but +implementations also allow using VPC IPs - or may create K8S Services and use cluster IP. +It is possible to automate the DNS registration with external DNS servers as well +as provisioning of ACME or other public certificates. + +An L7 request has a number of steps (for https): +- client DNS resolution - in most cases in K8S this results in a unique 'cluster IP', + but for internet gateways it is more common to have shared IPs +- a TCP connection is opened to the IP - this is handled by L4 routing, and the CNI implementation in K8S handles + the cluster IPs +- SNI with same hostname is sent to the IP, and server can use that to lookup and send a cert +- server sends back certificates for the SNI, and client checks - typically matching the hostname/SNI, or using a control plane or config to find the expected workload identity (spiffee) +- after ALPN handshake, the request is processed and "Host" header is matched. +- based on host, different routes and policies are applied. +- the request is forwarded to one of the backends. + +# ClusterIP and Service limitations + +GAMMA is currently defined as associating HttpRoute with a Service - which has +a cluster IP and sometimes multiple ports. Implementations may choose +how to implement this - but since the cluster IP and the Service were +previously handled by CNI as L4 services, some form of interception or redirection +for the service is needed. The API is pretty much forcing this - there is no +provision for a client to get a different IP in the DNS resoultion or use the +previous L4 routing rules. Client must use the Service name (service.namespace.svc.cluster.local), +will get the cluster IP assigned by K8S and handled by the CNI layer. + +That works fine for Istio - either sidecar or ambient - because interception is the +core functionality. But it is not clear this complexity is the best option, and it forces all +potential clients to also use Istio. + +Running a full gateway with 100s of features next to each worklod has a very large +cost (operations and resources), so Istio ambient is moving to model where +the L7 features are handled by "Waypoints", which are shared gateways currently with +namespace granularity. + +However due to the GAMMA semantics - some interception to re-purpose the Service IP is still required. + + +A better approach for many use cases that GAMMA supports is to simply use the +real Gateway API - with an 'internal' class, as well as using a new hostname. While this +may require clients to be configured to use a new name - for new applications +it is not a huge burden. The old name with 'svc.cluster.local' is too tied with +the ClusterIP, unique service IP - and the old IP are tied to the workings of the CNI. + +Istio has put very high priority on the 'user should never have to make changes +in their app config' - and Ambient puts an even higher priority on 'you should +not break any existing app'. Both have huge price - and many corner cases. + +A developer should be able to make his own choice - and having a simpler architecture +and lower risk and costs may be worth making few config changes for a lot of users. + +There are additional benefits for this approach: +1. the new DNS may use a managed DNS server and be visible in the entire VPC +2. user can pick whatever names they want +3. if they can use a real domain and with ACME DNS channenge they can even get public certs +4. For HTTP fewer IPs are used - even one per region +5. Same multi-tenant servers that are used for regular gateways can be used. + +All this can be done today using the 'real' Gateway API - for the price of a small +config change and using a name chosen by the user instead of the fixed K8S naming conventions. + +## Native TLS + +More and more applications are using client libraries that default to TLS+JWT - for any +such application interception is going to fail to apply any L7 policy. + +The usualy examples in Istio and gamma show apps making http:// requests - and +the intercepting proxy applying policies. It works because after cluster IP is intercepted +we can parse the http request and see the path/headers - but it doesn't work +if the client originates a https or TLS connection. + +In the early days it was very common for apps to use plain text in the internal VPC, +and probably still is - but tools like CertManager make it very easy for apps to +get certs and frameworks and libraries are starting to be more security aware. + +For any app doing native TLS, GAMMA is not practically implementable. Using +an internal gateway works - if it gets proper name and certificate that is compatible +with the client libraries, which generally use DNS verification ( spiffee requires +the apps to use XDS to get the server workload identity - proxyless can do this, but it +is very rare to have real Gateways use spiffe since it requires all clients to be in the mesh) + +# Recommended uses for GAMMA + +## Client apps that can't be changed/reconfigured and use http:// + +If the application can't be changed or reconfigured to use a real Gateway where +routes are applied - we must be able to apply the HttpRoute on the path from +client originating the request to the cluster IP of the Service. As mentioned +above, that typically requires interception in a sidecar or per node - before the +packets get encrypted by CNI. + +If the application can be reconfigured to use a different address - using a real +gateway avoids all this complexity and has far more flexibility. + +It would be best to define an internal Gateway anyways - so future versions +of the app or clients not running Istio/etc ( not in K8S or env supporting interception) +can still use the service with the routes/policies. + +If the client app is using https:// - mesh implementations using interception can't +do much against a proper implementation, only option is to point to the +internal Gateway who can terminate TLS and apply the policies. + +## Pods with local host affinity + +Most Gateway implementations run Pods or use external shared infrastructure. +In performance-critical cases it is useful to co-locate related pods using +affinity - the pods would use node-local paths with higher bandwidth and lower +latency then ethernet/fiber. + +Generally encryption between 2 containers on same machine is not required (or +very useful) - if the node is compromised it can bypass the protection. Encryption +is important for over-the-wire and against sniffing or MITM - it does not +protect against kernel/root on either end. + +K8S provides Service options to prefer or require same-node - and usually the +apps are written to take advantage and not use https:// so are compatible with +interception-based implementations. + +In such case a GAMMA implementation can be better, if it is aware of same-node. +Ztunnel has this capability - but only for L4. Istio sidecars currently don't. +I'm not aware of any mesh that can do this yet at L7 - except maybe a per-node +Waypoint that is not very feasible. + +## Proxyless - or 'native' implementations + +Istio and gRPC have used the term 'proxyless' to describe native implementations +of the policies, where libraries or framework code are used to get the configs +and implement them directly. Routing and load balancing policies would be on +the client side, authz on the server side. + +If client and server are on the same node this can have a huge impact, since +local communication doesn't require encryption and is significantly faster +then over-the-wire. Even if the L7 LB was per-node, proxyless has one less hop - +and running per-node L7 ILB has operational and security costs. + +Proxyless can see the internal Gateways and Routes and directly implement the configs. + +While benefits are clear, there are costs too: +- feature gaps - a fully featured Gateway has a lot of features and additional APIs +- security risks - the external gateways can run on separate nodes and accounts/teams +- if some sensitive policy, in particular security, is missing there are risks associated with the gap. +- language and protocol support is limitted - gRPC supports few languages, other protocols are currently Go-only +- code/binary size increases +- complexity and bugs in the framework require more frequent builds/updates, sometimes the mesh implementation is order of magnitudes larger than the app code. + +A proxyless implementation can be used with GAMMA - it could also be used with an +internal Gateway, if the control plane decides it can bypass the gateway. + +It is critical for implementations to be aware of the server capabilities, in +particular on Istio-Ambient like implementations. If the server has a sidecar or +is a proxyless implementation AND all policies are in the supported set, it can +bypass the Waypoint or Gateway. Otherwise it should still be routed to the middle +proxy, and NetworkPolicy should restrict direct communication with the backend. + +## WASM and Agents + +One option for the proxyless issues is to have a Gateway implementation in WASM +or as a per-node agent - but written as a non-proxy API with some integration with +the framework. + +For example the http or gRPC library would make a UDS or local call to a sidecar +or per node agent with the hostname, path, headers - and receive back the destination +IP and metadata (expected CA, what SNI to use, if it is on the same node or requires TLS). + +The agents have costs too - and it is useful to have them local. Making multiple +roundtrips can have a higher cost then a proxy. + +A WASM implementation can be a middle ground too and can be linked with the app like +a proxyless implementation - but would work with more languages and protocols. + +This has the same limitations and risks as proxyless, plus 1-2 additional same-node +RTT. diff --git a/docs/ip_ranges.md b/docs/ip_ranges.md index e4c90ef..e915353 100644 --- a/docs/ip_ranges.md +++ b/docs/ip_ranges.md @@ -1,15 +1,24 @@ +# Use in dmesh -https://en.wikipedia.org/wiki/Reserved_IP_addresses +All nodes, workloads and services have an overlay IPv6 as well as multiple IPs. +The interface address is usually derived from SHA of the public key. + +For network, options are to use the FC::/8 range (not defined, reserved for local), +or FD::/8, which is specified as 48bit random and 16 bit 'subnet id'. + +The 48bit can be derived from the SHA of the fabric public key, subnets may +define different locations. -https://datatracker.ietf.org/doc/html/rfc6890 Special-Purpose IP Address Registries +# Docs and notes +https://en.wikipedia.org/wiki/Reserved_IP_addresses +https://datatracker.ietf.org/doc/html/rfc6890 Special-Purpose IP Address Registries https://datatracker.ietf.org/doc/html/rfc5735 - IPv4 0.0.0.0/8 - 'this network'. Can use 0.0.0.0 as source to 'learn the IP'. - 10.0.0.0/8 172.16.0.0/12 192.0.2.0/24 - TEST-NET @@ -20,11 +29,18 @@ https://datatracker.ietf.org/doc/html/rfc5735 - IPv4 100.64.0.0/10 - shared address space https://datatracker.ietf.org/doc/html/rfc6598 -224.0.0.0/4 - multicast +224.0.0.0/4 - multicast - a huge space that can be used ! 0xE0.00.00.00 -240.0.0.0/4 - future use +240.0.0.0/4 - future use - 0xF0.00.00.00 -169.254.0.0/16 - link local, auto-config (no DHCP) +169.254.0.0/16 - link local, auto-config (no DHCP allowed). rfc3927 + 169.254.169.254 used as MDS. Also DNS in GCP + 'can't be used by any router' - but ok on the bridge + 169.254.169.123 - NTP in AWS + 169.254.169.253 - DNS in AWS + 169.254.1.0 to 169.254.254.255 is the range for random addresses, 0 and 169.154.255.0 are free. + recommends consistent random generator (MAC?), storing an assigned address, plus ARP probe and announce + same domain with ARP announce - i.e. bridge 192.0.0.0/24 - IETF assignments 192.88.99.0/24 - 6to4 diff --git a/docs/localnet.md b/docs/localnet.md new file mode 100644 index 0000000..3189d26 --- /dev/null +++ b/docs/localnet.md @@ -0,0 +1,56 @@ +# Local host and the mesh + +Containers and VMs work very hard to act as a separate, standalone machine - with their own network stack and IP address. +Looking back, we started with 'large' servers shared by many users, batch processes and applications, moved to +one and then many machines per user and large number of servers in cloud providers. But we also moved back to very +large servers with many cores and huge memory shared by many users. + +For a long time developers using bad abstractions and interfaces had a hard time understanding that a local call +is very different from a cross-region network call - latency, common errors, marshalling costs. Now we are at +a point where we need developers to understand that communication between 2 processes on the same machine is +very different from network calls. + +I was ranting about microservices and monoliths craziness - but I think the core of the confusion is the +continuing attempts to abstract and hide the hardware architecture and differences between network calls +and communication between 2 processes on the same machine. + +K8S provides nice abstractions and mechanisms to schedule pods on specific node pools or nodes. Affinity, +taints, services with node preference, dedicated node pools can all be used to co-locate specific +services, preserving the isolation and security boundaries but with 'same machine' instead of 'over the wire' +semantics. + +## mTLS for interprocess communication + +Rarely actually necessary - but workloads (proxyless) or sidecars (envoy, ztunnel) can use mTLS even when +communicating on the same machine. Will still be much faster than over the wire - but most optimizations +are lost. + +If you are considering combining 2 uServices with different security boundaries in a monolith - the +communication between them will clearly not be mTLS, and having them on the same machine isolated but +using a local IPC instead of mTLS over TCP is strictly better. + +TODO: expand + +## Protocols + +TCP is the easiest option, with minimal or no code changes when moving uServices to the same machine. +For same machine you can avoid mTLS - but still need some ways to identify the peer. That's the job of +an MDS that tracks the pods on the node and can provide the identity. + +UDS requires few small changes - but adds ability to strongly identify the peer and to pass file descriptors +between processes - including shared memory segments that can provide some zero-copy semantics. This works +for containers - not for VMs running on the same host. + +Virtio is probably the best option when the workload needs strongest isolation. Gophers in gVisor provide +a similar capability. + +# Zero copy + +The best case is a zero copy mechanism - it is the closest to 'monolith' behavior. Avoiding context switch +would also be great - Android Binder and few other 'fiber' mechanisms allows this for example. + +[Splice and pipes](https://www.kernel.org/doc/html/next/filesystems/splice.html) and the splice call are +powerful mechanisms enabling some zero copy. + +Hugetables and shared memory segments, combined with flatbuffers and uring-like queues is another option. + diff --git a/docs/mesh.md b/docs/mesh.md new file mode 100644 index 0000000..32f251d --- /dev/null +++ b/docs/mesh.md @@ -0,0 +1,87 @@ +# Meshes + +Mesh may mean many things, and Istio has further confused the term by arbitrarily adding +observability, which is a general concept. + +I believe 'mesh' is primarily about identity and security across multiple environments, +and policies and telemetry based on identity and secure information, with the +secure parts of the Internet and mobile as the largest public mesh. + +In regular K8S or on most IPSec/Wireguard/proprietary networks, the policies are expressed +using authenticated IP address and associated trusted discovery server. + +The policies are applied at the network level - by CNI or firewall - the only identity +they see is the source or dest IP. The low level keys provisioned on each node authenticate +the IP, so it can't be forged and MITM is not possible. As long as you are in the secure +network boundaries - and the IP is not re-allocated - you can trust the IP. + +Re-allocation and dynamic assignment of IPv4 has important risks and implications, can be +discussed separately, but secure networks do support static or subnet allocations too +that are more durable. + +Inside the secured network - the associated discovery server holds metadata for the IP. +For K8S it's extensive - the full Pod spec, including a K8S specific 'account'. In other +networks it can be just a FQDN (hostname) and associated 'owner'. + +## Metadata and Discovery servers + +Inside the boundaries of a secure network, we know the IP is authenticated and an ephemeral +but secure identity. From an application perspective - it is the ONLY information they +see with the standard POSIX/linux APIs. + +Even with Istio sidecars - the mTLS is hidden from the user and the client identity +only made available as an envoy-specific complex header (XFCC). In Istio ambient things +are worse for L4 - and with Waypoints it's not yet clear how identity will be passed. +To make things worse - Istio doesn't even propagate the real source IP with sidecars +unless TPROXY is used ( and it requires granting high permissions to the sidecar). + +Many applications need to make decisions based on the caller identity - and usually +have their own separate authentication, sometimes using user/password or mTLS or JWTs. +Use of the source IP is rarely or never used besides logging - and the real source +is also hidden in Forwarded headers in HTTP and HA-Proxy prefix for TCP. + +RFC912 and successors (from 1984) originally titled "Authentication service" defines +one of the first protocols to map TCP level info available to apps back to +identity. It takes src/dst ports and issues a request to the remote host. The +remote host will see the source/dst IP on the callback, and +use the extra src/dst to lookup the user identiy on its side - and return the +identity on the host. Assuming the IP network is secure - it mostly works. + +Modern metadata servers run on a host-only address (like 169.254.169.254) and provide +tokens and trusted info from the discovery and auth systems. Like Ident, it needs to +find caller identity on the local host based on IP - however in most cases they only +use the IP (local call - either same network namespace or a local container). They +keep track of all containers running locally - and use the discovery server to +know identity and metadata. + + + +## Native mesh - or proxyless + +A native mesh handles authentication, security and policy at the application level using +libraries or frameworks. This is what applications have been doing since the +discovery of security - what makes it a 'mesh' is the presence of a discovery server +that primarily provides a mapping between 'mesh identity' and current IP, as well +as optional security options. + + +## User and host identities + +From an application perspective, the pod or host service accounts are not as important +as a user identity ( or service account ) that owns the data. In many cases for +container-based and micro-services the identity of container can be treated as +the identity of the user - howerver even in this case there are multiple containers +running in multiple environments that hold the same identity. + +Modern secure servers attempt to bind user to host - or apply different policies for +a user depending on the host, for example allow access to less data if user is using +a device not owned/controlled by the org like a personal phone. + + + + + + + + + diff --git a/docs/monoliths1.md b/docs/monoliths1.md new file mode 100644 index 0000000..526e6bc --- /dev/null +++ b/docs/monoliths1.md @@ -0,0 +1,94 @@ +# Monoliths, microservices and the middle ground + +Skipping the rant part, it is important to find a middle +ground where users can take advantage of the benefits of +microservices with less costs. If the microservices +are all written in the same language and have about the +same security blast radius and RBAC permissions - combining +them in a monolith is not a bad idea, it is quite simple to +replace the remote calls to local calls and keep things +modular via reviews. + +But this is not the only way, and it is not always the right way. + +Modern server environments may have >200 cores (400+ vCPUs) and 10+ TB +or more RAM. In most prod environments you need at least 3 VMs +or k8s nodes for redundancy and multiple regions - but it is +perfectly possible to co-locate all micro-services on all +VMs. In K8S that would use DaemonSets. + +This avoids sending the data over the wire - but it still requires +serialization and going trough the TCP stack. + +The next step is to use pods with multiple containers and UDS +communication - it avoids the TCP stack, and UDS may send open +file descriptors which also allows passing shared memory areas. +But multiple containers on a pod impacts security boundaries. + +We could use a CNI interface to inject UDS sockets into each +pod and allow cross-pod UDS communication - preserving security +boundaries. + +A step further is injecting 'virtio' like interfaces allowing +shared memory and uring-style communication. UDS or similar +mechanisms can be used to detect and bootstrap this for containers, +and if strong isolation is desired real virtio between VMs on +same hosts can achieve similar 'zero copy'/shared memory communication. + +The next problem is that shared memory still requires different +languages to marshall/unmarshall - or use the shared memory +natively for the buffers that need to be exchanged. Flatbuffers and +similar structures make this possible - but I think we should +look closer to WASM new structure definition as well. + +While the new spec is intended for WASM to allow sharing data +between modules and host or between modules, and is a building +block for host-provided garbage collection - it is also a good +mechanism for shared memory communication between VMs on same +host or containers using shared memory. + +# Ideal design (IMHO) + +- uServices in same language and same security ( sharing a service +account, permissions, blast radius ) -> modular monolith +- different language, same security boundary -> containers on same pod, using +UDS or shared memory. +- different security boundary -> different Pods or VMs on same host, +using UDS/Virtio/shared memory + +A single host should be able to hold the entire stack and +work fully independently - for the most part. Databases and +lock services would still need to be sharded and span multiple +hosts - plus some replication, but no wire traffic or TCP/TLS between +hosts should be needed except for the shared stateful data. + +## Ambient + +Istio is used to provide secure communication between apps, control +routing and provide basic telemetry. With ambient we are moving to +a per-node agent - ztunnel or built into CNI - which will encrypt +data between nodes but keep local traffic local. + +In a world where uServices are optimized to avoid marshalling and wire +traffic, ztunnel can handle communication using TCP avoiding +some of the overheads - while still applying network policy and +some routing. + +TODO: make sure 'node affinity' is correctly implemented... + +What happens if apps start using UDS or shared memory for the +same-node communication - and how can we help ? Istio CNI can +start injecting UDS sockets into each pod ( in the abstract domain) +allowing communication with ztunnel or a similar per-node agent. + +Ztunnel and CNI layer can act as a bus - applying policies and routing the calls, but +with a zero-copy semantics. Not clear if it can use a uRing interface or UDS +with shared file descriptros for memory or a combination, we need +to experiment with this. + +Assuming the shared memory follows WASM layout, it will also allow WASM +'pods' and modules to participate with zero copy semantics. + + + + diff --git a/docs/no-lb.md b/docs/no-lb.md new file mode 100644 index 0000000..948e3ce --- /dev/null +++ b/docs/no-lb.md @@ -0,0 +1,17 @@ +# Load balancing and traffic shifting + +UGate is NOT doing either. Use a K8S Gateway (envoy or anything else), no shortage of +good implementations. + +The goal is to provide connectivity: +1. Form endpoint to endpoint +2. From gateway to endpoints +3. From endpoint to gateway. + +For HTTP it does need the hostname for routing. + +It does include a HTTP service, can serve some http files - and might do minimal route +on path prefix. + +TODO: static config generator for envoy/nginx/caddy ? +TODO: test alongside gateways diff --git a/docs/others.md b/docs/others.md index de545a1..c860ab2 100644 --- a/docs/others.md +++ b/docs/others.md @@ -1,3 +1,8 @@ +# Other similar solutions + +https://github.com/anderspitman/awesome-tunneling + + # MASQUE and QUIC @@ -143,3 +148,66 @@ uses unsafe for string/slice - for websocket - nb tls + +# FRP + +- golang +- v0 - +- v1 - over complex, envoy/istio like + +Deps: +- socks5 (armon), oidc, beego, kcp-go +- gorilla ws and mux +- pion/stun +- k8s +- quic +- https://github.com/pires/go-proxyproto - ha proxy + +# Boringproxy + +- ssh +- golang + +# pyjam.as + +https://tunnel.pyjam.as/ +- requires wg-quic + +- wireguard based +- caddy on server side, UDP to the host +- uses 'caddy load' API to dynamically add a route to the local caddy +- single host (good for self-hosting, moderately small VPCs - not high QPS) +- interesting example to automate wg + +# Chisel + +- https://github.com/jpillora/chisel +- ssh over ws + +# Bore + +- rust +- not HTTP proxy - just TCP ports +- may be used with a HTTP proxy like caddy or envoy (with dynamic API) +- control port and ACCEPT +- single host + +# Rathole + +- support TLS, TCP and Noise with keypairs (like wireguard) +- uses control channel +- single host +- faster than frp +- "Use ngix for http forwarding, with rathole as upstream" + +# zrok + +- based on openziti +- net foundry FE or self-hosted +- Openziti: + - tunnels for multiple platforms (incl android) + - mTLS and JWT and other authn + - no L7 AFAIK + - Dial and Bind policy - who can provide or use a service +- libsodium based - wasm included, ed25519 +- java, c, .net, swift diff --git a/docs/passenger.md b/docs/passenger.md new file mode 100644 index 0000000..237bda9 --- /dev/null +++ b/docs/passenger.md @@ -0,0 +1,18 @@ +# Passenger vs proxy sidecar + +The term 'passenger' is based on ssh PROTOCOL.mux. I suspect many other words are used +in the industry given the NIH traditions. + +A pod-per-node, container-per-pod or process proxy will use a UDS to pass open +file descriptors, including memory mapped, to the sidecar. + +Wayland is a particular example - and makes the ideal protocol so we can reuse the +VM virtio work driven by ChromeOS. SSH is another broadly used protocol for passengers. + +## mTLS SSH passenger + +The SSH mux protocol defines a unix domain socket that will be used by ssh clients. +The server is typically a ssh in multiplex mode - but it can be anything, including +a ztunnel using mTLS and mesh protocols. + +If the mux is set as a jump host - only one UDS is needed. diff --git a/docs/perf.md b/docs/perf.md index e846ed8..73c67f1 100644 --- a/docs/perf.md +++ b/docs/perf.md @@ -5,6 +5,11 @@ sysctl -w net.core.rmem_max=10000000 ip link set lo mtu 9000 +# Getting flame + +docker run uber/go-torch -u http://192.168.3.16:15400/debug/pprof -p -t=30 > torch.svg +docker run uber/go-torch -u http://192.168.3.16:15200/debug/pprof -p -t=30 > torchbob.svg + # Links https://blog.cloudflare.com/how-to-receive-a-million-packets/ @@ -63,7 +68,7 @@ TCP also has offloading and other optimizations. pprof & iperf3 -c localhost -p 15201 go tool pprof pprof http://127.0.0.1:15400/debug/pprof/heap -pprof -http=:8080 /home/costin/pprof/pprof.___3hbone.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz +pprof -http=:8080 /home/costin/pprof/pprof.___3ugate.alloc_objects.alloc_space.inuse_objects.inuse_space.005.pb.gz docker run uber/go-torch -u http://192.168.3.16:15400/debug/pprof -p -t=30 > torch.svg diff --git a/docs/sni_acl.md b/docs/sni_acl.md new file mode 100644 index 0000000..fa55761 --- /dev/null +++ b/docs/sni_acl.md @@ -0,0 +1,17 @@ +# SNI routing + +SNI routing has access only to the destintion address - there is no authenticated info about the caller. + +That means: + +- should be restricted with NetworkPolicies and similar firewall rules + - only allow-listed workloads can connect to the SNI router + - SNI router should be restricted to only specific workloads as destinations +- source info is lost, NetworkPolicies based on IP or labels can't be used on the destination. + - however if TLS+auth is used - identity-policies work. +- ideally only exposed/used on local host (for egress) or specific, rare cases on ingress +- avoid exposing on a public address, except for explicitly configured addresses where mTLS all the way to the destination workload is required. This is what (original) Istio multi-network does. + +A better option is to tunnel mTLS over H2, where the caller can be authenticated and authorized, and additional metadata is available. + +SNI routing is intended for 'legacy' applications and compatibility with the current multi-network Istio infrastructure, while HBONE/MASQUE/etc are developed and adopted. diff --git a/cmd/wp/README.md b/docs/webpush_send.md similarity index 100% rename from cmd/wp/README.md rename to docs/webpush_send.md diff --git a/envoy/README.md b/envoy/README.md new file mode 100644 index 0000000..bb3a662 --- /dev/null +++ b/envoy/README.md @@ -0,0 +1,29 @@ +# Envoy tests + +Assume an agent is running, /etc/certs is updated. Using HBone protocol in envoy. +All tests expect an iperf3 server running on localhost. The test env will open a number of ports +that all forward to iperf3 with different configs and paths. + +## Ports: + +Envoy client: non inbound hbone, to keep config simple +- admin: 13000 +- + + +Envoy server: no outbound hbone, to keep config simple. +- admin: 14000 +- hbone: 14008 +- inner_mtls: 14006 - accepts mTLS, forwards to iperf3 + +Envoy Gateway/PEP: (TODO) +- admin: 12000 +- hbone: 12008 + + +## Dynamic file configs + +dynamic_resources: +lds_config: +resource_api_version: V3 +path: /tmp/... diff --git a/envoy/client-envoy.yaml b/envoy/client-envoy.yaml new file mode 100644 index 0000000..07cc1eb --- /dev/null +++ b/envoy/client-envoy.yaml @@ -0,0 +1,408 @@ +bootstrap_extensions: + - name: envoy.bootstrap.internal_listener + typed_config: + "@type": type.googleapis.com/envoy.extensions.bootstrap.internal_listener.v3.InternalListener +admin: + access_log: + - name: envoy.access_loggers.file + typed_config: + '@type': type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog + path: /dev/stderr + address: + socket_address: + address: 127.0.0.1 + port_value: 13000 + profile_path: /var/lib/istio/data/cenvoy.prof + +# Same as Istio, from bootstrap +layered_runtime: + layers: + - name: global config + static_layer: + envoy.deprecated_features:envoy.config.listener.v3.Listener.hidden_envoy_deprecated_use_original_dst: "true" + envoy.reloadable_features.http_reject_path_with_fragment: "false" + envoy.reloadable_features.internal_address: "true" + envoy.reloadable_features.no_extension_lookup_by_name: "false" + envoy.reloadable_features.require_strict_1xx_and_204_response_headers: "false" + overload.global_downstream_max_connections: "2147483647" + re2.max_program_size.error_level: "32768" + - admin_layer: {} + name: admin + +static_resources: + listeners: + # listener_1: TCP -> inner_cluster_1 -> TLS -> inner_tunnel -> HBone -> cluster_1 + - name: iperf3tun.test.svc:5201 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 13031 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: inner_iperf3tun.test.svc:5201 + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + - name: internal_iperf3tun.test.svc:5201 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 13032 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: iperfmtls.test.svc + tunneling_config: + hostname: iperfmtls.test.svc + use_post: true + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + - name: local:18080 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 18080 + filter_chains: + - filters: + - name: envoy.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: local:18080 + #generate_request_id: false + codec_type: AUTO + route_config: + name: local:18080 + virtual_hosts: + - name: local:18080 + domains: "*" + request_headers_to_add: + - append_action: OVERWRITE_IF_EXISTS_OR_ADD + header: + key: x-addr + value: fortio-istio-auth-auth-icq63pqnqq-uc.a.run.app + + routes: + - match: + prefix: "/" + route: + auto_host_rewrite: true + cluster: cr.test.svc + timeout: 300s + http_filters: + + - name: envoy.filters.http.gcp_authn + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.GcpAuthnFilterConfig + http_uri: + uri: "http://127.0.0.1:15007/computeMetadata/v1/instance/service-accounts/default/identity?audience=[AUDIENCE]" + timeout: 1s + cluster: mds +# - name: envoy.filters.http.ext_authz +# typed_config: +# "@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz +# http_service: +# server_uri: +# uri: http://test-auth.dev +# cluster: "ext_authz_http_service" +# timeout: 10s +# authorization_response: +# allowed_upstream_headers: +# patterns: +# - exact: authorization + - name: envoy.filters.http.router + + # listener_1: TCP -> inner_cluster_1 -> TLS -> inner_tunnel -> HBone -> cluster_1 + - name: iperf3tunint.test.svc:5201 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 13036 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: inner_iperf3tunint.test.svc:5201 + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + - name: internal_iperf3tunint.test.svc:5201 + internal_listener: {} + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: iperfmtls.test.svc + tunneling_config: + hostname: iperfmtls.test.svc + use_post: true + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + # 13033 -> Envoy -- HBONE -> Server -> Iperf3 + - name: iperf3.test.svc:5201 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 13033 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: server_hbone + tunneling_config: + headers_to_add: + - header: + key: x-envoy-original-dst-host + value: '%DYNAMIC_METADATA(["tunnel", "detunnel_address"])%' + hostname: '%DYNAMIC_METADATA(tunnel:detunnel_address)%' + #hostname: iperf.test.svc + use_post: true + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + # 13035 -> Envoy -- HBONEC -> Server -> Iperf3 + - name: iperf3c.test.svc:5201 + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 13035 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: server_hbonec + tunneling_config: + hostname: iperfc.test.svc + use_post: true + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + + + clusters: + # cluster_0 proxies a raw TCP stream into a mTLS TCP stream to internal_tunnel. + - name: inner_iperf3tun.test.svc:5201 + connect_timeout: 5s + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: cluster_0 + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 13032 + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + + - name: inner_iperf3tunint.test.svc:5201 + connect_timeout: 5s + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: inner_iperf3tunint.test.svc:5201 + endpoints: + - lb_endpoints: + - endpoint: + address: + envoy_internal_address: + server_listener_name: internal_iperf3tunint.test.svc:5201 + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + # cluster_1 proxies HTTP stream with a TCP or TLS HTTP/2 stream to Cloud Run. + - name: iperfmtls.test.svc + connect_timeout: 5s + type: LOGICAL_DNS + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: iperfmtls.test.svc + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 14009 + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + sni: iperftls.test.svc + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + # HBone - inner plain text + - name: server_hbone + connect_timeout: 5s + type: LOGICAL_DNS + dns_lookup_family: V4_ONLY + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: cluster_2 + endpoints: + - locality: + region: us-central1 + zone: us-central1-c + #sub_zone + lb_endpoints: + - endpoint: + #hostname: "" + address: + socket_address: + address: 127.0.0.1 + port_value: 14009 + metadata: + filter_metadata: + istio: {"workload":"echo-local;testns;;;clustername"} +# envoy.transport_socket_match: +# tlsMode: istio + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + sni: iperf.test.svc + common_tls_context: + 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 + match_typed_subject_alt_names: + - san_type: URI + matcher: + prefix: "spiffe://cluster.local/ns/test" +# + - name: cr.test.svc + connect_timeout: 5s + type: LOGICAL_DNS + metadata: + typed_filter_metadata: + envoy.filters.http.gcp_authn: + "@type": type.googleapis.com/envoy.extensions.filters.http.gcp_authn.v3.Audience + url: https://fortio-istio-auth-auth-icq63pqnqq-uc.a.run.app + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: { } + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext + load_assignment: + cluster_name: cr.test.svc + endpoints: + - lb_endpoints: + - endpoint: + hostname: fortio-istio-auth-auth-icq63pqnqq-uc.a.run.app + address: + socket_address: + address: fortio-istio-auth-auth-icq63pqnqq-uc.a.run.app + port_value: 443 + + - name: server_hbonec + connect_timeout: 5s + type: LOGICAL_DNS + dns_lookup_family: V4_ONLY + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: server_hbonec + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 14008 + + # MDS cluster for gcp_authn + - name: mds + connect_timeout: 5s + type: LOGICAL_DNS + dns_lookup_family: V4_ONLY + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: {} + load_assignment: + cluster_name: mds + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 15409 + diff --git a/envoy/server-envoy.yaml b/envoy/server-envoy.yaml new file mode 100644 index 0000000..6b7edc3 --- /dev/null +++ b/envoy/server-envoy.yaml @@ -0,0 +1,301 @@ +bootstrap_extensions: + - name: envoy.bootstrap.internal_listener + typed_config: + "@type": type.googleapis.com/envoy.extensions.bootstrap.internal_listener.v3.InternalListener +admin: + access_log: + - name: envoy.access_loggers.file + typed_config: + '@type': type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog + path: /dev/stderr + address: + socket_address: + address: 127.0.0.1 + port_value: 14000 + profile_path: /var/lib/istio/data/senvoy.prof + +# Same as Istio, from bootstrap +layered_runtime: + layers: + - name: global config + static_layer: + envoy.deprecated_features:envoy.config.listener.v3.Listener.hidden_envoy_deprecated_use_original_dst: "true" + envoy.reloadable_features.http_reject_path_with_fragment: "false" + envoy.reloadable_features.internal_address: "true" + envoy.reloadable_features.no_extension_lookup_by_name: "false" + envoy.reloadable_features.require_strict_1xx_and_204_response_headers: "false" + overload.global_downstream_max_connections: "2147483647" + re2.max_program_size.error_level: "32768" + - admin_layer: {} + name: admin + +static_resources: + listeners: + # hbone is the mTLS terminating H2, tunnels connections to local ports. + - name: hbone + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 14009 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + route_config: + name: local_route + virtual_hosts: + - name: mtls_tun + domains: + - "iperfmtls.test.svc" + routes: + - match: + prefix: "/" + headers: + - name: ":method" + exact_match: "POST" + route: + cluster: internal_iperf3 + upgrade_configs: + - upgrade_type: CONNECT + connect_config: + allow_post: true + - name: local_service + domains: + - "*" + routes: + - match: + prefix: "/" + headers: + - name: ":method" + exact_match: "POST" + route: + cluster: local_iperf3 + upgrade_configs: + - upgrade_type: CONNECT + connect_config: + allow_post: true + http_filters: + - name: envoy.filters.http.router + http2_protocol_options: + allow_connect: true + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + # hbonetun is an untrusted gateways - terminates H2-CONNECT/POST, and forwards the inner mTLS + # to a destination - can be remote or internal. + - name: hbonetun + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 14443 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_hbonetun + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + route_config: + name: hbonetun + virtual_hosts: + - name: local_service + domains: + - "*" + routes: + - match: + prefix: "/" + headers: + - name: ":method" + exact_match: "POST" + route: + cluster: local_iperf3 + upgrade_configs: + - upgrade_type: CONNECT + connect_config: + allow_post: true + http_filters: + - name: envoy.filters.http.router + http2_protocol_options: + allow_connect: true + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + - name: hbonec + address: + socket_address: + protocol: TCP + address: 0.0.0.0 + port_value: 14008 + filter_chains: + - filters: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: + - "*" + routes: + - match: + prefix: "/" + headers: + - name: ":method" + exact_match: "POST" + route: + cluster: local_iperf3 + upgrade_configs: + - upgrade_type: CONNECT + connect_config: + allow_post: true + http_filters: + - name: envoy.filters.http.router + http2_protocol_options: + allow_connect: true + + # listener_2 decrypts the mTLS TCP stream into a raw TCP stream. + - name: inner_mtls + address: + socket_address: + protocol: TCP + address: 127.0.0.1 + port_value: 14006 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: local_iperf3 + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + # Baseline: 14034 -> Envoy -> iperf3 (all local), single hop, no TLS + - name: local_iperf3 + address: + socket_address: + protocol: TCP + address: 127.0.0.1 + port_value: 14034 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: local_iperf3 + access_log: + - name: envoy.file_access_log + typed_config: + "@type": type.googleapis.com/envoy.extensions.access_loggers.stream.v3.StderrAccessLog + + # Baseline: 14035 -- TLS -> iperf3 + - name: local_iperf3_tls + address: + socket_address: + protocol: TCP + address: 127.0.0.1 + port_value: 14035 + filter_chains: + - filters: + - name: tcp + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: tcp_stats + cluster: local_iperf3 + transport_socket: + name: envoy.transport_sockets.tls + typed_config: + "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext + common_tls_context: + tls_certificates: + certificate_chain: { "filename": "/etc/certs/cert-chain.pem" } + private_key: { "filename": "/etc/certs/key.pem" } + + clusters: + # cluster_1 proxies the mTLS TCP stream to listener_2. + - name: inner_hbone + connect_timeout: 2s + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: + allow_connect: true + load_assignment: + cluster_name: inner_hbone + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 14006 + + # HBone decrypts the first layer of TLS ( equivalent with a GFE ). Inner stream is an mTLS + # connection. + - name: internal_iperf3 + connect_timeout: 2s + typed_extension_protocol_options: + envoy.extensions.upstreams.http.v3.HttpProtocolOptions: + "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions + explicit_http_config: + http2_protocol_options: + allow_connect: true + load_assignment: + cluster_name: internal_iperf3 + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 14035 + + # One hop, just Envoy TCP + - name: local_iperf3 + connect_timeout: 2s + load_assignment: + cluster_name: local_iperf3 + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: 127.0.0.1 + port_value: 5201 diff --git a/gen/proto/envoy/service/discovery/v3/xds.pb.go b/gen/proto/envoy/service/discovery/v3/xds.pb.go deleted file mode 100644 index a317016..0000000 --- a/gen/proto/envoy/service/discovery/v3/xds.pb.go +++ /dev/null @@ -1,85 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: envoy/service/discovery/v3/xds.proto - -// GRPC package - part of the URL. Service is added. -// URL: /PACKAGE.SERVICE/METHOD - -package discovery - -import ( - xds "github.com/costinm/grpc-mesh/gen/proto/go/xds" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_envoy_service_discovery_v3_xds_proto protoreflect.FileDescriptor - -var file_envoy_service_discovery_v3_xds_proto_rawDesc = []byte{ - 0x0a, 0x24, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, - 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2f, 0x76, 0x33, 0x2f, 0x78, 0x64, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1a, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x2e, - 0x76, 0x33, 0x1a, 0x1a, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x6e, - 0x0a, 0x1a, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x50, 0x0a, 0x19, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x3d, - 0x5a, 0x3b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x2f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_envoy_service_discovery_v3_xds_proto_goTypes = []interface{}{ - (*xds.DiscoveryRequest)(nil), // 0: xds.DiscoveryRequest - (*xds.DiscoveryResponse)(nil), // 1: xds.DiscoveryResponse -} -var file_envoy_service_discovery_v3_xds_proto_depIdxs = []int32{ - 0, // 0: envoy.service.discovery.v3.AggregatedDiscoveryService.StreamAggregatedResources:input_type -> xds.DiscoveryRequest - 1, // 1: envoy.service.discovery.v3.AggregatedDiscoveryService.StreamAggregatedResources:output_type -> xds.DiscoveryResponse - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_envoy_service_discovery_v3_xds_proto_init() } -func file_envoy_service_discovery_v3_xds_proto_init() { - if File_envoy_service_discovery_v3_xds_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_envoy_service_discovery_v3_xds_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_envoy_service_discovery_v3_xds_proto_goTypes, - DependencyIndexes: file_envoy_service_discovery_v3_xds_proto_depIdxs, - }.Build() - File_envoy_service_discovery_v3_xds_proto = out.File - file_envoy_service_discovery_v3_xds_proto_rawDesc = nil - file_envoy_service_discovery_v3_xds_proto_goTypes = nil - file_envoy_service_discovery_v3_xds_proto_depIdxs = nil -} diff --git a/gen/proto/fgrpc/ping.pb.go b/gen/proto/fgrpc/ping.pb.go deleted file mode 100644 index efe2a5b..0000000 --- a/gen/proto/fgrpc/ping.pb.go +++ /dev/null @@ -1,181 +0,0 @@ -// regenerate the .pb.go file after any change using -// protoc ping.proto --go_out=plugins=grpc:. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: fgrpc/ping.proto - -package fgrpc - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PingMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Seq int64 `protobuf:"varint,1,opt,name=seq,proto3" json:"seq,omitempty"` // sequence number - Ts int64 `protobuf:"varint,2,opt,name=ts,proto3" json:"ts,omitempty"` // src send ts / dest receive ts - Payload string `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` // extra packet data - DelayNanos int64 `protobuf:"varint,4,opt,name=delayNanos,proto3" json:"delayNanos,omitempty"` // delay the response by x nanoseconds -} - -func (x *PingMessage) Reset() { - *x = PingMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_fgrpc_ping_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PingMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PingMessage) ProtoMessage() {} - -func (x *PingMessage) ProtoReflect() protoreflect.Message { - mi := &file_fgrpc_ping_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PingMessage.ProtoReflect.Descriptor instead. -func (*PingMessage) Descriptor() ([]byte, []int) { - return file_fgrpc_ping_proto_rawDescGZIP(), []int{0} -} - -func (x *PingMessage) GetSeq() int64 { - if x != nil { - return x.Seq - } - return 0 -} - -func (x *PingMessage) GetTs() int64 { - if x != nil { - return x.Ts - } - return 0 -} - -func (x *PingMessage) GetPayload() string { - if x != nil { - return x.Payload - } - return "" -} - -func (x *PingMessage) GetDelayNanos() int64 { - if x != nil { - return x.DelayNanos - } - return 0 -} - -var File_fgrpc_ping_proto protoreflect.FileDescriptor - -var file_fgrpc_ping_proto_rawDesc = []byte{ - 0x0a, 0x10, 0x66, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x05, 0x66, 0x67, 0x72, 0x70, 0x63, 0x22, 0x69, 0x0a, 0x0b, 0x50, 0x69, 0x6e, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x71, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x73, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6e, - 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x4e, - 0x61, 0x6e, 0x6f, 0x73, 0x32, 0x3e, 0x0a, 0x0a, 0x50, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x12, 0x30, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x2e, 0x66, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x12, - 0x2e, 0x66, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x00, 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x75, 0x67, 0x61, 0x74, 0x65, - 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x66, 0x67, 0x72, 0x70, 0x63, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_fgrpc_ping_proto_rawDescOnce sync.Once - file_fgrpc_ping_proto_rawDescData = file_fgrpc_ping_proto_rawDesc -) - -func file_fgrpc_ping_proto_rawDescGZIP() []byte { - file_fgrpc_ping_proto_rawDescOnce.Do(func() { - file_fgrpc_ping_proto_rawDescData = protoimpl.X.CompressGZIP(file_fgrpc_ping_proto_rawDescData) - }) - return file_fgrpc_ping_proto_rawDescData -} - -var file_fgrpc_ping_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_fgrpc_ping_proto_goTypes = []interface{}{ - (*PingMessage)(nil), // 0: fgrpc.PingMessage -} -var file_fgrpc_ping_proto_depIdxs = []int32{ - 0, // 0: fgrpc.PingServer.Ping:input_type -> fgrpc.PingMessage - 0, // 1: fgrpc.PingServer.Ping:output_type -> fgrpc.PingMessage - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_fgrpc_ping_proto_init() } -func file_fgrpc_ping_proto_init() { - if File_fgrpc_ping_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_fgrpc_ping_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PingMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_fgrpc_ping_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_fgrpc_ping_proto_goTypes, - DependencyIndexes: file_fgrpc_ping_proto_depIdxs, - MessageInfos: file_fgrpc_ping_proto_msgTypes, - }.Build() - File_fgrpc_ping_proto = out.File - file_fgrpc_ping_proto_rawDesc = nil - file_fgrpc_ping_proto_goTypes = nil - file_fgrpc_ping_proto_depIdxs = nil -} diff --git a/gen/proto/go.mod b/gen/proto/go.mod deleted file mode 100644 index acd8f53..0000000 --- a/gen/proto/go.mod +++ /dev/null @@ -1,16 +0,0 @@ -module github.com/costinm/ugate/gen/proto - -go 1.17 - -require ( - google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf - google.golang.org/protobuf v1.28.0 - istio.io/api v0.0.0-20220406030326-b7da7525a6be -) - -require ( - github.com/golang/protobuf v1.5.2 // indirect - golang.org/x/net v0.0.0-20210825183410-e898025ed96a // indirect - golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e // indirect - golang.org/x/text v0.3.7 // indirect -) diff --git a/gen/proto/go.sum b/gen/proto/go.sum deleted file mode 100644 index 64254b6..0000000 --- a/gen/proto/go.sum +++ /dev/null @@ -1,258 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw= -golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e h1:XMgFehsDnnLGtjvjOfqWSUzt0alpTR1RSEuznObga2c= -golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf h1:JTjwKJX9erVpsw17w+OIPP7iAgEkN/r8urhWSunEDTs= -google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -istio.io/api v0.0.0-20220406030326-b7da7525a6be h1:4pk/0+mX0wsLzfAFGivh0bg5KhhnkclzywfeFdvDPKA= -istio.io/api v0.0.0-20220406030326-b7da7525a6be/go.mod h1:qGm6l1okCpLqVKyXSfYjB+UXXgpE/LCggALuK25cSFY= -k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/gen/proto/google/api/annotations.pb.go b/gen/proto/google/api/annotations.pb.go deleted file mode 100644 index 4fda2f5..0000000 --- a/gen/proto/google/api/annotations.pb.go +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/api/annotations.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var file_google_api_annotations_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*HttpRule)(nil), - Field: 72295728, - Name: "google.api.http", - Tag: "bytes,72295728,opt,name=http", - Filename: "google/api/annotations.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // See `HttpRule`. - // - // optional google.api.HttpRule http = 72295728; - E_Http = &file_google_api_annotations_proto_extTypes[0] -) - -var File_google_api_annotations_proto protoreflect.FileDescriptor - -var file_google_api_annotations_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x15, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x3a, 0x4b, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x12, 0x1e, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xb0, 0xca, 0xbc, 0x22, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, - 0x42, 0x6e, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, - 0x70, 0x69, 0x42, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_google_api_annotations_proto_goTypes = []interface{}{ - (*descriptorpb.MethodOptions)(nil), // 0: google.protobuf.MethodOptions - (*HttpRule)(nil), // 1: google.api.HttpRule -} -var file_google_api_annotations_proto_depIdxs = []int32{ - 0, // 0: google.api.http:extendee -> google.protobuf.MethodOptions - 1, // 1: google.api.http:type_name -> google.api.HttpRule - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 1, // [1:2] is the sub-list for extension type_name - 0, // [0:1] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_api_annotations_proto_init() } -func file_google_api_annotations_proto_init() { - if File_google_api_annotations_proto != nil { - return - } - file_google_api_http_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_annotations_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 1, - NumServices: 0, - }, - GoTypes: file_google_api_annotations_proto_goTypes, - DependencyIndexes: file_google_api_annotations_proto_depIdxs, - ExtensionInfos: file_google_api_annotations_proto_extTypes, - }.Build() - File_google_api_annotations_proto = out.File - file_google_api_annotations_proto_rawDesc = nil - file_google_api_annotations_proto_goTypes = nil - file_google_api_annotations_proto_depIdxs = nil -} diff --git a/gen/proto/google/api/client.pb.go b/gen/proto/google/api/client.pb.go deleted file mode 100644 index c6ab0e9..0000000 --- a/gen/proto/google/api/client.pb.go +++ /dev/null @@ -1,213 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/api/client.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var file_google_api_client_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: ([]string)(nil), - Field: 1051, - Name: "google.api.method_signature", - Tag: "bytes,1051,rep,name=method_signature", - Filename: "google/api/client.proto", - }, - { - ExtendedType: (*descriptorpb.ServiceOptions)(nil), - ExtensionType: (*string)(nil), - Field: 1049, - Name: "google.api.default_host", - Tag: "bytes,1049,opt,name=default_host", - Filename: "google/api/client.proto", - }, - { - ExtendedType: (*descriptorpb.ServiceOptions)(nil), - ExtensionType: (*string)(nil), - Field: 1050, - Name: "google.api.oauth_scopes", - Tag: "bytes,1050,opt,name=oauth_scopes", - Filename: "google/api/client.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // A definition of a client library method signature. - // - // In client libraries, each proto RPC corresponds to one or more methods - // which the end user is able to call, and calls the underlying RPC. - // Normally, this method receives a single argument (a struct or instance - // corresponding to the RPC request object). Defining this field will - // add one or more overloads providing flattened or simpler method signatures - // in some languages. - // - // The fields on the method signature are provided as a comma-separated - // string. - // - // For example, the proto RPC and annotation: - // - // rpc CreateSubscription(CreateSubscriptionRequest) - // returns (Subscription) { - // option (google.api.method_signature) = "name,topic"; - // } - // - // Would add the following Java overload (in addition to the method accepting - // the request object): - // - // public final Subscription createSubscription(String name, String topic) - // - // The following backwards-compatibility guidelines apply: - // - // * Adding this annotation to an unannotated method is backwards - // compatible. - // * Adding this annotation to a method which already has existing - // method signature annotations is backwards compatible if and only if - // the new method signature annotation is last in the sequence. - // * Modifying or removing an existing method signature annotation is - // a breaking change. - // * Re-ordering existing method signature annotations is a breaking - // change. - // - // repeated string method_signature = 1051; - E_MethodSignature = &file_google_api_client_proto_extTypes[0] -) - -// Extension fields to descriptorpb.ServiceOptions. -var ( - // The hostname for this service. - // This should be specified with no prefix or protocol. - // - // Example: - // - // service Foo { - // option (google.api.default_host) = "foo.googleapi.com"; - // ... - // } - // - // optional string default_host = 1049; - E_DefaultHost = &file_google_api_client_proto_extTypes[1] - // OAuth scopes needed for the client. - // - // Example: - // - // service Foo { - // option (google.api.oauth_scopes) = \ - // "https://www.googleapis.com/auth/cloud-platform"; - // ... - // } - // - // If there is more than one scope, use a comma-separated string: - // - // Example: - // - // service Foo { - // option (google.api.oauth_scopes) = \ - // "https://www.googleapis.com/auth/cloud-platform," - // "https://www.googleapis.com/auth/monitoring"; - // ... - // } - // - // optional string oauth_scopes = 1050; - E_OauthScopes = &file_google_api_client_proto_extTypes[2] -) - -var File_google_api_client_proto protoreflect.FileDescriptor - -var file_google_api_client_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, - 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x42, 0x69, 0x0a, - 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, - 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_google_api_client_proto_goTypes = []interface{}{ - (*descriptorpb.MethodOptions)(nil), // 0: google.protobuf.MethodOptions - (*descriptorpb.ServiceOptions)(nil), // 1: google.protobuf.ServiceOptions -} -var file_google_api_client_proto_depIdxs = []int32{ - 0, // 0: google.api.method_signature:extendee -> google.protobuf.MethodOptions - 1, // 1: google.api.default_host:extendee -> google.protobuf.ServiceOptions - 1, // 2: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 0, // [0:3] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_api_client_proto_init() } -func file_google_api_client_proto_init() { - if File_google_api_client_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_client_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 3, - NumServices: 0, - }, - GoTypes: file_google_api_client_proto_goTypes, - DependencyIndexes: file_google_api_client_proto_depIdxs, - ExtensionInfos: file_google_api_client_proto_extTypes, - }.Build() - File_google_api_client_proto = out.File - file_google_api_client_proto_rawDesc = nil - file_google_api_client_proto_goTypes = nil - file_google_api_client_proto_depIdxs = nil -} diff --git a/gen/proto/google/api/field_behavior.pb.go b/gen/proto/google/api/field_behavior.pb.go deleted file mode 100644 index 302b88d..0000000 --- a/gen/proto/google/api/field_behavior.pb.go +++ /dev/null @@ -1,249 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/api/field_behavior.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// An indicator of the behavior of a given field (for example, that a field -// is required in requests, or given as output but ignored as input). -// This **does not** change the behavior in protocol buffers itself; it only -// denotes the behavior and may affect how API tooling handles the field. -// -// Note: This enum **may** receive new values in the future. -type FieldBehavior int32 - -const ( - // Conventional default for enums. Do not use this. - FieldBehavior_FIELD_BEHAVIOR_UNSPECIFIED FieldBehavior = 0 - // Specifically denotes a field as optional. - // While all fields in protocol buffers are optional, this may be specified - // for emphasis if appropriate. - FieldBehavior_OPTIONAL FieldBehavior = 1 - // Denotes a field as required. - // This indicates that the field **must** be provided as part of the request, - // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). - FieldBehavior_REQUIRED FieldBehavior = 2 - // Denotes a field as output only. - // This indicates that the field is provided in responses, but including the - // field in a request does nothing (the server *must* ignore it and - // *must not* throw an error as a result of the field's presence). - FieldBehavior_OUTPUT_ONLY FieldBehavior = 3 - // Denotes a field as input only. - // This indicates that the field is provided in requests, and the - // corresponding field is not included in output. - FieldBehavior_INPUT_ONLY FieldBehavior = 4 - // Denotes a field as immutable. - // This indicates that the field may be set once in a request to create a - // resource, but may not be changed thereafter. - FieldBehavior_IMMUTABLE FieldBehavior = 5 - // Denotes that a (repeated) field is an unordered list. - // This indicates that the service may provide the elements of the list - // in any arbitrary order, rather than the order the user originally - // provided. Additionally, the list's order may or may not be stable. - FieldBehavior_UNORDERED_LIST FieldBehavior = 6 - // Denotes that this field returns a non-empty default value if not set. - // This indicates that if the user provides the empty value in a request, - // a non-empty value will be returned. The user will not be aware of what - // non-empty value to expect. - FieldBehavior_NON_EMPTY_DEFAULT FieldBehavior = 7 -) - -// Enum value maps for FieldBehavior. -var ( - FieldBehavior_name = map[int32]string{ - 0: "FIELD_BEHAVIOR_UNSPECIFIED", - 1: "OPTIONAL", - 2: "REQUIRED", - 3: "OUTPUT_ONLY", - 4: "INPUT_ONLY", - 5: "IMMUTABLE", - 6: "UNORDERED_LIST", - 7: "NON_EMPTY_DEFAULT", - } - FieldBehavior_value = map[string]int32{ - "FIELD_BEHAVIOR_UNSPECIFIED": 0, - "OPTIONAL": 1, - "REQUIRED": 2, - "OUTPUT_ONLY": 3, - "INPUT_ONLY": 4, - "IMMUTABLE": 5, - "UNORDERED_LIST": 6, - "NON_EMPTY_DEFAULT": 7, - } -) - -func (x FieldBehavior) Enum() *FieldBehavior { - p := new(FieldBehavior) - *p = x - return p -} - -func (x FieldBehavior) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (FieldBehavior) Descriptor() protoreflect.EnumDescriptor { - return file_google_api_field_behavior_proto_enumTypes[0].Descriptor() -} - -func (FieldBehavior) Type() protoreflect.EnumType { - return &file_google_api_field_behavior_proto_enumTypes[0] -} - -func (x FieldBehavior) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use FieldBehavior.Descriptor instead. -func (FieldBehavior) EnumDescriptor() ([]byte, []int) { - return file_google_api_field_behavior_proto_rawDescGZIP(), []int{0} -} - -var file_google_api_field_behavior_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.FieldOptions)(nil), - ExtensionType: ([]FieldBehavior)(nil), - Field: 1052, - Name: "google.api.field_behavior", - Tag: "varint,1052,rep,name=field_behavior,enum=google.api.FieldBehavior", - Filename: "google/api/field_behavior.proto", - }, -} - -// Extension fields to descriptorpb.FieldOptions. -var ( - // A designation of a specific field behavior (required, output only, etc.) - // in protobuf messages. - // - // Examples: - // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; - // - // repeated google.api.FieldBehavior field_behavior = 1052; - E_FieldBehavior = &file_google_api_field_behavior_proto_extTypes[0] -) - -var File_google_api_field_behavior_proto protoreflect.FileDescriptor - -var file_google_api_field_behavior_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x20, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2a, - 0xa6, 0x01, 0x0a, 0x0d, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x12, 0x1e, 0x0a, 0x1a, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x42, 0x45, 0x48, 0x41, 0x56, - 0x49, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, - 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0f, 0x0a, - 0x0b, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x0e, - 0x0a, 0x0a, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x04, 0x12, 0x0d, - 0x0a, 0x09, 0x49, 0x4d, 0x4d, 0x55, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x12, 0x0a, - 0x0e, 0x55, 0x4e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, - 0x06, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4f, 0x4e, 0x5f, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x44, - 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x07, 0x3a, 0x60, 0x0a, 0x0e, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9c, 0x08, 0x20, 0x03, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x0d, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x42, 0x70, 0x0a, 0x0e, 0x63, 0x6f, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x12, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, - 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_api_field_behavior_proto_rawDescOnce sync.Once - file_google_api_field_behavior_proto_rawDescData = file_google_api_field_behavior_proto_rawDesc -) - -func file_google_api_field_behavior_proto_rawDescGZIP() []byte { - file_google_api_field_behavior_proto_rawDescOnce.Do(func() { - file_google_api_field_behavior_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_field_behavior_proto_rawDescData) - }) - return file_google_api_field_behavior_proto_rawDescData -} - -var file_google_api_field_behavior_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_google_api_field_behavior_proto_goTypes = []interface{}{ - (FieldBehavior)(0), // 0: google.api.FieldBehavior - (*descriptorpb.FieldOptions)(nil), // 1: google.protobuf.FieldOptions -} -var file_google_api_field_behavior_proto_depIdxs = []int32{ - 1, // 0: google.api.field_behavior:extendee -> google.protobuf.FieldOptions - 0, // 1: google.api.field_behavior:type_name -> google.api.FieldBehavior - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 1, // [1:2] is the sub-list for extension type_name - 0, // [0:1] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_api_field_behavior_proto_init() } -func file_google_api_field_behavior_proto_init() { - if File_google_api_field_behavior_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_field_behavior_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 1, - NumServices: 0, - }, - GoTypes: file_google_api_field_behavior_proto_goTypes, - DependencyIndexes: file_google_api_field_behavior_proto_depIdxs, - EnumInfos: file_google_api_field_behavior_proto_enumTypes, - ExtensionInfos: file_google_api_field_behavior_proto_extTypes, - }.Build() - File_google_api_field_behavior_proto = out.File - file_google_api_field_behavior_proto_rawDesc = nil - file_google_api_field_behavior_proto_goTypes = nil - file_google_api_field_behavior_proto_depIdxs = nil -} diff --git a/gen/proto/google/api/http.pb.go b/gen/proto/google/api/http.pb.go deleted file mode 100644 index c1ec621..0000000 --- a/gen/proto/google/api/http.pb.go +++ /dev/null @@ -1,777 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/api/http.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -type Http struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - Rules []*HttpRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - FullyDecodeReservedExpansion bool `protobuf:"varint,2,opt,name=fully_decode_reserved_expansion,json=fullyDecodeReservedExpansion,proto3" json:"fully_decode_reserved_expansion,omitempty"` -} - -func (x *Http) Reset() { - *x = Http{} - if protoimpl.UnsafeEnabled { - mi := &file_google_api_http_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Http) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Http) ProtoMessage() {} - -func (x *Http) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Http.ProtoReflect.Descriptor instead. -func (*Http) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{0} -} - -func (x *Http) GetRules() []*HttpRule { - if x != nil { - return x.Rules - } - return nil -} - -func (x *Http) GetFullyDecodeReservedExpansion() bool { - if x != nil { - return x.FullyDecodeReservedExpansion - } - return false -} - -// # gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | -// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: -// "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: -// "123456")` -// -// ## Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all -// fields are passed via URL path and URL query parameters. -// -// ### Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// ## Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// Example: -// -// http: -// rules: -// # Selects a gRPC method and applies HttpRule to it. -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// ## Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -type HttpRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - Selector string `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - // - // Types that are assignable to Pattern: - // *HttpRule_Get - // *HttpRule_Put - // *HttpRule_Post - // *HttpRule_Delete - // *HttpRule_Patch - // *HttpRule_Custom - Pattern isHttpRule_Pattern `protobuf_oneof:"pattern"` - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - Body string `protobuf:"bytes,7,opt,name=body,proto3" json:"body,omitempty"` - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - ResponseBody string `protobuf:"bytes,12,opt,name=response_body,json=responseBody,proto3" json:"response_body,omitempty"` - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - AdditionalBindings []*HttpRule `protobuf:"bytes,11,rep,name=additional_bindings,json=additionalBindings,proto3" json:"additional_bindings,omitempty"` -} - -func (x *HttpRule) Reset() { - *x = HttpRule{} - if protoimpl.UnsafeEnabled { - mi := &file_google_api_http_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HttpRule) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HttpRule) ProtoMessage() {} - -func (x *HttpRule) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HttpRule.ProtoReflect.Descriptor instead. -func (*HttpRule) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{1} -} - -func (x *HttpRule) GetSelector() string { - if x != nil { - return x.Selector - } - return "" -} - -func (m *HttpRule) GetPattern() isHttpRule_Pattern { - if m != nil { - return m.Pattern - } - return nil -} - -func (x *HttpRule) GetGet() string { - if x, ok := x.GetPattern().(*HttpRule_Get); ok { - return x.Get - } - return "" -} - -func (x *HttpRule) GetPut() string { - if x, ok := x.GetPattern().(*HttpRule_Put); ok { - return x.Put - } - return "" -} - -func (x *HttpRule) GetPost() string { - if x, ok := x.GetPattern().(*HttpRule_Post); ok { - return x.Post - } - return "" -} - -func (x *HttpRule) GetDelete() string { - if x, ok := x.GetPattern().(*HttpRule_Delete); ok { - return x.Delete - } - return "" -} - -func (x *HttpRule) GetPatch() string { - if x, ok := x.GetPattern().(*HttpRule_Patch); ok { - return x.Patch - } - return "" -} - -func (x *HttpRule) GetCustom() *CustomHttpPattern { - if x, ok := x.GetPattern().(*HttpRule_Custom); ok { - return x.Custom - } - return nil -} - -func (x *HttpRule) GetBody() string { - if x != nil { - return x.Body - } - return "" -} - -func (x *HttpRule) GetResponseBody() string { - if x != nil { - return x.ResponseBody - } - return "" -} - -func (x *HttpRule) GetAdditionalBindings() []*HttpRule { - if x != nil { - return x.AdditionalBindings - } - return nil -} - -type isHttpRule_Pattern interface { - isHttpRule_Pattern() -} - -type HttpRule_Get struct { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - Get string `protobuf:"bytes,2,opt,name=get,proto3,oneof"` -} - -type HttpRule_Put struct { - // Maps to HTTP PUT. Used for replacing a resource. - Put string `protobuf:"bytes,3,opt,name=put,proto3,oneof"` -} - -type HttpRule_Post struct { - // Maps to HTTP POST. Used for creating a resource or performing an action. - Post string `protobuf:"bytes,4,opt,name=post,proto3,oneof"` -} - -type HttpRule_Delete struct { - // Maps to HTTP DELETE. Used for deleting a resource. - Delete string `protobuf:"bytes,5,opt,name=delete,proto3,oneof"` -} - -type HttpRule_Patch struct { - // Maps to HTTP PATCH. Used for updating a resource. - Patch string `protobuf:"bytes,6,opt,name=patch,proto3,oneof"` -} - -type HttpRule_Custom struct { - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - Custom *CustomHttpPattern `protobuf:"bytes,8,opt,name=custom,proto3,oneof"` -} - -func (*HttpRule_Get) isHttpRule_Pattern() {} - -func (*HttpRule_Put) isHttpRule_Pattern() {} - -func (*HttpRule_Post) isHttpRule_Pattern() {} - -func (*HttpRule_Delete) isHttpRule_Pattern() {} - -func (*HttpRule_Patch) isHttpRule_Pattern() {} - -func (*HttpRule_Custom) isHttpRule_Pattern() {} - -// A custom pattern is used for defining custom HTTP verb. -type CustomHttpPattern struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of this custom HTTP verb. - Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` - // The path matched by this custom verb. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` -} - -func (x *CustomHttpPattern) Reset() { - *x = CustomHttpPattern{} - if protoimpl.UnsafeEnabled { - mi := &file_google_api_http_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomHttpPattern) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomHttpPattern) ProtoMessage() {} - -func (x *CustomHttpPattern) ProtoReflect() protoreflect.Message { - mi := &file_google_api_http_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CustomHttpPattern.ProtoReflect.Descriptor instead. -func (*CustomHttpPattern) Descriptor() ([]byte, []int) { - return file_google_api_http_proto_rawDescGZIP(), []int{2} -} - -func (x *CustomHttpPattern) GetKind() string { - if x != nil { - return x.Kind - } - return "" -} - -func (x *CustomHttpPattern) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -var File_google_api_http_proto protoreflect.FileDescriptor - -var file_google_api_http_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, - 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x22, 0x79, 0x0a, 0x04, 0x48, 0x74, 0x74, 0x70, 0x12, 0x2a, 0x0a, 0x05, 0x72, - 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, - 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x66, 0x75, 0x6c, 0x6c, 0x79, - 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1c, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xda, - 0x02, 0x0a, 0x08, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x03, 0x67, 0x65, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x67, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x03, 0x70, - 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x03, 0x70, 0x75, 0x74, 0x12, - 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x04, 0x70, 0x6f, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, - 0x16, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x70, 0x61, 0x74, 0x63, 0x68, 0x12, 0x37, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x74, 0x74, 0x70, 0x50, - 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x62, 0x6f, 0x64, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x5f, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x45, 0x0a, 0x13, 0x61, 0x64, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, - 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x22, 0x3b, 0x0a, 0x11, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x74, 0x74, 0x70, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, - 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x42, 0x6a, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x09, 0x48, 0x74, 0x74, 0x70, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x04, - 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_api_http_proto_rawDescOnce sync.Once - file_google_api_http_proto_rawDescData = file_google_api_http_proto_rawDesc -) - -func file_google_api_http_proto_rawDescGZIP() []byte { - file_google_api_http_proto_rawDescOnce.Do(func() { - file_google_api_http_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_http_proto_rawDescData) - }) - return file_google_api_http_proto_rawDescData -} - -var file_google_api_http_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_google_api_http_proto_goTypes = []interface{}{ - (*Http)(nil), // 0: google.api.Http - (*HttpRule)(nil), // 1: google.api.HttpRule - (*CustomHttpPattern)(nil), // 2: google.api.CustomHttpPattern -} -var file_google_api_http_proto_depIdxs = []int32{ - 1, // 0: google.api.Http.rules:type_name -> google.api.HttpRule - 2, // 1: google.api.HttpRule.custom:type_name -> google.api.CustomHttpPattern - 1, // 2: google.api.HttpRule.additional_bindings:type_name -> google.api.HttpRule - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_google_api_http_proto_init() } -func file_google_api_http_proto_init() { - if File_google_api_http_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_api_http_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Http); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_api_http_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpRule); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_api_http_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CustomHttpPattern); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_google_api_http_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*HttpRule_Get)(nil), - (*HttpRule_Put)(nil), - (*HttpRule_Post)(nil), - (*HttpRule_Delete)(nil), - (*HttpRule_Patch)(nil), - (*HttpRule_Custom)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_http_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_api_http_proto_goTypes, - DependencyIndexes: file_google_api_http_proto_depIdxs, - MessageInfos: file_google_api_http_proto_msgTypes, - }.Build() - File_google_api_http_proto = out.File - file_google_api_http_proto_rawDesc = nil - file_google_api_http_proto_goTypes = nil - file_google_api_http_proto_depIdxs = nil -} diff --git a/gen/proto/google/api/resource.pb.go b/gen/proto/google/api/resource.pb.go deleted file mode 100644 index 34611a6..0000000 --- a/gen/proto/google/api/resource.pb.go +++ /dev/null @@ -1,654 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/api/resource.proto - -package annotations - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// A description of the historical or future-looking state of the -// resource pattern. -type ResourceDescriptor_History int32 - -const ( - // The "unset" value. - ResourceDescriptor_HISTORY_UNSPECIFIED ResourceDescriptor_History = 0 - // The resource originally had one pattern and launched as such, and - // additional patterns were added later. - ResourceDescriptor_ORIGINALLY_SINGLE_PATTERN ResourceDescriptor_History = 1 - // The resource has one pattern, but the API owner expects to add more - // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents - // that from being necessary once there are multiple patterns.) - ResourceDescriptor_FUTURE_MULTI_PATTERN ResourceDescriptor_History = 2 -) - -// Enum value maps for ResourceDescriptor_History. -var ( - ResourceDescriptor_History_name = map[int32]string{ - 0: "HISTORY_UNSPECIFIED", - 1: "ORIGINALLY_SINGLE_PATTERN", - 2: "FUTURE_MULTI_PATTERN", - } - ResourceDescriptor_History_value = map[string]int32{ - "HISTORY_UNSPECIFIED": 0, - "ORIGINALLY_SINGLE_PATTERN": 1, - "FUTURE_MULTI_PATTERN": 2, - } -) - -func (x ResourceDescriptor_History) Enum() *ResourceDescriptor_History { - p := new(ResourceDescriptor_History) - *p = x - return p -} - -func (x ResourceDescriptor_History) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ResourceDescriptor_History) Descriptor() protoreflect.EnumDescriptor { - return file_google_api_resource_proto_enumTypes[0].Descriptor() -} - -func (ResourceDescriptor_History) Type() protoreflect.EnumType { - return &file_google_api_resource_proto_enumTypes[0] -} - -func (x ResourceDescriptor_History) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ResourceDescriptor_History.Descriptor instead. -func (ResourceDescriptor_History) EnumDescriptor() ([]byte, []int) { - return file_google_api_resource_proto_rawDescGZIP(), []int{0, 0} -} - -// A flag representing a specific style that a resource claims to conform to. -type ResourceDescriptor_Style int32 - -const ( - // The unspecified value. Do not use. - ResourceDescriptor_STYLE_UNSPECIFIED ResourceDescriptor_Style = 0 - // This resource is intended to be "declarative-friendly". - // - // Declarative-friendly resources must be more strictly consistent, and - // setting this to true communicates to tools that this resource should - // adhere to declarative-friendly expectations. - // - // Note: This is used by the API linter (linter.aip.dev) to enable - // additional checks. - ResourceDescriptor_DECLARATIVE_FRIENDLY ResourceDescriptor_Style = 1 -) - -// Enum value maps for ResourceDescriptor_Style. -var ( - ResourceDescriptor_Style_name = map[int32]string{ - 0: "STYLE_UNSPECIFIED", - 1: "DECLARATIVE_FRIENDLY", - } - ResourceDescriptor_Style_value = map[string]int32{ - "STYLE_UNSPECIFIED": 0, - "DECLARATIVE_FRIENDLY": 1, - } -) - -func (x ResourceDescriptor_Style) Enum() *ResourceDescriptor_Style { - p := new(ResourceDescriptor_Style) - *p = x - return p -} - -func (x ResourceDescriptor_Style) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ResourceDescriptor_Style) Descriptor() protoreflect.EnumDescriptor { - return file_google_api_resource_proto_enumTypes[1].Descriptor() -} - -func (ResourceDescriptor_Style) Type() protoreflect.EnumType { - return &file_google_api_resource_proto_enumTypes[1] -} - -func (x ResourceDescriptor_Style) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ResourceDescriptor_Style.Descriptor instead. -func (ResourceDescriptor_Style) EnumDescriptor() ([]byte, []int) { - return file_google_api_resource_proto_rawDescGZIP(), []int{0, 1} -} - -// A simple descriptor of a resource type. -// -// ResourceDescriptor annotates a resource message (either by means of a -// protobuf annotation or use in the service config), and associates the -// resource's schema, the resource type, and the pattern of the resource name. -// -// Example: -// -// message Topic { -// // Indicates this message defines a resource schema. -// // Declares the resource type in the format of {service}/{kind}. -// // For Kubernetes resources, the format is {api group}/{kind}. -// option (google.api.resource) = { -// type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// -// Sometimes, resources have multiple patterns, typically because they can -// live under multiple parents. -// -// Example: -// -// message LogEntry { -// option (google.api.resource) = { -// type: "logging.googleapis.com/LogEntry" -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: 'logging.googleapis.com/LogEntry' -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -type ResourceDescriptor struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource type. It must be in the format of - // {service_name}/{resource_type_kind}. The `resource_type_kind` must be - // singular and must not include version numbers. - // - // Example: `storage.googleapis.com/Bucket` - // - // The value of the resource_type_kind must follow the regular expression - // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and - // should use PascalCase (UpperCamelCase). The maximum number of - // characters allowed for the `resource_type_kind` is 100. - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - // Optional. The relative resource name pattern associated with this resource - // type. The DNS prefix of the full resource name shouldn't be specified here. - // - // The path pattern must follow the syntax, which aligns with HTTP binding - // syntax: - // - // Template = Segment { "/" Segment } ; - // Segment = LITERAL | Variable ; - // Variable = "{" LITERAL "}" ; - // - // Examples: - // - // - "projects/{project}/topics/{topic}" - // - "projects/{project}/knowledgeBases/{knowledge_base}" - // - // The components in braces correspond to the IDs for each resource in the - // hierarchy. It is expected that, if multiple patterns are provided, - // the same component name (e.g. "project") refers to IDs of the same - // type of resource. - Pattern []string `protobuf:"bytes,2,rep,name=pattern,proto3" json:"pattern,omitempty"` - // Optional. The field on the resource that designates the resource name - // field. If omitted, this is assumed to be "name". - NameField string `protobuf:"bytes,3,opt,name=name_field,json=nameField,proto3" json:"name_field,omitempty"` - // Optional. The historical or future-looking state of the resource pattern. - // - // Example: - // - // // The InspectTemplate message originally only supported resource - // // names with organization, and project was added later. - // message InspectTemplate { - // option (google.api.resource) = { - // type: "dlp.googleapis.com/InspectTemplate" - // pattern: - // "organizations/{organization}/inspectTemplates/{inspect_template}" - // pattern: "projects/{project}/inspectTemplates/{inspect_template}" - // history: ORIGINALLY_SINGLE_PATTERN - // }; - // } - History ResourceDescriptor_History `protobuf:"varint,4,opt,name=history,proto3,enum=google.api.ResourceDescriptor_History" json:"history,omitempty"` - // The plural name used in the resource name and permission names, such as - // 'projects' for the resource name of 'projects/{project}' and the permission - // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same - // concept of the `plural` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // - // Note: The plural form is required even for singleton resources. See - // https://aip.dev/156 - Plural string `protobuf:"bytes,5,opt,name=plural,proto3" json:"plural,omitempty"` - // The same concept of the `singular` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // Such as "project" for the `resourcemanager.googleapis.com/Project` type. - Singular string `protobuf:"bytes,6,opt,name=singular,proto3" json:"singular,omitempty"` - // Style flag(s) for this resource. - // These indicate that a resource is expected to conform to a given - // style. See the specific style flags for additional information. - Style []ResourceDescriptor_Style `protobuf:"varint,10,rep,packed,name=style,proto3,enum=google.api.ResourceDescriptor_Style" json:"style,omitempty"` -} - -func (x *ResourceDescriptor) Reset() { - *x = ResourceDescriptor{} - if protoimpl.UnsafeEnabled { - mi := &file_google_api_resource_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResourceDescriptor) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResourceDescriptor) ProtoMessage() {} - -func (x *ResourceDescriptor) ProtoReflect() protoreflect.Message { - mi := &file_google_api_resource_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResourceDescriptor.ProtoReflect.Descriptor instead. -func (*ResourceDescriptor) Descriptor() ([]byte, []int) { - return file_google_api_resource_proto_rawDescGZIP(), []int{0} -} - -func (x *ResourceDescriptor) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *ResourceDescriptor) GetPattern() []string { - if x != nil { - return x.Pattern - } - return nil -} - -func (x *ResourceDescriptor) GetNameField() string { - if x != nil { - return x.NameField - } - return "" -} - -func (x *ResourceDescriptor) GetHistory() ResourceDescriptor_History { - if x != nil { - return x.History - } - return ResourceDescriptor_HISTORY_UNSPECIFIED -} - -func (x *ResourceDescriptor) GetPlural() string { - if x != nil { - return x.Plural - } - return "" -} - -func (x *ResourceDescriptor) GetSingular() string { - if x != nil { - return x.Singular - } - return "" -} - -func (x *ResourceDescriptor) GetStyle() []ResourceDescriptor_Style { - if x != nil { - return x.Style - } - return nil -} - -// Defines a proto annotation that describes a string field that refers to -// an API resource. -type ResourceReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource type that the annotated field references. - // - // Example: - // - // message Subscription { - // string topic = 2 [(google.api.resource_reference) = { - // type: "pubsub.googleapis.com/Topic" - // }]; - // } - // - // Occasionally, a field may reference an arbitrary resource. In this case, - // APIs use the special value * in their resource reference. - // - // Example: - // - // message GetIamPolicyRequest { - // string resource = 2 [(google.api.resource_reference) = { - // type: "*" - // }]; - // } - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` - // The resource type of a child collection that the annotated field - // references. This is useful for annotating the `parent` field that - // doesn't have a fixed resource type. - // - // Example: - // - // message ListLogEntriesRequest { - // string parent = 1 [(google.api.resource_reference) = { - // child_type: "logging.googleapis.com/LogEntry" - // }; - // } - ChildType string `protobuf:"bytes,2,opt,name=child_type,json=childType,proto3" json:"child_type,omitempty"` -} - -func (x *ResourceReference) Reset() { - *x = ResourceReference{} - if protoimpl.UnsafeEnabled { - mi := &file_google_api_resource_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResourceReference) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResourceReference) ProtoMessage() {} - -func (x *ResourceReference) ProtoReflect() protoreflect.Message { - mi := &file_google_api_resource_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResourceReference.ProtoReflect.Descriptor instead. -func (*ResourceReference) Descriptor() ([]byte, []int) { - return file_google_api_resource_proto_rawDescGZIP(), []int{1} -} - -func (x *ResourceReference) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *ResourceReference) GetChildType() string { - if x != nil { - return x.ChildType - } - return "" -} - -var file_google_api_resource_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.FieldOptions)(nil), - ExtensionType: (*ResourceReference)(nil), - Field: 1055, - Name: "google.api.resource_reference", - Tag: "bytes,1055,opt,name=resource_reference", - Filename: "google/api/resource.proto", - }, - { - ExtendedType: (*descriptorpb.FileOptions)(nil), - ExtensionType: ([]*ResourceDescriptor)(nil), - Field: 1053, - Name: "google.api.resource_definition", - Tag: "bytes,1053,rep,name=resource_definition", - Filename: "google/api/resource.proto", - }, - { - ExtendedType: (*descriptorpb.MessageOptions)(nil), - ExtensionType: (*ResourceDescriptor)(nil), - Field: 1053, - Name: "google.api.resource", - Tag: "bytes,1053,opt,name=resource", - Filename: "google/api/resource.proto", - }, -} - -// Extension fields to descriptorpb.FieldOptions. -var ( - // An annotation that describes a resource reference, see - // [ResourceReference][]. - // - // optional google.api.ResourceReference resource_reference = 1055; - E_ResourceReference = &file_google_api_resource_proto_extTypes[0] -) - -// Extension fields to descriptorpb.FileOptions. -var ( - // An annotation that describes a resource definition without a corresponding - // message; see [ResourceDescriptor][]. - // - // repeated google.api.ResourceDescriptor resource_definition = 1053; - E_ResourceDefinition = &file_google_api_resource_proto_extTypes[1] -) - -// Extension fields to descriptorpb.MessageOptions. -var ( - // An annotation that describes a resource definition, see - // [ResourceDescriptor][]. - // - // optional google.api.ResourceDescriptor resource = 1053; - E_Resource = &file_google_api_resource_proto_extTypes[2] -) - -var File_google_api_resource_proto protoreflect.FileDescriptor - -var file_google_api_resource_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaa, 0x03, 0x0a, 0x12, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x40, 0x0a, - 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x07, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x67, 0x75, - 0x6c, 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x69, 0x6e, 0x67, 0x75, - 0x6c, 0x61, 0x72, 0x12, 0x3a, 0x0a, 0x05, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x79, 0x6c, 0x65, 0x52, 0x05, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x22, - 0x5b, 0x0a, 0x07, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x17, 0x0a, 0x13, 0x48, 0x49, - 0x53, 0x54, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x4c, - 0x59, 0x5f, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x5f, 0x50, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4e, - 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x46, 0x55, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x4d, 0x55, 0x4c, - 0x54, 0x49, 0x5f, 0x50, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4e, 0x10, 0x02, 0x22, 0x38, 0x0a, 0x05, - 0x53, 0x74, 0x79, 0x6c, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x59, 0x4c, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, - 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x46, 0x52, 0x49, 0x45, - 0x4e, 0x44, 0x4c, 0x59, 0x10, 0x01, 0x22, 0x46, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x6c, - 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x9f, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x3a, 0x6e, 0x0a, 0x13, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x9d, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x5c, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9d, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x6e, 0x0a, 0x0e, 0x63, 0x6f, - 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x41, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_google_api_resource_proto_rawDescOnce sync.Once - file_google_api_resource_proto_rawDescData = file_google_api_resource_proto_rawDesc -) - -func file_google_api_resource_proto_rawDescGZIP() []byte { - file_google_api_resource_proto_rawDescOnce.Do(func() { - file_google_api_resource_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_api_resource_proto_rawDescData) - }) - return file_google_api_resource_proto_rawDescData -} - -var file_google_api_resource_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_google_api_resource_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_google_api_resource_proto_goTypes = []interface{}{ - (ResourceDescriptor_History)(0), // 0: google.api.ResourceDescriptor.History - (ResourceDescriptor_Style)(0), // 1: google.api.ResourceDescriptor.Style - (*ResourceDescriptor)(nil), // 2: google.api.ResourceDescriptor - (*ResourceReference)(nil), // 3: google.api.ResourceReference - (*descriptorpb.FieldOptions)(nil), // 4: google.protobuf.FieldOptions - (*descriptorpb.FileOptions)(nil), // 5: google.protobuf.FileOptions - (*descriptorpb.MessageOptions)(nil), // 6: google.protobuf.MessageOptions -} -var file_google_api_resource_proto_depIdxs = []int32{ - 0, // 0: google.api.ResourceDescriptor.history:type_name -> google.api.ResourceDescriptor.History - 1, // 1: google.api.ResourceDescriptor.style:type_name -> google.api.ResourceDescriptor.Style - 4, // 2: google.api.resource_reference:extendee -> google.protobuf.FieldOptions - 5, // 3: google.api.resource_definition:extendee -> google.protobuf.FileOptions - 6, // 4: google.api.resource:extendee -> google.protobuf.MessageOptions - 3, // 5: google.api.resource_reference:type_name -> google.api.ResourceReference - 2, // 6: google.api.resource_definition:type_name -> google.api.ResourceDescriptor - 2, // 7: google.api.resource:type_name -> google.api.ResourceDescriptor - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 5, // [5:8] is the sub-list for extension type_name - 2, // [2:5] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_google_api_resource_proto_init() } -func file_google_api_resource_proto_init() { - if File_google_api_resource_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_api_resource_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceDescriptor); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_api_resource_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_api_resource_proto_rawDesc, - NumEnums: 2, - NumMessages: 2, - NumExtensions: 3, - NumServices: 0, - }, - GoTypes: file_google_api_resource_proto_goTypes, - DependencyIndexes: file_google_api_resource_proto_depIdxs, - EnumInfos: file_google_api_resource_proto_enumTypes, - MessageInfos: file_google_api_resource_proto_msgTypes, - ExtensionInfos: file_google_api_resource_proto_extTypes, - }.Build() - File_google_api_resource_proto = out.File - file_google_api_resource_proto_rawDesc = nil - file_google_api_resource_proto_goTypes = nil - file_google_api_resource_proto_depIdxs = nil -} diff --git a/gen/proto/google/cloud/security/privateca/v1/resources.pb.go b/gen/proto/google/cloud/security/privateca/v1/resources.pb.go deleted file mode 100644 index 1f872f3..0000000 --- a/gen/proto/google/cloud/security/privateca/v1/resources.pb.go +++ /dev/null @@ -1,5329 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/cloud/security/privateca/v1/resources.proto - -package privateca - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - expr "google.golang.org/genproto/googleapis/type/expr" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// A [RevocationReason][google.cloud.security.privateca.v1.RevocationReason] indicates whether a [Certificate][google.cloud.security.privateca.v1.Certificate] has been revoked, -// and the reason for revocation. These correspond to standard revocation -// reasons from RFC 5280. Note that the enum labels and values in this -// definition are not the same ASN.1 values defined in RFC 5280. These values -// will be translated to the correct ASN.1 values when a CRL is created. -type RevocationReason int32 - -const ( - // Default unspecified value. This value does indicate that a [Certificate][google.cloud.security.privateca.v1.Certificate] - // has been revoked, but that a reason has not been recorded. - RevocationReason_REVOCATION_REASON_UNSPECIFIED RevocationReason = 0 - // Key material for this [Certificate][google.cloud.security.privateca.v1.Certificate] may have leaked. - RevocationReason_KEY_COMPROMISE RevocationReason = 1 - // The key material for a certificate authority in the issuing path may have - // leaked. - RevocationReason_CERTIFICATE_AUTHORITY_COMPROMISE RevocationReason = 2 - // The subject or other attributes in this [Certificate][google.cloud.security.privateca.v1.Certificate] have changed. - RevocationReason_AFFILIATION_CHANGED RevocationReason = 3 - // This [Certificate][google.cloud.security.privateca.v1.Certificate] has been superseded. - RevocationReason_SUPERSEDED RevocationReason = 4 - // This [Certificate][google.cloud.security.privateca.v1.Certificate] or entities in the issuing path have ceased to - // operate. - RevocationReason_CESSATION_OF_OPERATION RevocationReason = 5 - // This [Certificate][google.cloud.security.privateca.v1.Certificate] should not be considered valid, it is expected that it - // may become valid in the future. - RevocationReason_CERTIFICATE_HOLD RevocationReason = 6 - // This [Certificate][google.cloud.security.privateca.v1.Certificate] no longer has permission to assert the listed - // attributes. - RevocationReason_PRIVILEGE_WITHDRAWN RevocationReason = 7 - // The authority which determines appropriate attributes for a [Certificate][google.cloud.security.privateca.v1.Certificate] - // may have been compromised. - RevocationReason_ATTRIBUTE_AUTHORITY_COMPROMISE RevocationReason = 8 -) - -// Enum value maps for RevocationReason. -var ( - RevocationReason_name = map[int32]string{ - 0: "REVOCATION_REASON_UNSPECIFIED", - 1: "KEY_COMPROMISE", - 2: "CERTIFICATE_AUTHORITY_COMPROMISE", - 3: "AFFILIATION_CHANGED", - 4: "SUPERSEDED", - 5: "CESSATION_OF_OPERATION", - 6: "CERTIFICATE_HOLD", - 7: "PRIVILEGE_WITHDRAWN", - 8: "ATTRIBUTE_AUTHORITY_COMPROMISE", - } - RevocationReason_value = map[string]int32{ - "REVOCATION_REASON_UNSPECIFIED": 0, - "KEY_COMPROMISE": 1, - "CERTIFICATE_AUTHORITY_COMPROMISE": 2, - "AFFILIATION_CHANGED": 3, - "SUPERSEDED": 4, - "CESSATION_OF_OPERATION": 5, - "CERTIFICATE_HOLD": 6, - "PRIVILEGE_WITHDRAWN": 7, - "ATTRIBUTE_AUTHORITY_COMPROMISE": 8, - } -) - -func (x RevocationReason) Enum() *RevocationReason { - p := new(RevocationReason) - *p = x - return p -} - -func (x RevocationReason) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RevocationReason) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[0].Descriptor() -} - -func (RevocationReason) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[0] -} - -func (x RevocationReason) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RevocationReason.Descriptor instead. -func (RevocationReason) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0} -} - -// Describes the way in which a [Certificate][google.cloud.security.privateca.v1.Certificate]'s [Subject][google.cloud.security.privateca.v1.Subject] and/or -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] will be resolved. -type SubjectRequestMode int32 - -const ( - // Not specified. - SubjectRequestMode_SUBJECT_REQUEST_MODE_UNSPECIFIED SubjectRequestMode = 0 - // The default mode used in most cases. Indicates that the certificate's - // [Subject][google.cloud.security.privateca.v1.Subject] and/or [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] are specified in the certificate - // request. This mode requires the caller to have the - // `privateca.certificates.create` permission. - SubjectRequestMode_DEFAULT SubjectRequestMode = 1 - // A mode reserved for special cases. Indicates that the certificate should - // have one or more SPIFFE [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] set by the service based - // on the caller's identity. This mode will ignore any explicitly specified - // [Subject][google.cloud.security.privateca.v1.Subject] and/or [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] in the certificate request. - // This mode requires the caller to have the - // `privateca.certificates.createForSelf` permission. - SubjectRequestMode_REFLECTED_SPIFFE SubjectRequestMode = 2 -) - -// Enum value maps for SubjectRequestMode. -var ( - SubjectRequestMode_name = map[int32]string{ - 0: "SUBJECT_REQUEST_MODE_UNSPECIFIED", - 1: "DEFAULT", - 2: "REFLECTED_SPIFFE", - } - SubjectRequestMode_value = map[string]int32{ - "SUBJECT_REQUEST_MODE_UNSPECIFIED": 0, - "DEFAULT": 1, - "REFLECTED_SPIFFE": 2, - } -) - -func (x SubjectRequestMode) Enum() *SubjectRequestMode { - p := new(SubjectRequestMode) - *p = x - return p -} - -func (x SubjectRequestMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SubjectRequestMode) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[1].Descriptor() -} - -func (SubjectRequestMode) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[1] -} - -func (x SubjectRequestMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SubjectRequestMode.Descriptor instead. -func (SubjectRequestMode) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1} -} - -// The type of a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], indicating its issuing chain. -type CertificateAuthority_Type int32 - -const ( - // Not specified. - CertificateAuthority_TYPE_UNSPECIFIED CertificateAuthority_Type = 0 - // Self-signed CA. - CertificateAuthority_SELF_SIGNED CertificateAuthority_Type = 1 - // Subordinate CA. Could be issued by a Private CA [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // or an unmanaged CA. - CertificateAuthority_SUBORDINATE CertificateAuthority_Type = 2 -) - -// Enum value maps for CertificateAuthority_Type. -var ( - CertificateAuthority_Type_name = map[int32]string{ - 0: "TYPE_UNSPECIFIED", - 1: "SELF_SIGNED", - 2: "SUBORDINATE", - } - CertificateAuthority_Type_value = map[string]int32{ - "TYPE_UNSPECIFIED": 0, - "SELF_SIGNED": 1, - "SUBORDINATE": 2, - } -) - -func (x CertificateAuthority_Type) Enum() *CertificateAuthority_Type { - p := new(CertificateAuthority_Type) - *p = x - return p -} - -func (x CertificateAuthority_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CertificateAuthority_Type) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[2].Descriptor() -} - -func (CertificateAuthority_Type) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[2] -} - -func (x CertificateAuthority_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CertificateAuthority_Type.Descriptor instead. -func (CertificateAuthority_Type) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0, 0} -} - -// The state of a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], indicating if it can be used. -type CertificateAuthority_State int32 - -const ( - // Not specified. - CertificateAuthority_STATE_UNSPECIFIED CertificateAuthority_State = 0 - // Certificates can be issued from this CA. CRLs will be generated for this - // CA. The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - CertificateAuthority_ENABLED CertificateAuthority_State = 1 - // Certificates cannot be issued from this CA. CRLs will still be generated. - // The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, but will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - CertificateAuthority_DISABLED CertificateAuthority_State = 2 - // Certificates can be issued from this CA. CRLs will be generated for this - // CA. The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, but will not - // be used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - CertificateAuthority_STAGED CertificateAuthority_State = 3 - // Certificates cannot be issued from this CA. CRLs will not be generated. - // The CA will not be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - CertificateAuthority_AWAITING_USER_ACTIVATION CertificateAuthority_State = 4 - // Certificates cannot be issued from this CA. CRLs will not be generated. - // The CA may still be recovered by calling - // [CertificateAuthorityService.UndeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority] before - // [expire_time][google.cloud.security.privateca.v1.CertificateAuthority.expire_time]. - // The CA will not be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - CertificateAuthority_DELETED CertificateAuthority_State = 5 -) - -// Enum value maps for CertificateAuthority_State. -var ( - CertificateAuthority_State_name = map[int32]string{ - 0: "STATE_UNSPECIFIED", - 1: "ENABLED", - 2: "DISABLED", - 3: "STAGED", - 4: "AWAITING_USER_ACTIVATION", - 5: "DELETED", - } - CertificateAuthority_State_value = map[string]int32{ - "STATE_UNSPECIFIED": 0, - "ENABLED": 1, - "DISABLED": 2, - "STAGED": 3, - "AWAITING_USER_ACTIVATION": 4, - "DELETED": 5, - } -) - -func (x CertificateAuthority_State) Enum() *CertificateAuthority_State { - p := new(CertificateAuthority_State) - *p = x - return p -} - -func (x CertificateAuthority_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CertificateAuthority_State) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[3].Descriptor() -} - -func (CertificateAuthority_State) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[3] -} - -func (x CertificateAuthority_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CertificateAuthority_State.Descriptor instead. -func (CertificateAuthority_State) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0, 1} -} - -// The algorithm of a Cloud KMS CryptoKeyVersion of a -// [CryptoKey][google.cloud.kms.v1.CryptoKey] with the -// [CryptoKeyPurpose][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose] value -// `ASYMMETRIC_SIGN`. These values correspond to the -// [CryptoKeyVersionAlgorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm] -// values. For RSA signing algorithms, the PSS algorithms should be preferred, -// use PKCS1 algorithms if required for compatibility. For further -// recommendations, see -// https://cloud.google.com/kms/docs/algorithms#algorithm_recommendations. -type CertificateAuthority_SignHashAlgorithm int32 - -const ( - // Not specified. - CertificateAuthority_SIGN_HASH_ALGORITHM_UNSPECIFIED CertificateAuthority_SignHashAlgorithm = 0 - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_2048_SHA256 - CertificateAuthority_RSA_PSS_2048_SHA256 CertificateAuthority_SignHashAlgorithm = 1 - // maps to CryptoKeyVersionAlgorithm. RSA_SIGN_PSS_3072_SHA256 - CertificateAuthority_RSA_PSS_3072_SHA256 CertificateAuthority_SignHashAlgorithm = 2 - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_4096_SHA256 - CertificateAuthority_RSA_PSS_4096_SHA256 CertificateAuthority_SignHashAlgorithm = 3 - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_2048_SHA256 - CertificateAuthority_RSA_PKCS1_2048_SHA256 CertificateAuthority_SignHashAlgorithm = 6 - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_3072_SHA256 - CertificateAuthority_RSA_PKCS1_3072_SHA256 CertificateAuthority_SignHashAlgorithm = 7 - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_4096_SHA256 - CertificateAuthority_RSA_PKCS1_4096_SHA256 CertificateAuthority_SignHashAlgorithm = 8 - // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P256_SHA256 - CertificateAuthority_EC_P256_SHA256 CertificateAuthority_SignHashAlgorithm = 4 - // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P384_SHA384 - CertificateAuthority_EC_P384_SHA384 CertificateAuthority_SignHashAlgorithm = 5 -) - -// Enum value maps for CertificateAuthority_SignHashAlgorithm. -var ( - CertificateAuthority_SignHashAlgorithm_name = map[int32]string{ - 0: "SIGN_HASH_ALGORITHM_UNSPECIFIED", - 1: "RSA_PSS_2048_SHA256", - 2: "RSA_PSS_3072_SHA256", - 3: "RSA_PSS_4096_SHA256", - 6: "RSA_PKCS1_2048_SHA256", - 7: "RSA_PKCS1_3072_SHA256", - 8: "RSA_PKCS1_4096_SHA256", - 4: "EC_P256_SHA256", - 5: "EC_P384_SHA384", - } - CertificateAuthority_SignHashAlgorithm_value = map[string]int32{ - "SIGN_HASH_ALGORITHM_UNSPECIFIED": 0, - "RSA_PSS_2048_SHA256": 1, - "RSA_PSS_3072_SHA256": 2, - "RSA_PSS_4096_SHA256": 3, - "RSA_PKCS1_2048_SHA256": 6, - "RSA_PKCS1_3072_SHA256": 7, - "RSA_PKCS1_4096_SHA256": 8, - "EC_P256_SHA256": 4, - "EC_P384_SHA384": 5, - } -) - -func (x CertificateAuthority_SignHashAlgorithm) Enum() *CertificateAuthority_SignHashAlgorithm { - p := new(CertificateAuthority_SignHashAlgorithm) - *p = x - return p -} - -func (x CertificateAuthority_SignHashAlgorithm) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CertificateAuthority_SignHashAlgorithm) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[4].Descriptor() -} - -func (CertificateAuthority_SignHashAlgorithm) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[4] -} - -func (x CertificateAuthority_SignHashAlgorithm) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CertificateAuthority_SignHashAlgorithm.Descriptor instead. -func (CertificateAuthority_SignHashAlgorithm) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0, 2} -} - -// The tier of a [CaPool][google.cloud.security.privateca.v1.CaPool], indicating its supported functionality and/or -// billing SKU. -type CaPool_Tier int32 - -const ( - // Not specified. - CaPool_TIER_UNSPECIFIED CaPool_Tier = 0 - // Enterprise tier. - CaPool_ENTERPRISE CaPool_Tier = 1 - // DevOps tier. - CaPool_DEVOPS CaPool_Tier = 2 -) - -// Enum value maps for CaPool_Tier. -var ( - CaPool_Tier_name = map[int32]string{ - 0: "TIER_UNSPECIFIED", - 1: "ENTERPRISE", - 2: "DEVOPS", - } - CaPool_Tier_value = map[string]int32{ - "TIER_UNSPECIFIED": 0, - "ENTERPRISE": 1, - "DEVOPS": 2, - } -) - -func (x CaPool_Tier) Enum() *CaPool_Tier { - p := new(CaPool_Tier) - *p = x - return p -} - -func (x CaPool_Tier) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CaPool_Tier) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[5].Descriptor() -} - -func (CaPool_Tier) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[5] -} - -func (x CaPool_Tier) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CaPool_Tier.Descriptor instead. -func (CaPool_Tier) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 0} -} - -// Describes an elliptic curve-based signature algorithm that may be -// used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued from a [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm int32 - -const ( - // Not specified. Signifies that any signature algorithm may be used. - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EC_SIGNATURE_ALGORITHM_UNSPECIFIED CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm = 0 - // Refers to the Elliptic Curve Digital Signature Algorithm over the - // NIST P-256 curve. - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_ECDSA_P256 CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm = 1 - // Refers to the Elliptic Curve Digital Signature Algorithm over the - // NIST P-384 curve. - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_ECDSA_P384 CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm = 2 - // Refers to the Edwards-curve Digital Signature Algorithm over curve - // 25519, as described in RFC 8410. - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EDDSA_25519 CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm = 3 -) - -// Enum value maps for CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm. -var ( - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm_name = map[int32]string{ - 0: "EC_SIGNATURE_ALGORITHM_UNSPECIFIED", - 1: "ECDSA_P256", - 2: "ECDSA_P384", - 3: "EDDSA_25519", - } - CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm_value = map[string]int32{ - "EC_SIGNATURE_ALGORITHM_UNSPECIFIED": 0, - "ECDSA_P256": 1, - "ECDSA_P384": 2, - "EDDSA_25519": 3, - } -) - -func (x CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) Enum() *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm { - p := new(CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) - *p = x - return p -} - -func (x CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[6].Descriptor() -} - -func (CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[6] -} - -func (x CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm.Descriptor instead. -func (CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1, 0, 1, 0} -} - -// The state of a [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList], indicating if it is current. -type CertificateRevocationList_State int32 - -const ( - // Not specified. - CertificateRevocationList_STATE_UNSPECIFIED CertificateRevocationList_State = 0 - // The [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] is up to date. - CertificateRevocationList_ACTIVE CertificateRevocationList_State = 1 - // The [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] is no longer current. - CertificateRevocationList_SUPERSEDED CertificateRevocationList_State = 2 -) - -// Enum value maps for CertificateRevocationList_State. -var ( - CertificateRevocationList_State_name = map[int32]string{ - 0: "STATE_UNSPECIFIED", - 1: "ACTIVE", - 2: "SUPERSEDED", - } - CertificateRevocationList_State_value = map[string]int32{ - "STATE_UNSPECIFIED": 0, - "ACTIVE": 1, - "SUPERSEDED": 2, - } -) - -func (x CertificateRevocationList_State) Enum() *CertificateRevocationList_State { - p := new(CertificateRevocationList_State) - *p = x - return p -} - -func (x CertificateRevocationList_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CertificateRevocationList_State) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[7].Descriptor() -} - -func (CertificateRevocationList_State) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[7] -} - -func (x CertificateRevocationList_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CertificateRevocationList_State.Descriptor instead. -func (CertificateRevocationList_State) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{2, 0} -} - -// Types of public keys formats that are supported. Currently, only `PEM` -// format is supported. -type PublicKey_KeyFormat int32 - -const ( - // Default unspecified value. - PublicKey_KEY_FORMAT_UNSPECIFIED PublicKey_KeyFormat = 0 - // The key is PEM-encoded as defined in [RFC - // 7468](https://tools.ietf.org/html/rfc7468). It can be any of the - // following: a PEM-encoded PKCS#1/RFC 3447 RSAPublicKey - // structure, an RFC 5280 - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // or a PEM-encoded X.509 certificate signing request (CSR). If a - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // is specified, it can contain a A PEM-encoded PKCS#1/RFC 3447 RSAPublicKey - // or a NIST P-256/secp256r1/prime256v1 or P-384 key. If a CSR is specified, - // it will used solely for the purpose of extracting the public key. When - // generated by the service, it will always be an RFC 5280 - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // structure containing an algorithm identifier and a key. - PublicKey_PEM PublicKey_KeyFormat = 1 -) - -// Enum value maps for PublicKey_KeyFormat. -var ( - PublicKey_KeyFormat_name = map[int32]string{ - 0: "KEY_FORMAT_UNSPECIFIED", - 1: "PEM", - } - PublicKey_KeyFormat_value = map[string]int32{ - "KEY_FORMAT_UNSPECIFIED": 0, - "PEM": 1, - } -) - -func (x PublicKey_KeyFormat) Enum() *PublicKey_KeyFormat { - p := new(PublicKey_KeyFormat) - *p = x - return p -} - -func (x PublicKey_KeyFormat) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PublicKey_KeyFormat) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[8].Descriptor() -} - -func (PublicKey_KeyFormat) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[8] -} - -func (x PublicKey_KeyFormat) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PublicKey_KeyFormat.Descriptor instead. -func (PublicKey_KeyFormat) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{7, 0} -} - -// Describes well-known X.509 extensions that can appear in a [Certificate][google.cloud.security.privateca.v1.Certificate], -// not including the [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] extension. -type CertificateExtensionConstraints_KnownCertificateExtension int32 - -const ( - // Not specified. - CertificateExtensionConstraints_KNOWN_CERTIFICATE_EXTENSION_UNSPECIFIED CertificateExtensionConstraints_KnownCertificateExtension = 0 - // Refers to a certificate's Key Usage extension, as described in [RFC 5280 - // section 4.2.1.3](https://tools.ietf.org/html/rfc5280#section-4.2.1.3). - // This corresponds to the [KeyUsage.base_key_usage][google.cloud.security.privateca.v1.KeyUsage.base_key_usage] field. - CertificateExtensionConstraints_BASE_KEY_USAGE CertificateExtensionConstraints_KnownCertificateExtension = 1 - // Refers to a certificate's Extended Key Usage extension, as described in - // [RFC 5280 - // section 4.2.1.12](https://tools.ietf.org/html/rfc5280#section-4.2.1.12). - // This corresponds to the [KeyUsage.extended_key_usage][google.cloud.security.privateca.v1.KeyUsage.extended_key_usage] message. - CertificateExtensionConstraints_EXTENDED_KEY_USAGE CertificateExtensionConstraints_KnownCertificateExtension = 2 - // Refers to a certificate's Basic Constraints extension, as described in - // [RFC 5280 - // section 4.2.1.9](https://tools.ietf.org/html/rfc5280#section-4.2.1.9). - // This corresponds to the [X509Parameters.ca_options][google.cloud.security.privateca.v1.X509Parameters.ca_options] field. - CertificateExtensionConstraints_CA_OPTIONS CertificateExtensionConstraints_KnownCertificateExtension = 3 - // Refers to a certificate's Policy object identifiers, as described in - // [RFC 5280 - // section 4.2.1.4](https://tools.ietf.org/html/rfc5280#section-4.2.1.4). - // This corresponds to the [X509Parameters.policy_ids][google.cloud.security.privateca.v1.X509Parameters.policy_ids] field. - CertificateExtensionConstraints_POLICY_IDS CertificateExtensionConstraints_KnownCertificateExtension = 4 - // Refers to OCSP servers in a certificate's Authority Information Access - // extension, as described in - // [RFC 5280 - // section 4.2.2.1](https://tools.ietf.org/html/rfc5280#section-4.2.2.1), - // This corresponds to the [X509Parameters.aia_ocsp_servers][google.cloud.security.privateca.v1.X509Parameters.aia_ocsp_servers] field. - CertificateExtensionConstraints_AIA_OCSP_SERVERS CertificateExtensionConstraints_KnownCertificateExtension = 5 -) - -// Enum value maps for CertificateExtensionConstraints_KnownCertificateExtension. -var ( - CertificateExtensionConstraints_KnownCertificateExtension_name = map[int32]string{ - 0: "KNOWN_CERTIFICATE_EXTENSION_UNSPECIFIED", - 1: "BASE_KEY_USAGE", - 2: "EXTENDED_KEY_USAGE", - 3: "CA_OPTIONS", - 4: "POLICY_IDS", - 5: "AIA_OCSP_SERVERS", - } - CertificateExtensionConstraints_KnownCertificateExtension_value = map[string]int32{ - "KNOWN_CERTIFICATE_EXTENSION_UNSPECIFIED": 0, - "BASE_KEY_USAGE": 1, - "EXTENDED_KEY_USAGE": 2, - "CA_OPTIONS": 3, - "POLICY_IDS": 4, - "AIA_OCSP_SERVERS": 5, - } -) - -func (x CertificateExtensionConstraints_KnownCertificateExtension) Enum() *CertificateExtensionConstraints_KnownCertificateExtension { - p := new(CertificateExtensionConstraints_KnownCertificateExtension) - *p = x - return p -} - -func (x CertificateExtensionConstraints_KnownCertificateExtension) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CertificateExtensionConstraints_KnownCertificateExtension) Descriptor() protoreflect.EnumDescriptor { - return file_google_cloud_security_privateca_v1_resources_proto_enumTypes[9].Descriptor() -} - -func (CertificateExtensionConstraints_KnownCertificateExtension) Type() protoreflect.EnumType { - return &file_google_cloud_security_privateca_v1_resources_proto_enumTypes[9] -} - -func (x CertificateExtensionConstraints_KnownCertificateExtension) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CertificateExtensionConstraints_KnownCertificateExtension.Descriptor instead. -func (CertificateExtensionConstraints_KnownCertificateExtension) EnumDescriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{16, 0} -} - -// A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] represents an individual Certificate Authority. -// A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] can be used to create [Certificates][google.cloud.security.privateca.v1.Certificate]. -type CertificateAuthority struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Required. Immutable. The [Type][google.cloud.security.privateca.v1.CertificateAuthority.Type] of this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - Type CertificateAuthority_Type `protobuf:"varint,2,opt,name=type,proto3,enum=google.cloud.security.privateca.v1.CertificateAuthority_Type" json:"type,omitempty"` - // Required. Immutable. The config used to create a self-signed X.509 certificate or CSR. - Config *CertificateConfig `protobuf:"bytes,3,opt,name=config,proto3" json:"config,omitempty"` - // Required. Immutable. The desired lifetime of the CA certificate. Used to create the - // "not_before_time" and "not_after_time" fields inside an X.509 - // certificate. - Lifetime *durationpb.Duration `protobuf:"bytes,4,opt,name=lifetime,proto3" json:"lifetime,omitempty"` - // Required. Immutable. Used when issuing certificates for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. If this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] is a self-signed CertificateAuthority, this key - // is also used to sign the self-signed CA certificate. Otherwise, it - // is used to sign a CSR. - KeySpec *CertificateAuthority_KeyVersionSpec `protobuf:"bytes,5,opt,name=key_spec,json=keySpec,proto3" json:"key_spec,omitempty"` - // Optional. If this is a subordinate [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], this field will be set - // with the subordinate configuration, which describes its issuers. This may - // be updated, but this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] must continue to validate. - SubordinateConfig *SubordinateConfig `protobuf:"bytes,6,opt,name=subordinate_config,json=subordinateConfig,proto3" json:"subordinate_config,omitempty"` - // Output only. The [CaPool.Tier][google.cloud.security.privateca.v1.CaPool.Tier] of the [CaPool][google.cloud.security.privateca.v1.CaPool] that includes this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - Tier CaPool_Tier `protobuf:"varint,7,opt,name=tier,proto3,enum=google.cloud.security.privateca.v1.CaPool_Tier" json:"tier,omitempty"` - // Output only. The [State][google.cloud.security.privateca.v1.CertificateAuthority.State] for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - State CertificateAuthority_State `protobuf:"varint,8,opt,name=state,proto3,enum=google.cloud.security.privateca.v1.CertificateAuthority_State" json:"state,omitempty"` - // Output only. This [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate chain, including the current - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate. Ordered such that the root issuer - // is the final element (consistent with RFC 5246). For a self-signed CA, this - // will only list the current [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate. - PemCaCertificates []string `protobuf:"bytes,9,rep,name=pem_ca_certificates,json=pemCaCertificates,proto3" json:"pem_ca_certificates,omitempty"` - // Output only. A structured description of this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate - // and its issuers. Ordered as self-to-root. - CaCertificateDescriptions []*CertificateDescription `protobuf:"bytes,10,rep,name=ca_certificate_descriptions,json=caCertificateDescriptions,proto3" json:"ca_certificate_descriptions,omitempty"` - // Immutable. The name of a Cloud Storage bucket where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will - // publish content, such as the CA certificate and CRLs. This must be a bucket - // name, without any prefixes (such as `gs://`) or suffixes (such as - // `.googleapis.com`). For example, to use a bucket named `my-bucket`, you - // would simply specify `my-bucket`. If not specified, a managed bucket will - // be created. - GcsBucket string `protobuf:"bytes,11,opt,name=gcs_bucket,json=gcsBucket,proto3" json:"gcs_bucket,omitempty"` - // Output only. URLs for accessing content published by this CA, such as the CA certificate - // and CRLs. - AccessUrls *CertificateAuthority_AccessUrls `protobuf:"bytes,12,opt,name=access_urls,json=accessUrls,proto3" json:"access_urls,omitempty"` - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was created. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was last updated. - UpdateTime *timestamppb.Timestamp `protobuf:"bytes,14,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was soft deleted, if - // it is in the [DELETED][google.cloud.security.privateca.v1.CertificateAuthority.State.DELETED] state. - DeleteTime *timestamppb.Timestamp `protobuf:"bytes,15,opt,name=delete_time,json=deleteTime,proto3" json:"delete_time,omitempty"` - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will be permanently purged, - // if it is in the [DELETED][google.cloud.security.privateca.v1.CertificateAuthority.State.DELETED] state. - ExpireTime *timestamppb.Timestamp `protobuf:"bytes,16,opt,name=expire_time,json=expireTime,proto3" json:"expire_time,omitempty"` - // Optional. Labels with user-defined metadata. - Labels map[string]string `protobuf:"bytes,17,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *CertificateAuthority) Reset() { - *x = CertificateAuthority{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateAuthority) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateAuthority) ProtoMessage() {} - -func (x *CertificateAuthority) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateAuthority.ProtoReflect.Descriptor instead. -func (*CertificateAuthority) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0} -} - -func (x *CertificateAuthority) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CertificateAuthority) GetType() CertificateAuthority_Type { - if x != nil { - return x.Type - } - return CertificateAuthority_TYPE_UNSPECIFIED -} - -func (x *CertificateAuthority) GetConfig() *CertificateConfig { - if x != nil { - return x.Config - } - return nil -} - -func (x *CertificateAuthority) GetLifetime() *durationpb.Duration { - if x != nil { - return x.Lifetime - } - return nil -} - -func (x *CertificateAuthority) GetKeySpec() *CertificateAuthority_KeyVersionSpec { - if x != nil { - return x.KeySpec - } - return nil -} - -func (x *CertificateAuthority) GetSubordinateConfig() *SubordinateConfig { - if x != nil { - return x.SubordinateConfig - } - return nil -} - -func (x *CertificateAuthority) GetTier() CaPool_Tier { - if x != nil { - return x.Tier - } - return CaPool_TIER_UNSPECIFIED -} - -func (x *CertificateAuthority) GetState() CertificateAuthority_State { - if x != nil { - return x.State - } - return CertificateAuthority_STATE_UNSPECIFIED -} - -func (x *CertificateAuthority) GetPemCaCertificates() []string { - if x != nil { - return x.PemCaCertificates - } - return nil -} - -func (x *CertificateAuthority) GetCaCertificateDescriptions() []*CertificateDescription { - if x != nil { - return x.CaCertificateDescriptions - } - return nil -} - -func (x *CertificateAuthority) GetGcsBucket() string { - if x != nil { - return x.GcsBucket - } - return "" -} - -func (x *CertificateAuthority) GetAccessUrls() *CertificateAuthority_AccessUrls { - if x != nil { - return x.AccessUrls - } - return nil -} - -func (x *CertificateAuthority) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *CertificateAuthority) GetUpdateTime() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTime - } - return nil -} - -func (x *CertificateAuthority) GetDeleteTime() *timestamppb.Timestamp { - if x != nil { - return x.DeleteTime - } - return nil -} - -func (x *CertificateAuthority) GetExpireTime() *timestamppb.Timestamp { - if x != nil { - return x.ExpireTime - } - return nil -} - -func (x *CertificateAuthority) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// A [CaPool][google.cloud.security.privateca.v1.CaPool] represents a group of -// [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] that form a trust anchor. A -// [CaPool][google.cloud.security.privateca.v1.CaPool] can be used to manage issuance policies for one or more -// [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] resources and to rotate CA certificates in and out -// of the trust anchor. -type CaPool struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The resource name for this [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Required. Immutable. The [Tier][google.cloud.security.privateca.v1.CaPool.Tier] of this [CaPool][google.cloud.security.privateca.v1.CaPool]. - Tier CaPool_Tier `protobuf:"varint,2,opt,name=tier,proto3,enum=google.cloud.security.privateca.v1.CaPool_Tier" json:"tier,omitempty"` - // Optional. The [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] to control how [Certificates][google.cloud.security.privateca.v1.Certificate] - // will be issued from this [CaPool][google.cloud.security.privateca.v1.CaPool]. - IssuancePolicy *CaPool_IssuancePolicy `protobuf:"bytes,3,opt,name=issuance_policy,json=issuancePolicy,proto3" json:"issuance_policy,omitempty"` - // Optional. The [PublishingOptions][google.cloud.security.privateca.v1.CaPool.PublishingOptions] to follow when issuing - // [Certificates][google.cloud.security.privateca.v1.Certificate] from any [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in this - // [CaPool][google.cloud.security.privateca.v1.CaPool]. - PublishingOptions *CaPool_PublishingOptions `protobuf:"bytes,4,opt,name=publishing_options,json=publishingOptions,proto3" json:"publishing_options,omitempty"` - // Optional. Labels with user-defined metadata. - Labels map[string]string `protobuf:"bytes,5,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *CaPool) Reset() { - *x = CaPool{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool) ProtoMessage() {} - -func (x *CaPool) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool.ProtoReflect.Descriptor instead. -func (*CaPool) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1} -} - -func (x *CaPool) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CaPool) GetTier() CaPool_Tier { - if x != nil { - return x.Tier - } - return CaPool_TIER_UNSPECIFIED -} - -func (x *CaPool) GetIssuancePolicy() *CaPool_IssuancePolicy { - if x != nil { - return x.IssuancePolicy - } - return nil -} - -func (x *CaPool) GetPublishingOptions() *CaPool_PublishingOptions { - if x != nil { - return x.PublishingOptions - } - return nil -} - -func (x *CaPool) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// A [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] corresponds to a signed X.509 certificate -// Revocation List (CRL). A CRL contains the serial numbers of certificates that -// should no longer be trusted. -type CertificateRevocationList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The resource name for this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] in - // the format - // `projects/*/locations/*/caPools/*certificateAuthorities/*/ - // certificateRevocationLists/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Output only. The CRL sequence number that appears in pem_crl. - SequenceNumber int64 `protobuf:"varint,2,opt,name=sequence_number,json=sequenceNumber,proto3" json:"sequence_number,omitempty"` - // Output only. The revoked serial numbers that appear in pem_crl. - RevokedCertificates []*CertificateRevocationList_RevokedCertificate `protobuf:"bytes,3,rep,name=revoked_certificates,json=revokedCertificates,proto3" json:"revoked_certificates,omitempty"` - // Output only. The PEM-encoded X.509 CRL. - PemCrl string `protobuf:"bytes,4,opt,name=pem_crl,json=pemCrl,proto3" json:"pem_crl,omitempty"` - // Output only. The location where 'pem_crl' can be accessed. - AccessUrl string `protobuf:"bytes,5,opt,name=access_url,json=accessUrl,proto3" json:"access_url,omitempty"` - // Output only. The [State][google.cloud.security.privateca.v1.CertificateRevocationList.State] for this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. - State CertificateRevocationList_State `protobuf:"varint,6,opt,name=state,proto3,enum=google.cloud.security.privateca.v1.CertificateRevocationList_State" json:"state,omitempty"` - // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] was created. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] was updated. - UpdateTime *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // Output only. The revision WorkloadID of this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. A new revision is - // committed whenever a new CRL is published. The format is an 8-character - // hexadecimal string. - RevisionId string `protobuf:"bytes,9,opt,name=revision_id,json=revisionId,proto3" json:"revision_id,omitempty"` - // Optional. Labels with user-defined metadata. - Labels map[string]string `protobuf:"bytes,10,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *CertificateRevocationList) Reset() { - *x = CertificateRevocationList{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateRevocationList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateRevocationList) ProtoMessage() {} - -func (x *CertificateRevocationList) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateRevocationList.ProtoReflect.Descriptor instead. -func (*CertificateRevocationList) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{2} -} - -func (x *CertificateRevocationList) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CertificateRevocationList) GetSequenceNumber() int64 { - if x != nil { - return x.SequenceNumber - } - return 0 -} - -func (x *CertificateRevocationList) GetRevokedCertificates() []*CertificateRevocationList_RevokedCertificate { - if x != nil { - return x.RevokedCertificates - } - return nil -} - -func (x *CertificateRevocationList) GetPemCrl() string { - if x != nil { - return x.PemCrl - } - return "" -} - -func (x *CertificateRevocationList) GetAccessUrl() string { - if x != nil { - return x.AccessUrl - } - return "" -} - -func (x *CertificateRevocationList) GetState() CertificateRevocationList_State { - if x != nil { - return x.State - } - return CertificateRevocationList_STATE_UNSPECIFIED -} - -func (x *CertificateRevocationList) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *CertificateRevocationList) GetUpdateTime() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTime - } - return nil -} - -func (x *CertificateRevocationList) GetRevisionId() string { - if x != nil { - return x.RevisionId - } - return "" -} - -func (x *CertificateRevocationList) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// A [Certificate][google.cloud.security.privateca.v1.Certificate] corresponds to a signed X.509 certificate issued by a -// [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. -type Certificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The resource name for this [Certificate][google.cloud.security.privateca.v1.Certificate] in the format - // `projects/*/locations/*/caPools/*/certificates/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The config used to create a signed X.509 certificate. - // - // Types that are assignable to CertificateConfig: - // *Certificate_PemCsr - // *Certificate_Config - CertificateConfig isCertificate_CertificateConfig `protobuf_oneof:"certificate_config"` - // Output only. The resource name of the issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - IssuerCertificateAuthority string `protobuf:"bytes,4,opt,name=issuer_certificate_authority,json=issuerCertificateAuthority,proto3" json:"issuer_certificate_authority,omitempty"` - // Required. Immutable. The desired lifetime of a certificate. Used to create the - // "not_before_time" and "not_after_time" fields inside an X.509 - // certificate. Note that the lifetime may be truncated if it would extend - // past the life of any certificate authority in the issuing chain. - Lifetime *durationpb.Duration `protobuf:"bytes,5,opt,name=lifetime,proto3" json:"lifetime,omitempty"` - // Immutable. The resource name for a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] used to issue this - // certificate, in the format - // `projects/*/locations/*/certificateTemplates/*`. - // If this is specified, the caller must have the necessary permission to - // use this template. If this is omitted, no template will be used. - // This template must be in the same location as the [Certificate][google.cloud.security.privateca.v1.Certificate]. - CertificateTemplate string `protobuf:"bytes,6,opt,name=certificate_template,json=certificateTemplate,proto3" json:"certificate_template,omitempty"` - // Immutable. Specifies how the [Certificate][google.cloud.security.privateca.v1.Certificate]'s identity fields are to be decided. - // If this is omitted, the `DEFAULT` subject mode will be used. - SubjectMode SubjectRequestMode `protobuf:"varint,7,opt,name=subject_mode,json=subjectMode,proto3,enum=google.cloud.security.privateca.v1.SubjectRequestMode" json:"subject_mode,omitempty"` - // Output only. Details regarding the revocation of this [Certificate][google.cloud.security.privateca.v1.Certificate]. This - // [Certificate][google.cloud.security.privateca.v1.Certificate] is considered revoked if and only if this field is present. - RevocationDetails *Certificate_RevocationDetails `protobuf:"bytes,8,opt,name=revocation_details,json=revocationDetails,proto3" json:"revocation_details,omitempty"` - // Output only. The pem-encoded, signed X.509 certificate. - PemCertificate string `protobuf:"bytes,9,opt,name=pem_certificate,json=pemCertificate,proto3" json:"pem_certificate,omitempty"` - // Output only. A structured description of the issued X.509 certificate. - CertificateDescription *CertificateDescription `protobuf:"bytes,10,opt,name=certificate_description,json=certificateDescription,proto3" json:"certificate_description,omitempty"` - // Output only. The chain that may be used to verify the X.509 certificate. Expected to be - // in issuer-to-root order according to RFC 5246. - PemCertificateChain []string `protobuf:"bytes,11,rep,name=pem_certificate_chain,json=pemCertificateChain,proto3" json:"pem_certificate_chain,omitempty"` - // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was created. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was updated. - UpdateTime *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // Optional. Labels with user-defined metadata. - Labels map[string]string `protobuf:"bytes,14,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Certificate) Reset() { - *x = Certificate{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Certificate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Certificate) ProtoMessage() {} - -func (x *Certificate) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Certificate.ProtoReflect.Descriptor instead. -func (*Certificate) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{3} -} - -func (x *Certificate) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (m *Certificate) GetCertificateConfig() isCertificate_CertificateConfig { - if m != nil { - return m.CertificateConfig - } - return nil -} - -func (x *Certificate) GetPemCsr() string { - if x, ok := x.GetCertificateConfig().(*Certificate_PemCsr); ok { - return x.PemCsr - } - return "" -} - -func (x *Certificate) GetConfig() *CertificateConfig { - if x, ok := x.GetCertificateConfig().(*Certificate_Config); ok { - return x.Config - } - return nil -} - -func (x *Certificate) GetIssuerCertificateAuthority() string { - if x != nil { - return x.IssuerCertificateAuthority - } - return "" -} - -func (x *Certificate) GetLifetime() *durationpb.Duration { - if x != nil { - return x.Lifetime - } - return nil -} - -func (x *Certificate) GetCertificateTemplate() string { - if x != nil { - return x.CertificateTemplate - } - return "" -} - -func (x *Certificate) GetSubjectMode() SubjectRequestMode { - if x != nil { - return x.SubjectMode - } - return SubjectRequestMode_SUBJECT_REQUEST_MODE_UNSPECIFIED -} - -func (x *Certificate) GetRevocationDetails() *Certificate_RevocationDetails { - if x != nil { - return x.RevocationDetails - } - return nil -} - -func (x *Certificate) GetPemCertificate() string { - if x != nil { - return x.PemCertificate - } - return "" -} - -func (x *Certificate) GetCertificateDescription() *CertificateDescription { - if x != nil { - return x.CertificateDescription - } - return nil -} - -func (x *Certificate) GetPemCertificateChain() []string { - if x != nil { - return x.PemCertificateChain - } - return nil -} - -func (x *Certificate) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *Certificate) GetUpdateTime() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTime - } - return nil -} - -func (x *Certificate) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -type isCertificate_CertificateConfig interface { - isCertificate_CertificateConfig() -} - -type Certificate_PemCsr struct { - // Immutable. A pem-encoded X.509 certificate signing request (CSR). - PemCsr string `protobuf:"bytes,2,opt,name=pem_csr,json=pemCsr,proto3,oneof"` -} - -type Certificate_Config struct { - // Immutable. A description of the certificate and key that does not require X.509 or - // ASN.1. - Config *CertificateConfig `protobuf:"bytes,3,opt,name=config,proto3,oneof"` -} - -func (*Certificate_PemCsr) isCertificate_CertificateConfig() {} - -func (*Certificate_Config) isCertificate_CertificateConfig() {} - -// A [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] refers to a managed template for certificate -// issuance. -type CertificateTemplate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The resource name for this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] in the format - // `projects/*/locations/*/certificateTemplates/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. A set of X.509 values that will be applied to all issued certificates that - // use this template. If the certificate request includes conflicting values - // for the same properties, they will be overwritten by the values defined - // here. If the issuing [CaPool][google.cloud.security.privateca.v1.CaPool]'s [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] - // defines conflicting - // [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values] for the same - // properties, the certificate issuance request will fail. - PredefinedValues *X509Parameters `protobuf:"bytes,2,opt,name=predefined_values,json=predefinedValues,proto3" json:"predefined_values,omitempty"` - // Optional. Describes constraints on identities that may be appear in - // [Certificates][google.cloud.security.privateca.v1.Certificate] issued using this template. If this is omitted, - // then this template will not add restrictions on a certificate's identity. - IdentityConstraints *CertificateIdentityConstraints `protobuf:"bytes,3,opt,name=identity_constraints,json=identityConstraints,proto3" json:"identity_constraints,omitempty"` - // Optional. Describes the set of X.509 extensions that may appear in a - // [Certificate][google.cloud.security.privateca.v1.Certificate] issued using this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]. If a certificate - // request sets extensions that don't appear in the - // [passthrough_extensions][google.cloud.security.privateca.v1.CertificateTemplate.passthrough_extensions], those extensions will be dropped. If the - // issuing [CaPool][google.cloud.security.privateca.v1.CaPool]'s [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] defines - // [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values] that don't appear - // here, the certificate issuance request will fail. If this is omitted, then - // this template will not add restrictions on a certificate's X.509 - // extensions. These constraints do not apply to X.509 extensions set in this - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]'s [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values]. - PassthroughExtensions *CertificateExtensionConstraints `protobuf:"bytes,4,opt,name=passthrough_extensions,json=passthroughExtensions,proto3" json:"passthrough_extensions,omitempty"` - // Optional. A human-readable description of scenarios this template is intended for. - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - // Output only. The time at which this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] was created. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // Output only. The time at which this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] was updated. - UpdateTime *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` - // Optional. Labels with user-defined metadata. - Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *CertificateTemplate) Reset() { - *x = CertificateTemplate{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateTemplate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateTemplate) ProtoMessage() {} - -func (x *CertificateTemplate) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateTemplate.ProtoReflect.Descriptor instead. -func (*CertificateTemplate) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{4} -} - -func (x *CertificateTemplate) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *CertificateTemplate) GetPredefinedValues() *X509Parameters { - if x != nil { - return x.PredefinedValues - } - return nil -} - -func (x *CertificateTemplate) GetIdentityConstraints() *CertificateIdentityConstraints { - if x != nil { - return x.IdentityConstraints - } - return nil -} - -func (x *CertificateTemplate) GetPassthroughExtensions() *CertificateExtensionConstraints { - if x != nil { - return x.PassthroughExtensions - } - return nil -} - -func (x *CertificateTemplate) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *CertificateTemplate) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *CertificateTemplate) GetUpdateTime() *timestamppb.Timestamp { - if x != nil { - return x.UpdateTime - } - return nil -} - -func (x *CertificateTemplate) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// An [X509Parameters][google.cloud.security.privateca.v1.X509Parameters] is used to describe certain fields of an -// X.509 certificate, such as the key usage fields, fields specific to CA -// certificates, certificate policy extensions and custom extensions. -type X509Parameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. Indicates the intended use for keys that correspond to a certificate. - KeyUsage *KeyUsage `protobuf:"bytes,1,opt,name=key_usage,json=keyUsage,proto3" json:"key_usage,omitempty"` - // Optional. Describes options in this [X509Parameters][google.cloud.security.privateca.v1.X509Parameters] that are relevant in a CA - // certificate. - CaOptions *X509Parameters_CaOptions `protobuf:"bytes,2,opt,name=ca_options,json=caOptions,proto3" json:"ca_options,omitempty"` - // Optional. Describes the X.509 certificate policy object identifiers, per - // https://tools.ietf.org/html/rfc5280#section-4.2.1.4. - PolicyIds []*ObjectId `protobuf:"bytes,3,rep,name=policy_ids,json=policyIds,proto3" json:"policy_ids,omitempty"` - // Optional. Describes Online Certificate Status Protocol (OCSP) endpoint addresses - // that appear in the "Authority Information Access" extension in the - // certificate. - AiaOcspServers []string `protobuf:"bytes,4,rep,name=aia_ocsp_servers,json=aiaOcspServers,proto3" json:"aia_ocsp_servers,omitempty"` - // Optional. Describes custom X.509 extensions. - AdditionalExtensions []*X509Extension `protobuf:"bytes,5,rep,name=additional_extensions,json=additionalExtensions,proto3" json:"additional_extensions,omitempty"` -} - -func (x *X509Parameters) Reset() { - *x = X509Parameters{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *X509Parameters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*X509Parameters) ProtoMessage() {} - -func (x *X509Parameters) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use X509Parameters.ProtoReflect.Descriptor instead. -func (*X509Parameters) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{5} -} - -func (x *X509Parameters) GetKeyUsage() *KeyUsage { - if x != nil { - return x.KeyUsage - } - return nil -} - -func (x *X509Parameters) GetCaOptions() *X509Parameters_CaOptions { - if x != nil { - return x.CaOptions - } - return nil -} - -func (x *X509Parameters) GetPolicyIds() []*ObjectId { - if x != nil { - return x.PolicyIds - } - return nil -} - -func (x *X509Parameters) GetAiaOcspServers() []string { - if x != nil { - return x.AiaOcspServers - } - return nil -} - -func (x *X509Parameters) GetAdditionalExtensions() []*X509Extension { - if x != nil { - return x.AdditionalExtensions - } - return nil -} - -// Describes a subordinate CA's issuers. This is either a resource name to a -// known issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], or a PEM issuer certificate chain. -type SubordinateConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to SubordinateConfig: - // *SubordinateConfig_CertificateAuthority - // *SubordinateConfig_PemIssuerChain - SubordinateConfig isSubordinateConfig_SubordinateConfig `protobuf_oneof:"subordinate_config"` -} - -func (x *SubordinateConfig) Reset() { - *x = SubordinateConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubordinateConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubordinateConfig) ProtoMessage() {} - -func (x *SubordinateConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubordinateConfig.ProtoReflect.Descriptor instead. -func (*SubordinateConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{6} -} - -func (m *SubordinateConfig) GetSubordinateConfig() isSubordinateConfig_SubordinateConfig { - if m != nil { - return m.SubordinateConfig - } - return nil -} - -func (x *SubordinateConfig) GetCertificateAuthority() string { - if x, ok := x.GetSubordinateConfig().(*SubordinateConfig_CertificateAuthority); ok { - return x.CertificateAuthority - } - return "" -} - -func (x *SubordinateConfig) GetPemIssuerChain() *SubordinateConfig_SubordinateConfigChain { - if x, ok := x.GetSubordinateConfig().(*SubordinateConfig_PemIssuerChain); ok { - return x.PemIssuerChain - } - return nil -} - -type isSubordinateConfig_SubordinateConfig interface { - isSubordinateConfig_SubordinateConfig() -} - -type SubordinateConfig_CertificateAuthority struct { - // Required. This can refer to a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that was used to create a - // subordinate [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. This field is used for information - // and usability purposes only. The resource name is in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - CertificateAuthority string `protobuf:"bytes,1,opt,name=certificate_authority,json=certificateAuthority,proto3,oneof"` -} - -type SubordinateConfig_PemIssuerChain struct { - // Required. Contains the PEM certificate chain for the issuers of this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], but not pem certificate for this CA itself. - PemIssuerChain *SubordinateConfig_SubordinateConfigChain `protobuf:"bytes,2,opt,name=pem_issuer_chain,json=pemIssuerChain,proto3,oneof"` -} - -func (*SubordinateConfig_CertificateAuthority) isSubordinateConfig_SubordinateConfig() {} - -func (*SubordinateConfig_PemIssuerChain) isSubordinateConfig_SubordinateConfig() {} - -// A [PublicKey][google.cloud.security.privateca.v1.PublicKey] describes a public key. -type PublicKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. A public key. The padding and encoding - // must match with the `KeyFormat` value specified for the `format` field. - Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // Required. The format of the public key. - Format PublicKey_KeyFormat `protobuf:"varint,2,opt,name=format,proto3,enum=google.cloud.security.privateca.v1.PublicKey_KeyFormat" json:"format,omitempty"` -} - -func (x *PublicKey) Reset() { - *x = PublicKey{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PublicKey) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PublicKey) ProtoMessage() {} - -func (x *PublicKey) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PublicKey.ProtoReflect.Descriptor instead. -func (*PublicKey) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{7} -} - -func (x *PublicKey) GetKey() []byte { - if x != nil { - return x.Key - } - return nil -} - -func (x *PublicKey) GetFormat() PublicKey_KeyFormat { - if x != nil { - return x.Format - } - return PublicKey_KEY_FORMAT_UNSPECIFIED -} - -// A [CertificateConfig][google.cloud.security.privateca.v1.CertificateConfig] describes an X.509 certificate or CSR that is to be -// created, as an alternative to using ASN.1. -type CertificateConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. Specifies some of the values in a certificate that are related to the - // subject. - SubjectConfig *CertificateConfig_SubjectConfig `protobuf:"bytes,1,opt,name=subject_config,json=subjectConfig,proto3" json:"subject_config,omitempty"` - // Required. Describes how some of the technical X.509 fields in a certificate should be - // populated. - X509Config *X509Parameters `protobuf:"bytes,2,opt,name=x509_config,json=x509Config,proto3" json:"x509_config,omitempty"` - // Optional. The public key that corresponds to this config. This is, for example, used - // when issuing [Certificates][google.cloud.security.privateca.v1.Certificate], but not when creating a - // self-signed [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] or [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] CSR. - PublicKey *PublicKey `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` -} - -func (x *CertificateConfig) Reset() { - *x = CertificateConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateConfig) ProtoMessage() {} - -func (x *CertificateConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateConfig.ProtoReflect.Descriptor instead. -func (*CertificateConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{8} -} - -func (x *CertificateConfig) GetSubjectConfig() *CertificateConfig_SubjectConfig { - if x != nil { - return x.SubjectConfig - } - return nil -} - -func (x *CertificateConfig) GetX509Config() *X509Parameters { - if x != nil { - return x.X509Config - } - return nil -} - -func (x *CertificateConfig) GetPublicKey() *PublicKey { - if x != nil { - return x.PublicKey - } - return nil -} - -// A [CertificateDescription][google.cloud.security.privateca.v1.CertificateDescription] describes an X.509 certificate or CSR that has -// been issued, as an alternative to using ASN.1 / X.509. -type CertificateDescription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Describes some of the values in a certificate that are related to the - // subject and lifetime. - SubjectDescription *CertificateDescription_SubjectDescription `protobuf:"bytes,1,opt,name=subject_description,json=subjectDescription,proto3" json:"subject_description,omitempty"` - // Describes some of the technical X.509 fields in a certificate. - X509Description *X509Parameters `protobuf:"bytes,2,opt,name=x509_description,json=x509Description,proto3" json:"x509_description,omitempty"` - // The public key that corresponds to an issued certificate. - PublicKey *PublicKey `protobuf:"bytes,3,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` - // Provides a means of identifiying certificates that contain a particular - // public key, per https://tools.ietf.org/html/rfc5280#section-4.2.1.2. - SubjectKeyId *CertificateDescription_KeyId `protobuf:"bytes,4,opt,name=subject_key_id,json=subjectKeyId,proto3" json:"subject_key_id,omitempty"` - // Identifies the subject_key_id of the parent certificate, per - // https://tools.ietf.org/html/rfc5280#section-4.2.1.1 - AuthorityKeyId *CertificateDescription_KeyId `protobuf:"bytes,5,opt,name=authority_key_id,json=authorityKeyId,proto3" json:"authority_key_id,omitempty"` - // Describes a list of locations to obtain CRL information, i.e. - // the DistributionPoint.fullName described by - // https://tools.ietf.org/html/rfc5280#section-4.2.1.13 - CrlDistributionPoints []string `protobuf:"bytes,6,rep,name=crl_distribution_points,json=crlDistributionPoints,proto3" json:"crl_distribution_points,omitempty"` - // Describes lists of issuer CA certificate URLs that appear in the - // "Authority Information Access" extension in the certificate. - AiaIssuingCertificateUrls []string `protobuf:"bytes,7,rep,name=aia_issuing_certificate_urls,json=aiaIssuingCertificateUrls,proto3" json:"aia_issuing_certificate_urls,omitempty"` - // The hash of the x.509 certificate. - CertFingerprint *CertificateDescription_CertificateFingerprint `protobuf:"bytes,8,opt,name=cert_fingerprint,json=certFingerprint,proto3" json:"cert_fingerprint,omitempty"` -} - -func (x *CertificateDescription) Reset() { - *x = CertificateDescription{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateDescription) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateDescription) ProtoMessage() {} - -func (x *CertificateDescription) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateDescription.ProtoReflect.Descriptor instead. -func (*CertificateDescription) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{9} -} - -func (x *CertificateDescription) GetSubjectDescription() *CertificateDescription_SubjectDescription { - if x != nil { - return x.SubjectDescription - } - return nil -} - -func (x *CertificateDescription) GetX509Description() *X509Parameters { - if x != nil { - return x.X509Description - } - return nil -} - -func (x *CertificateDescription) GetPublicKey() *PublicKey { - if x != nil { - return x.PublicKey - } - return nil -} - -func (x *CertificateDescription) GetSubjectKeyId() *CertificateDescription_KeyId { - if x != nil { - return x.SubjectKeyId - } - return nil -} - -func (x *CertificateDescription) GetAuthorityKeyId() *CertificateDescription_KeyId { - if x != nil { - return x.AuthorityKeyId - } - return nil -} - -func (x *CertificateDescription) GetCrlDistributionPoints() []string { - if x != nil { - return x.CrlDistributionPoints - } - return nil -} - -func (x *CertificateDescription) GetAiaIssuingCertificateUrls() []string { - if x != nil { - return x.AiaIssuingCertificateUrls - } - return nil -} - -func (x *CertificateDescription) GetCertFingerprint() *CertificateDescription_CertificateFingerprint { - if x != nil { - return x.CertFingerprint - } - return nil -} - -// An [ObjectId][google.cloud.security.privateca.v1.ObjectId] specifies an object identifier (OID). These provide context -// and describe types in ASN.1 messages. -type ObjectId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The parts of an OID path. The most significant parts of the path come - // first. - ObjectIdPath []int32 `protobuf:"varint,1,rep,packed,name=object_id_path,json=objectIdPath,proto3" json:"object_id_path,omitempty"` -} - -func (x *ObjectId) Reset() { - *x = ObjectId{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ObjectId) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ObjectId) ProtoMessage() {} - -func (x *ObjectId) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ObjectId.ProtoReflect.Descriptor instead. -func (*ObjectId) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{10} -} - -func (x *ObjectId) GetObjectIdPath() []int32 { - if x != nil { - return x.ObjectIdPath - } - return nil -} - -// An [X509Extension][google.cloud.security.privateca.v1.X509Extension] specifies an X.509 extension, which may be used in -// different parts of X.509 objects like certificates, CSRs, and CRLs. -type X509Extension struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The OID for this X.509 extension. - ObjectId *ObjectId `protobuf:"bytes,1,opt,name=object_id,json=objectId,proto3" json:"object_id,omitempty"` - // Optional. Indicates whether or not this extension is critical (i.e., if the client - // does not know how to handle this extension, the client should consider this - // to be an error). - Critical bool `protobuf:"varint,2,opt,name=critical,proto3" json:"critical,omitempty"` - // Required. The value of this X.509 extension. - Value []byte `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *X509Extension) Reset() { - *x = X509Extension{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *X509Extension) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*X509Extension) ProtoMessage() {} - -func (x *X509Extension) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use X509Extension.ProtoReflect.Descriptor instead. -func (*X509Extension) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{11} -} - -func (x *X509Extension) GetObjectId() *ObjectId { - if x != nil { - return x.ObjectId - } - return nil -} - -func (x *X509Extension) GetCritical() bool { - if x != nil { - return x.Critical - } - return false -} - -func (x *X509Extension) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -// A [KeyUsage][google.cloud.security.privateca.v1.KeyUsage] describes key usage values that may appear in an X.509 -// certificate. -type KeyUsage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Describes high-level ways in which a key may be used. - BaseKeyUsage *KeyUsage_KeyUsageOptions `protobuf:"bytes,1,opt,name=base_key_usage,json=baseKeyUsage,proto3" json:"base_key_usage,omitempty"` - // Detailed scenarios in which a key may be used. - ExtendedKeyUsage *KeyUsage_ExtendedKeyUsageOptions `protobuf:"bytes,2,opt,name=extended_key_usage,json=extendedKeyUsage,proto3" json:"extended_key_usage,omitempty"` - // Used to describe extended key usages that are not listed in the - // [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions] message. - UnknownExtendedKeyUsages []*ObjectId `protobuf:"bytes,3,rep,name=unknown_extended_key_usages,json=unknownExtendedKeyUsages,proto3" json:"unknown_extended_key_usages,omitempty"` -} - -func (x *KeyUsage) Reset() { - *x = KeyUsage{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyUsage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyUsage) ProtoMessage() {} - -func (x *KeyUsage) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeyUsage.ProtoReflect.Descriptor instead. -func (*KeyUsage) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{12} -} - -func (x *KeyUsage) GetBaseKeyUsage() *KeyUsage_KeyUsageOptions { - if x != nil { - return x.BaseKeyUsage - } - return nil -} - -func (x *KeyUsage) GetExtendedKeyUsage() *KeyUsage_ExtendedKeyUsageOptions { - if x != nil { - return x.ExtendedKeyUsage - } - return nil -} - -func (x *KeyUsage) GetUnknownExtendedKeyUsages() []*ObjectId { - if x != nil { - return x.UnknownExtendedKeyUsages - } - return nil -} - -// [Subject][google.cloud.security.privateca.v1.Subject] describes parts of a distinguished name that, in turn, -// describes the subject of the certificate. -type Subject struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The "common name" of the subject. - CommonName string `protobuf:"bytes,1,opt,name=common_name,json=commonName,proto3" json:"common_name,omitempty"` - // The country code of the subject. - CountryCode string `protobuf:"bytes,2,opt,name=country_code,json=countryCode,proto3" json:"country_code,omitempty"` - // The organization of the subject. - Organization string `protobuf:"bytes,3,opt,name=organization,proto3" json:"organization,omitempty"` - // The organizational_unit of the subject. - OrganizationalUnit string `protobuf:"bytes,4,opt,name=organizational_unit,json=organizationalUnit,proto3" json:"organizational_unit,omitempty"` - // The locality or city of the subject. - Locality string `protobuf:"bytes,5,opt,name=locality,proto3" json:"locality,omitempty"` - // The province, territory, or regional state of the subject. - Province string `protobuf:"bytes,6,opt,name=province,proto3" json:"province,omitempty"` - // The street address of the subject. - StreetAddress string `protobuf:"bytes,7,opt,name=street_address,json=streetAddress,proto3" json:"street_address,omitempty"` - // The postal code of the subject. - PostalCode string `protobuf:"bytes,8,opt,name=postal_code,json=postalCode,proto3" json:"postal_code,omitempty"` -} - -func (x *Subject) Reset() { - *x = Subject{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Subject) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Subject) ProtoMessage() {} - -func (x *Subject) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Subject.ProtoReflect.Descriptor instead. -func (*Subject) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{13} -} - -func (x *Subject) GetCommonName() string { - if x != nil { - return x.CommonName - } - return "" -} - -func (x *Subject) GetCountryCode() string { - if x != nil { - return x.CountryCode - } - return "" -} - -func (x *Subject) GetOrganization() string { - if x != nil { - return x.Organization - } - return "" -} - -func (x *Subject) GetOrganizationalUnit() string { - if x != nil { - return x.OrganizationalUnit - } - return "" -} - -func (x *Subject) GetLocality() string { - if x != nil { - return x.Locality - } - return "" -} - -func (x *Subject) GetProvince() string { - if x != nil { - return x.Province - } - return "" -} - -func (x *Subject) GetStreetAddress() string { - if x != nil { - return x.StreetAddress - } - return "" -} - -func (x *Subject) GetPostalCode() string { - if x != nil { - return x.PostalCode - } - return "" -} - -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] corresponds to a more modern way of listing what -// the asserted identity is in a certificate (i.e., compared to the "common -// name" in the distinguished name). -type SubjectAltNames struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Contains only valid, fully-qualified host names. - DnsNames []string `protobuf:"bytes,1,rep,name=dns_names,json=dnsNames,proto3" json:"dns_names,omitempty"` - // Contains only valid RFC 3986 URIs. - Uris []string `protobuf:"bytes,2,rep,name=uris,proto3" json:"uris,omitempty"` - // Contains only valid RFC 2822 E-mail addresses. - EmailAddresses []string `protobuf:"bytes,3,rep,name=email_addresses,json=emailAddresses,proto3" json:"email_addresses,omitempty"` - // Contains only valid 32-bit IPv4 addresses or RFC 4291 IPv6 addresses. - IpAddresses []string `protobuf:"bytes,4,rep,name=ip_addresses,json=ipAddresses,proto3" json:"ip_addresses,omitempty"` - // Contains additional subject alternative name values. - // For each custom_san, the `value` field must contain an ASN.1 encoded - // UTF8String. - CustomSans []*X509Extension `protobuf:"bytes,5,rep,name=custom_sans,json=customSans,proto3" json:"custom_sans,omitempty"` -} - -func (x *SubjectAltNames) Reset() { - *x = SubjectAltNames{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubjectAltNames) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubjectAltNames) ProtoMessage() {} - -func (x *SubjectAltNames) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubjectAltNames.ProtoReflect.Descriptor instead. -func (*SubjectAltNames) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{14} -} - -func (x *SubjectAltNames) GetDnsNames() []string { - if x != nil { - return x.DnsNames - } - return nil -} - -func (x *SubjectAltNames) GetUris() []string { - if x != nil { - return x.Uris - } - return nil -} - -func (x *SubjectAltNames) GetEmailAddresses() []string { - if x != nil { - return x.EmailAddresses - } - return nil -} - -func (x *SubjectAltNames) GetIpAddresses() []string { - if x != nil { - return x.IpAddresses - } - return nil -} - -func (x *SubjectAltNames) GetCustomSans() []*X509Extension { - if x != nil { - return x.CustomSans - } - return nil -} - -// Describes constraints on a [Certificate][google.cloud.security.privateca.v1.Certificate]'s [Subject][google.cloud.security.privateca.v1.Subject] and -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames]. -type CertificateIdentityConstraints struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. A CEL expression that may be used to validate the resolved X.509 Subject - // and/or Subject Alternative Name before a certificate is signed. - // To see the full allowed syntax and some examples, see - // https://cloud.google.com/certificate-authority-service/docs/using-cel - CelExpression *expr.Expr `protobuf:"bytes,1,opt,name=cel_expression,json=celExpression,proto3" json:"cel_expression,omitempty"` - // Required. If this is true, the [Subject][google.cloud.security.privateca.v1.Subject] field may be copied from a certificate - // request into the signed certificate. Otherwise, the requested [Subject][google.cloud.security.privateca.v1.Subject] - // will be discarded. - AllowSubjectPassthrough *bool `protobuf:"varint,2,opt,name=allow_subject_passthrough,json=allowSubjectPassthrough,proto3,oneof" json:"allow_subject_passthrough,omitempty"` - // Required. If this is true, the [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] extension may be copied from a - // certificate request into the signed certificate. Otherwise, the requested - // [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] will be discarded. - AllowSubjectAltNamesPassthrough *bool `protobuf:"varint,3,opt,name=allow_subject_alt_names_passthrough,json=allowSubjectAltNamesPassthrough,proto3,oneof" json:"allow_subject_alt_names_passthrough,omitempty"` -} - -func (x *CertificateIdentityConstraints) Reset() { - *x = CertificateIdentityConstraints{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateIdentityConstraints) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateIdentityConstraints) ProtoMessage() {} - -func (x *CertificateIdentityConstraints) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateIdentityConstraints.ProtoReflect.Descriptor instead. -func (*CertificateIdentityConstraints) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{15} -} - -func (x *CertificateIdentityConstraints) GetCelExpression() *expr.Expr { - if x != nil { - return x.CelExpression - } - return nil -} - -func (x *CertificateIdentityConstraints) GetAllowSubjectPassthrough() bool { - if x != nil && x.AllowSubjectPassthrough != nil { - return *x.AllowSubjectPassthrough - } - return false -} - -func (x *CertificateIdentityConstraints) GetAllowSubjectAltNamesPassthrough() bool { - if x != nil && x.AllowSubjectAltNamesPassthrough != nil { - return *x.AllowSubjectAltNamesPassthrough - } - return false -} - -// Describes a set of X.509 extensions that may be part of some certificate -// issuance controls. -type CertificateExtensionConstraints struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. A set of named X.509 extensions. Will be combined with - // [additional_extensions][google.cloud.security.privateca.v1.CertificateExtensionConstraints.additional_extensions] to determine the full set of X.509 extensions. - KnownExtensions []CertificateExtensionConstraints_KnownCertificateExtension `protobuf:"varint,1,rep,packed,name=known_extensions,json=knownExtensions,proto3,enum=google.cloud.security.privateca.v1.CertificateExtensionConstraints_KnownCertificateExtension" json:"known_extensions,omitempty"` - // Optional. A set of [ObjectIds][google.cloud.security.privateca.v1.ObjectId] identifying custom X.509 extensions. - // Will be combined with [known_extensions][google.cloud.security.privateca.v1.CertificateExtensionConstraints.known_extensions] to determine the full set of - // X.509 extensions. - AdditionalExtensions []*ObjectId `protobuf:"bytes,2,rep,name=additional_extensions,json=additionalExtensions,proto3" json:"additional_extensions,omitempty"` -} - -func (x *CertificateExtensionConstraints) Reset() { - *x = CertificateExtensionConstraints{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateExtensionConstraints) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateExtensionConstraints) ProtoMessage() {} - -func (x *CertificateExtensionConstraints) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateExtensionConstraints.ProtoReflect.Descriptor instead. -func (*CertificateExtensionConstraints) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{16} -} - -func (x *CertificateExtensionConstraints) GetKnownExtensions() []CertificateExtensionConstraints_KnownCertificateExtension { - if x != nil { - return x.KnownExtensions - } - return nil -} - -func (x *CertificateExtensionConstraints) GetAdditionalExtensions() []*ObjectId { - if x != nil { - return x.AdditionalExtensions - } - return nil -} - -// URLs where a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will publish content. -type CertificateAuthority_AccessUrls struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The URL where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate is - // published. This will only be set for CAs that have been activated. - CaCertificateAccessUrl string `protobuf:"bytes,1,opt,name=ca_certificate_access_url,json=caCertificateAccessUrl,proto3" json:"ca_certificate_access_url,omitempty"` - // The URLs where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CRLs are published. This - // will only be set for CAs that have been activated. - CrlAccessUrls []string `protobuf:"bytes,2,rep,name=crl_access_urls,json=crlAccessUrls,proto3" json:"crl_access_urls,omitempty"` -} - -func (x *CertificateAuthority_AccessUrls) Reset() { - *x = CertificateAuthority_AccessUrls{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateAuthority_AccessUrls) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateAuthority_AccessUrls) ProtoMessage() {} - -func (x *CertificateAuthority_AccessUrls) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateAuthority_AccessUrls.ProtoReflect.Descriptor instead. -func (*CertificateAuthority_AccessUrls) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *CertificateAuthority_AccessUrls) GetCaCertificateAccessUrl() string { - if x != nil { - return x.CaCertificateAccessUrl - } - return "" -} - -func (x *CertificateAuthority_AccessUrls) GetCrlAccessUrls() []string { - if x != nil { - return x.CrlAccessUrls - } - return nil -} - -// A Cloud KMS key configuration that a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will use. -type CertificateAuthority_KeyVersionSpec struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to KeyVersion: - // *CertificateAuthority_KeyVersionSpec_CloudKmsKeyVersion - // *CertificateAuthority_KeyVersionSpec_Algorithm - KeyVersion isCertificateAuthority_KeyVersionSpec_KeyVersion `protobuf_oneof:"KeyVersion"` -} - -func (x *CertificateAuthority_KeyVersionSpec) Reset() { - *x = CertificateAuthority_KeyVersionSpec{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateAuthority_KeyVersionSpec) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateAuthority_KeyVersionSpec) ProtoMessage() {} - -func (x *CertificateAuthority_KeyVersionSpec) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateAuthority_KeyVersionSpec.ProtoReflect.Descriptor instead. -func (*CertificateAuthority_KeyVersionSpec) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{0, 1} -} - -func (m *CertificateAuthority_KeyVersionSpec) GetKeyVersion() isCertificateAuthority_KeyVersionSpec_KeyVersion { - if m != nil { - return m.KeyVersion - } - return nil -} - -func (x *CertificateAuthority_KeyVersionSpec) GetCloudKmsKeyVersion() string { - if x, ok := x.GetKeyVersion().(*CertificateAuthority_KeyVersionSpec_CloudKmsKeyVersion); ok { - return x.CloudKmsKeyVersion - } - return "" -} - -func (x *CertificateAuthority_KeyVersionSpec) GetAlgorithm() CertificateAuthority_SignHashAlgorithm { - if x, ok := x.GetKeyVersion().(*CertificateAuthority_KeyVersionSpec_Algorithm); ok { - return x.Algorithm - } - return CertificateAuthority_SIGN_HASH_ALGORITHM_UNSPECIFIED -} - -type isCertificateAuthority_KeyVersionSpec_KeyVersion interface { - isCertificateAuthority_KeyVersionSpec_KeyVersion() -} - -type CertificateAuthority_KeyVersionSpec_CloudKmsKeyVersion struct { - // The resource name for an existing Cloud KMS CryptoKeyVersion in the - // format - // `projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`. - // This option enables full flexibility in the key's capabilities and - // properties. - CloudKmsKeyVersion string `protobuf:"bytes,1,opt,name=cloud_kms_key_version,json=cloudKmsKeyVersion,proto3,oneof"` -} - -type CertificateAuthority_KeyVersionSpec_Algorithm struct { - // The algorithm to use for creating a managed Cloud KMS key for a for a - // simplified experience. All managed keys will be have their - // [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] as `HSM`. - Algorithm CertificateAuthority_SignHashAlgorithm `protobuf:"varint,2,opt,name=algorithm,proto3,enum=google.cloud.security.privateca.v1.CertificateAuthority_SignHashAlgorithm,oneof"` -} - -func (*CertificateAuthority_KeyVersionSpec_CloudKmsKeyVersion) isCertificateAuthority_KeyVersionSpec_KeyVersion() { -} - -func (*CertificateAuthority_KeyVersionSpec_Algorithm) isCertificateAuthority_KeyVersionSpec_KeyVersion() { -} - -// Options relating to the publication of each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA -// certificate and CRLs and their inclusion as extensions in issued -// [Certificates][google.cloud.security.privateca.v1.Certificate]. The options set here apply to certificates -// issued by any [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_PublishingOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. When true, publishes each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate and - // includes its URL in the "Authority Information Access" X.509 extension - // in all issued [Certificates][google.cloud.security.privateca.v1.Certificate]. If this is false, the CA - // certificate will not be published and the corresponding X.509 extension - // will not be written in issued certificates. - PublishCaCert bool `protobuf:"varint,1,opt,name=publish_ca_cert,json=publishCaCert,proto3" json:"publish_ca_cert,omitempty"` - // Optional. When true, publishes each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CRL and includes its - // URL in the "CRL Distribution Points" X.509 extension in all issued - // [Certificates][google.cloud.security.privateca.v1.Certificate]. If this is false, CRLs will not be published - // and the corresponding X.509 extension will not be written in issued - // certificates. - // CRLs will expire 7 days from their creation. However, we will rebuild - // daily. CRLs are also rebuilt shortly after a certificate is revoked. - PublishCrl bool `protobuf:"varint,2,opt,name=publish_crl,json=publishCrl,proto3" json:"publish_crl,omitempty"` -} - -func (x *CaPool_PublishingOptions) Reset() { - *x = CaPool_PublishingOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_PublishingOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_PublishingOptions) ProtoMessage() {} - -func (x *CaPool_PublishingOptions) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_PublishingOptions.ProtoReflect.Descriptor instead. -func (*CaPool_PublishingOptions) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *CaPool_PublishingOptions) GetPublishCaCert() bool { - if x != nil { - return x.PublishCaCert - } - return false -} - -func (x *CaPool_PublishingOptions) GetPublishCrl() bool { - if x != nil { - return x.PublishCrl - } - return false -} - -// Defines controls over all certificate issuance within a [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_IssuancePolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. If any [AllowedKeyType][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType] is specified, then the certificate request's - // public key must match one of the key types listed here. Otherwise, - // any key may be used. - AllowedKeyTypes []*CaPool_IssuancePolicy_AllowedKeyType `protobuf:"bytes,1,rep,name=allowed_key_types,json=allowedKeyTypes,proto3" json:"allowed_key_types,omitempty"` - // Optional. The maximum lifetime allowed for issued [Certificates][google.cloud.security.privateca.v1.Certificate]. Note - // that if the issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] expires before a - // [Certificate][google.cloud.security.privateca.v1.Certificate]'s requested maximum_lifetime, the effective lifetime will - // be explicitly truncated to match it. - MaximumLifetime *durationpb.Duration `protobuf:"bytes,2,opt,name=maximum_lifetime,json=maximumLifetime,proto3" json:"maximum_lifetime,omitempty"` - // Optional. If specified, then only methods allowed in the [IssuanceModes][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes] may be - // used to issue [Certificates][google.cloud.security.privateca.v1.Certificate]. - AllowedIssuanceModes *CaPool_IssuancePolicy_IssuanceModes `protobuf:"bytes,3,opt,name=allowed_issuance_modes,json=allowedIssuanceModes,proto3" json:"allowed_issuance_modes,omitempty"` - // Optional. A set of X.509 values that will be applied to all certificates issued - // through this [CaPool][google.cloud.security.privateca.v1.CaPool]. If a certificate request includes conflicting - // values for the same properties, they will be overwritten by the values - // defined here. If a certificate request uses a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] - // that defines conflicting - // [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values] for the same - // properties, the certificate issuance request will fail. - BaselineValues *X509Parameters `protobuf:"bytes,4,opt,name=baseline_values,json=baselineValues,proto3" json:"baseline_values,omitempty"` - // Optional. Describes constraints on identities that may appear in - // [Certificates][google.cloud.security.privateca.v1.Certificate] issued through this [CaPool][google.cloud.security.privateca.v1.CaPool]. - // If this is omitted, then this [CaPool][google.cloud.security.privateca.v1.CaPool] will not add restrictions on a - // certificate's identity. - IdentityConstraints *CertificateIdentityConstraints `protobuf:"bytes,5,opt,name=identity_constraints,json=identityConstraints,proto3" json:"identity_constraints,omitempty"` - // Optional. Describes the set of X.509 extensions that may appear in a - // [Certificate][google.cloud.security.privateca.v1.Certificate] issued through this [CaPool][google.cloud.security.privateca.v1.CaPool]. If a certificate request - // sets extensions that don't appear in the [passthrough_extensions][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.passthrough_extensions], - // those extensions will be dropped. If a certificate request uses a - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with - // [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values] that don't - // appear here, the certificate issuance request will fail. If this is - // omitted, then this [CaPool][google.cloud.security.privateca.v1.CaPool] will not add restrictions on a - // certificate's X.509 extensions. These constraints do not apply to X.509 - // extensions set in this [CaPool][google.cloud.security.privateca.v1.CaPool]'s [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values]. - PassthroughExtensions *CertificateExtensionConstraints `protobuf:"bytes,6,opt,name=passthrough_extensions,json=passthroughExtensions,proto3" json:"passthrough_extensions,omitempty"` -} - -func (x *CaPool_IssuancePolicy) Reset() { - *x = CaPool_IssuancePolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_IssuancePolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_IssuancePolicy) ProtoMessage() {} - -func (x *CaPool_IssuancePolicy) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_IssuancePolicy.ProtoReflect.Descriptor instead. -func (*CaPool_IssuancePolicy) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1} -} - -func (x *CaPool_IssuancePolicy) GetAllowedKeyTypes() []*CaPool_IssuancePolicy_AllowedKeyType { - if x != nil { - return x.AllowedKeyTypes - } - return nil -} - -func (x *CaPool_IssuancePolicy) GetMaximumLifetime() *durationpb.Duration { - if x != nil { - return x.MaximumLifetime - } - return nil -} - -func (x *CaPool_IssuancePolicy) GetAllowedIssuanceModes() *CaPool_IssuancePolicy_IssuanceModes { - if x != nil { - return x.AllowedIssuanceModes - } - return nil -} - -func (x *CaPool_IssuancePolicy) GetBaselineValues() *X509Parameters { - if x != nil { - return x.BaselineValues - } - return nil -} - -func (x *CaPool_IssuancePolicy) GetIdentityConstraints() *CertificateIdentityConstraints { - if x != nil { - return x.IdentityConstraints - } - return nil -} - -func (x *CaPool_IssuancePolicy) GetPassthroughExtensions() *CertificateExtensionConstraints { - if x != nil { - return x.PassthroughExtensions - } - return nil -} - -// Describes a "type" of key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued -// from a [CaPool][google.cloud.security.privateca.v1.CaPool]. -// Note that a single [AllowedKeyType][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType] may refer to either a -// fully-qualified key algorithm, such as RSA 4096, or a family of key -// algorithms, such as any RSA key. -type CaPool_IssuancePolicy_AllowedKeyType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to KeyType: - // *CaPool_IssuancePolicy_AllowedKeyType_Rsa - // *CaPool_IssuancePolicy_AllowedKeyType_EllipticCurve - KeyType isCaPool_IssuancePolicy_AllowedKeyType_KeyType `protobuf_oneof:"key_type"` -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType) Reset() { - *x = CaPool_IssuancePolicy_AllowedKeyType{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_IssuancePolicy_AllowedKeyType) ProtoMessage() {} - -func (x *CaPool_IssuancePolicy_AllowedKeyType) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_IssuancePolicy_AllowedKeyType.ProtoReflect.Descriptor instead. -func (*CaPool_IssuancePolicy_AllowedKeyType) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1, 0} -} - -func (m *CaPool_IssuancePolicy_AllowedKeyType) GetKeyType() isCaPool_IssuancePolicy_AllowedKeyType_KeyType { - if m != nil { - return m.KeyType - } - return nil -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType) GetRsa() *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType { - if x, ok := x.GetKeyType().(*CaPool_IssuancePolicy_AllowedKeyType_Rsa); ok { - return x.Rsa - } - return nil -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType) GetEllipticCurve() *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType { - if x, ok := x.GetKeyType().(*CaPool_IssuancePolicy_AllowedKeyType_EllipticCurve); ok { - return x.EllipticCurve - } - return nil -} - -type isCaPool_IssuancePolicy_AllowedKeyType_KeyType interface { - isCaPool_IssuancePolicy_AllowedKeyType_KeyType() -} - -type CaPool_IssuancePolicy_AllowedKeyType_Rsa struct { - // Represents an allowed RSA key type. - Rsa *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType `protobuf:"bytes,1,opt,name=rsa,proto3,oneof"` -} - -type CaPool_IssuancePolicy_AllowedKeyType_EllipticCurve struct { - // Represents an allowed Elliptic Curve key type. - EllipticCurve *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType `protobuf:"bytes,2,opt,name=elliptic_curve,json=ellipticCurve,proto3,oneof"` -} - -func (*CaPool_IssuancePolicy_AllowedKeyType_Rsa) isCaPool_IssuancePolicy_AllowedKeyType_KeyType() {} - -func (*CaPool_IssuancePolicy_AllowedKeyType_EllipticCurve) isCaPool_IssuancePolicy_AllowedKeyType_KeyType() { -} - -// [IssuanceModes][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes] specifies the allowed ways in which -// [Certificates][google.cloud.security.privateca.v1.Certificate] may be requested from this -// [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_IssuancePolicy_IssuanceModes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1.Certificate] by - // specifying a CSR. - AllowCsrBasedIssuance bool `protobuf:"varint,1,opt,name=allow_csr_based_issuance,json=allowCsrBasedIssuance,proto3" json:"allow_csr_based_issuance,omitempty"` - // Optional. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1.Certificate] by - // specifying a [CertificateConfig][google.cloud.security.privateca.v1.CertificateConfig]. - AllowConfigBasedIssuance bool `protobuf:"varint,2,opt,name=allow_config_based_issuance,json=allowConfigBasedIssuance,proto3" json:"allow_config_based_issuance,omitempty"` -} - -func (x *CaPool_IssuancePolicy_IssuanceModes) Reset() { - *x = CaPool_IssuancePolicy_IssuanceModes{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_IssuancePolicy_IssuanceModes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_IssuancePolicy_IssuanceModes) ProtoMessage() {} - -func (x *CaPool_IssuancePolicy_IssuanceModes) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_IssuancePolicy_IssuanceModes.ProtoReflect.Descriptor instead. -func (*CaPool_IssuancePolicy_IssuanceModes) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1, 1} -} - -func (x *CaPool_IssuancePolicy_IssuanceModes) GetAllowCsrBasedIssuance() bool { - if x != nil { - return x.AllowCsrBasedIssuance - } - return false -} - -func (x *CaPool_IssuancePolicy_IssuanceModes) GetAllowConfigBasedIssuance() bool { - if x != nil { - return x.AllowConfigBasedIssuance - } - return false -} - -// Describes an RSA key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued from -// a [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. The minimum allowed RSA modulus size (inclusive), in bits. If this is - // not set, or if set to zero, the service-level min RSA modulus size - // will continue to apply. - MinModulusSize int64 `protobuf:"varint,1,opt,name=min_modulus_size,json=minModulusSize,proto3" json:"min_modulus_size,omitempty"` - // Optional. The maximum allowed RSA modulus size (inclusive), in bits. If this is - // not set, or if set to zero, the service will not enforce an explicit - // upper bound on RSA modulus sizes. - MaxModulusSize int64 `protobuf:"varint,2,opt,name=max_modulus_size,json=maxModulusSize,proto3" json:"max_modulus_size,omitempty"` -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) Reset() { - *x = CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) ProtoMessage() {} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType.ProtoReflect.Descriptor instead. -func (*CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1, 0, 0} -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) GetMinModulusSize() int64 { - if x != nil { - return x.MinModulusSize - } - return 0 -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType) GetMaxModulusSize() int64 { - if x != nil { - return x.MaxModulusSize - } - return 0 -} - -// Describes an Elliptic Curve key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] -// issued from a [CaPool][google.cloud.security.privateca.v1.CaPool]. -type CaPool_IssuancePolicy_AllowedKeyType_EcKeyType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. A signature algorithm that must be used. If this is omitted, any - // EC-based signature algorithm will be allowed. - SignatureAlgorithm CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm `protobuf:"varint,1,opt,name=signature_algorithm,json=signatureAlgorithm,proto3,enum=google.cloud.security.privateca.v1.CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm" json:"signature_algorithm,omitempty"` -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) Reset() { - *x = CaPool_IssuancePolicy_AllowedKeyType_EcKeyType{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) ProtoMessage() {} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CaPool_IssuancePolicy_AllowedKeyType_EcKeyType.ProtoReflect.Descriptor instead. -func (*CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{1, 1, 0, 1} -} - -func (x *CaPool_IssuancePolicy_AllowedKeyType_EcKeyType) GetSignatureAlgorithm() CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm { - if x != nil { - return x.SignatureAlgorithm - } - return CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EC_SIGNATURE_ALGORITHM_UNSPECIFIED -} - -// Describes a revoked [Certificate][google.cloud.security.privateca.v1.Certificate]. -type CertificateRevocationList_RevokedCertificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The resource name for the [Certificate][google.cloud.security.privateca.v1.Certificate] in the format - // `projects/*/locations/*/caPools/*/certificates/*`. - Certificate string `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` - // The serial number of the [Certificate][google.cloud.security.privateca.v1.Certificate]. - HexSerialNumber string `protobuf:"bytes,2,opt,name=hex_serial_number,json=hexSerialNumber,proto3" json:"hex_serial_number,omitempty"` - // The reason the [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - RevocationReason RevocationReason `protobuf:"varint,3,opt,name=revocation_reason,json=revocationReason,proto3,enum=google.cloud.security.privateca.v1.RevocationReason" json:"revocation_reason,omitempty"` -} - -func (x *CertificateRevocationList_RevokedCertificate) Reset() { - *x = CertificateRevocationList_RevokedCertificate{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateRevocationList_RevokedCertificate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateRevocationList_RevokedCertificate) ProtoMessage() {} - -func (x *CertificateRevocationList_RevokedCertificate) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateRevocationList_RevokedCertificate.ProtoReflect.Descriptor instead. -func (*CertificateRevocationList_RevokedCertificate) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{2, 0} -} - -func (x *CertificateRevocationList_RevokedCertificate) GetCertificate() string { - if x != nil { - return x.Certificate - } - return "" -} - -func (x *CertificateRevocationList_RevokedCertificate) GetHexSerialNumber() string { - if x != nil { - return x.HexSerialNumber - } - return "" -} - -func (x *CertificateRevocationList_RevokedCertificate) GetRevocationReason() RevocationReason { - if x != nil { - return x.RevocationReason - } - return RevocationReason_REVOCATION_REASON_UNSPECIFIED -} - -// Describes fields that are relavent to the revocation of a [Certificate][google.cloud.security.privateca.v1.Certificate]. -type Certificate_RevocationDetails struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Indicates why a [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - RevocationState RevocationReason `protobuf:"varint,1,opt,name=revocation_state,json=revocationState,proto3,enum=google.cloud.security.privateca.v1.RevocationReason" json:"revocation_state,omitempty"` - // The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - RevocationTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=revocation_time,json=revocationTime,proto3" json:"revocation_time,omitempty"` -} - -func (x *Certificate_RevocationDetails) Reset() { - *x = Certificate_RevocationDetails{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Certificate_RevocationDetails) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Certificate_RevocationDetails) ProtoMessage() {} - -func (x *Certificate_RevocationDetails) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Certificate_RevocationDetails.ProtoReflect.Descriptor instead. -func (*Certificate_RevocationDetails) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *Certificate_RevocationDetails) GetRevocationState() RevocationReason { - if x != nil { - return x.RevocationState - } - return RevocationReason_REVOCATION_REASON_UNSPECIFIED -} - -func (x *Certificate_RevocationDetails) GetRevocationTime() *timestamppb.Timestamp { - if x != nil { - return x.RevocationTime - } - return nil -} - -// Describes values that are relevant in a CA certificate. -type X509Parameters_CaOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. Refers to the "CA" X.509 extension, which is a boolean value. When this - // value is missing, the extension will be omitted from the CA certificate. - IsCa *bool `protobuf:"varint,1,opt,name=is_ca,json=isCa,proto3,oneof" json:"is_ca,omitempty"` - // Optional. Refers to the path length restriction X.509 extension. For a CA - // certificate, this value describes the depth of subordinate CA - // certificates that are allowed. - // If this value is less than 0, the request will fail. - // If this value is missing, the max path length will be omitted from the - // CA certificate. - MaxIssuerPathLength *int32 `protobuf:"varint,2,opt,name=max_issuer_path_length,json=maxIssuerPathLength,proto3,oneof" json:"max_issuer_path_length,omitempty"` -} - -func (x *X509Parameters_CaOptions) Reset() { - *x = X509Parameters_CaOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *X509Parameters_CaOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*X509Parameters_CaOptions) ProtoMessage() {} - -func (x *X509Parameters_CaOptions) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use X509Parameters_CaOptions.ProtoReflect.Descriptor instead. -func (*X509Parameters_CaOptions) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{5, 0} -} - -func (x *X509Parameters_CaOptions) GetIsCa() bool { - if x != nil && x.IsCa != nil { - return *x.IsCa - } - return false -} - -func (x *X509Parameters_CaOptions) GetMaxIssuerPathLength() int32 { - if x != nil && x.MaxIssuerPathLength != nil { - return *x.MaxIssuerPathLength - } - return 0 -} - -// This message describes a subordinate CA's issuer certificate chain. This -// wrapper exists for compatibility reasons. -type SubordinateConfig_SubordinateConfigChain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. Expected to be in leaf-to-root order according to RFC 5246. - PemCertificates []string `protobuf:"bytes,1,rep,name=pem_certificates,json=pemCertificates,proto3" json:"pem_certificates,omitempty"` -} - -func (x *SubordinateConfig_SubordinateConfigChain) Reset() { - *x = SubordinateConfig_SubordinateConfigChain{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubordinateConfig_SubordinateConfigChain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubordinateConfig_SubordinateConfigChain) ProtoMessage() {} - -func (x *SubordinateConfig_SubordinateConfigChain) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubordinateConfig_SubordinateConfigChain.ProtoReflect.Descriptor instead. -func (*SubordinateConfig_SubordinateConfigChain) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{6, 0} -} - -func (x *SubordinateConfig_SubordinateConfigChain) GetPemCertificates() []string { - if x != nil { - return x.PemCertificates - } - return nil -} - -// These values are used to create the distinguished name and subject -// alternative name fields in an X.509 certificate. -type CertificateConfig_SubjectConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. Contains distinguished name fields such as the common name, location and - // organization. - Subject *Subject `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` - // Optional. The subject alternative name fields. - SubjectAltName *SubjectAltNames `protobuf:"bytes,2,opt,name=subject_alt_name,json=subjectAltName,proto3" json:"subject_alt_name,omitempty"` -} - -func (x *CertificateConfig_SubjectConfig) Reset() { - *x = CertificateConfig_SubjectConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateConfig_SubjectConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateConfig_SubjectConfig) ProtoMessage() {} - -func (x *CertificateConfig_SubjectConfig) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateConfig_SubjectConfig.ProtoReflect.Descriptor instead. -func (*CertificateConfig_SubjectConfig) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *CertificateConfig_SubjectConfig) GetSubject() *Subject { - if x != nil { - return x.Subject - } - return nil -} - -func (x *CertificateConfig_SubjectConfig) GetSubjectAltName() *SubjectAltNames { - if x != nil { - return x.SubjectAltName - } - return nil -} - -// These values describe fields in an issued X.509 certificate such as the -// distinguished name, subject alternative names, serial number, and lifetime. -type CertificateDescription_SubjectDescription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Contains distinguished name fields such as the common name, location and - // / organization. - Subject *Subject `protobuf:"bytes,1,opt,name=subject,proto3" json:"subject,omitempty"` - // The subject alternative name fields. - SubjectAltName *SubjectAltNames `protobuf:"bytes,2,opt,name=subject_alt_name,json=subjectAltName,proto3" json:"subject_alt_name,omitempty"` - // The serial number encoded in lowercase hexadecimal. - HexSerialNumber string `protobuf:"bytes,3,opt,name=hex_serial_number,json=hexSerialNumber,proto3" json:"hex_serial_number,omitempty"` - // For convenience, the actual lifetime of an issued certificate. - Lifetime *durationpb.Duration `protobuf:"bytes,4,opt,name=lifetime,proto3" json:"lifetime,omitempty"` - // The time at which the certificate becomes valid. - NotBeforeTime *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=not_before_time,json=notBeforeTime,proto3" json:"not_before_time,omitempty"` - // The time after which the certificate is expired. - // Per RFC 5280, the validity period for a certificate is the period of time - // from not_before_time through not_after_time, inclusive. - // Corresponds to 'not_before_time' + 'lifetime' - 1 second. - NotAfterTime *timestamppb.Timestamp `protobuf:"bytes,6,opt,name=not_after_time,json=notAfterTime,proto3" json:"not_after_time,omitempty"` -} - -func (x *CertificateDescription_SubjectDescription) Reset() { - *x = CertificateDescription_SubjectDescription{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateDescription_SubjectDescription) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateDescription_SubjectDescription) ProtoMessage() {} - -func (x *CertificateDescription_SubjectDescription) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateDescription_SubjectDescription.ProtoReflect.Descriptor instead. -func (*CertificateDescription_SubjectDescription) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{9, 0} -} - -func (x *CertificateDescription_SubjectDescription) GetSubject() *Subject { - if x != nil { - return x.Subject - } - return nil -} - -func (x *CertificateDescription_SubjectDescription) GetSubjectAltName() *SubjectAltNames { - if x != nil { - return x.SubjectAltName - } - return nil -} - -func (x *CertificateDescription_SubjectDescription) GetHexSerialNumber() string { - if x != nil { - return x.HexSerialNumber - } - return "" -} - -func (x *CertificateDescription_SubjectDescription) GetLifetime() *durationpb.Duration { - if x != nil { - return x.Lifetime - } - return nil -} - -func (x *CertificateDescription_SubjectDescription) GetNotBeforeTime() *timestamppb.Timestamp { - if x != nil { - return x.NotBeforeTime - } - return nil -} - -func (x *CertificateDescription_SubjectDescription) GetNotAfterTime() *timestamppb.Timestamp { - if x != nil { - return x.NotAfterTime - } - return nil -} - -// A KeyId identifies a specific public key, usually by hashing the public -// key. -type CertificateDescription_KeyId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. The value of this KeyId encoded in lowercase hexadecimal. This is most - // likely the 160 bit SHA-1 hash of the public key. - KeyId string `protobuf:"bytes,1,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty"` -} - -func (x *CertificateDescription_KeyId) Reset() { - *x = CertificateDescription_KeyId{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateDescription_KeyId) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateDescription_KeyId) ProtoMessage() {} - -func (x *CertificateDescription_KeyId) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateDescription_KeyId.ProtoReflect.Descriptor instead. -func (*CertificateDescription_KeyId) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{9, 1} -} - -func (x *CertificateDescription_KeyId) GetKeyId() string { - if x != nil { - return x.KeyId - } - return "" -} - -// A group of fingerprints for the x509 certificate. -type CertificateDescription_CertificateFingerprint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The SHA 256 hash, encoded in hexadecimal, of the DER x509 certificate. - Sha256Hash string `protobuf:"bytes,1,opt,name=sha256_hash,json=sha256Hash,proto3" json:"sha256_hash,omitempty"` -} - -func (x *CertificateDescription_CertificateFingerprint) Reset() { - *x = CertificateDescription_CertificateFingerprint{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateDescription_CertificateFingerprint) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateDescription_CertificateFingerprint) ProtoMessage() {} - -func (x *CertificateDescription_CertificateFingerprint) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateDescription_CertificateFingerprint.ProtoReflect.Descriptor instead. -func (*CertificateDescription_CertificateFingerprint) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{9, 2} -} - -func (x *CertificateDescription_CertificateFingerprint) GetSha256Hash() string { - if x != nil { - return x.Sha256Hash - } - return "" -} - -// [KeyUsage.KeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions] corresponds to the key usage values -// described in https://tools.ietf.org/html/rfc5280#section-4.2.1.3. -type KeyUsage_KeyUsageOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The key may be used for digital signatures. - DigitalSignature bool `protobuf:"varint,1,opt,name=digital_signature,json=digitalSignature,proto3" json:"digital_signature,omitempty"` - // The key may be used for cryptographic commitments. Note that this may - // also be referred to as "non-repudiation". - ContentCommitment bool `protobuf:"varint,2,opt,name=content_commitment,json=contentCommitment,proto3" json:"content_commitment,omitempty"` - // The key may be used to encipher other keys. - KeyEncipherment bool `protobuf:"varint,3,opt,name=key_encipherment,json=keyEncipherment,proto3" json:"key_encipherment,omitempty"` - // The key may be used to encipher data. - DataEncipherment bool `protobuf:"varint,4,opt,name=data_encipherment,json=dataEncipherment,proto3" json:"data_encipherment,omitempty"` - // The key may be used in a key agreement protocol. - KeyAgreement bool `protobuf:"varint,5,opt,name=key_agreement,json=keyAgreement,proto3" json:"key_agreement,omitempty"` - // The key may be used to sign certificates. - CertSign bool `protobuf:"varint,6,opt,name=cert_sign,json=certSign,proto3" json:"cert_sign,omitempty"` - // The key may be used sign certificate revocation lists. - CrlSign bool `protobuf:"varint,7,opt,name=crl_sign,json=crlSign,proto3" json:"crl_sign,omitempty"` - // The key may be used to encipher only. - EncipherOnly bool `protobuf:"varint,8,opt,name=encipher_only,json=encipherOnly,proto3" json:"encipher_only,omitempty"` - // The key may be used to decipher only. - DecipherOnly bool `protobuf:"varint,9,opt,name=decipher_only,json=decipherOnly,proto3" json:"decipher_only,omitempty"` -} - -func (x *KeyUsage_KeyUsageOptions) Reset() { - *x = KeyUsage_KeyUsageOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyUsage_KeyUsageOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyUsage_KeyUsageOptions) ProtoMessage() {} - -func (x *KeyUsage_KeyUsageOptions) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeyUsage_KeyUsageOptions.ProtoReflect.Descriptor instead. -func (*KeyUsage_KeyUsageOptions) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{12, 0} -} - -func (x *KeyUsage_KeyUsageOptions) GetDigitalSignature() bool { - if x != nil { - return x.DigitalSignature - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetContentCommitment() bool { - if x != nil { - return x.ContentCommitment - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetKeyEncipherment() bool { - if x != nil { - return x.KeyEncipherment - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetDataEncipherment() bool { - if x != nil { - return x.DataEncipherment - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetKeyAgreement() bool { - if x != nil { - return x.KeyAgreement - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetCertSign() bool { - if x != nil { - return x.CertSign - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetCrlSign() bool { - if x != nil { - return x.CrlSign - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetEncipherOnly() bool { - if x != nil { - return x.EncipherOnly - } - return false -} - -func (x *KeyUsage_KeyUsageOptions) GetDecipherOnly() bool { - if x != nil { - return x.DecipherOnly - } - return false -} - -// [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions] has fields that correspond to -// certain common OIDs that could be specified as an extended key usage value. -type KeyUsage_ExtendedKeyUsageOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Corresponds to OID 1.3.6.1.5.5.7.3.1. Officially described as "TLS WWW - // server authentication", though regularly used for non-WWW TLS. - ServerAuth bool `protobuf:"varint,1,opt,name=server_auth,json=serverAuth,proto3" json:"server_auth,omitempty"` - // Corresponds to OID 1.3.6.1.5.5.7.3.2. Officially described as "TLS WWW - // client authentication", though regularly used for non-WWW TLS. - ClientAuth bool `protobuf:"varint,2,opt,name=client_auth,json=clientAuth,proto3" json:"client_auth,omitempty"` - // Corresponds to OID 1.3.6.1.5.5.7.3.3. Officially described as "Signing of - // downloadable executable code client authentication". - CodeSigning bool `protobuf:"varint,3,opt,name=code_signing,json=codeSigning,proto3" json:"code_signing,omitempty"` - // Corresponds to OID 1.3.6.1.5.5.7.3.4. Officially described as "Email - // protection". - EmailProtection bool `protobuf:"varint,4,opt,name=email_protection,json=emailProtection,proto3" json:"email_protection,omitempty"` - // Corresponds to OID 1.3.6.1.5.5.7.3.8. Officially described as "Binding - // the hash of an object to a time". - TimeStamping bool `protobuf:"varint,5,opt,name=time_stamping,json=timeStamping,proto3" json:"time_stamping,omitempty"` - // Corresponds to OID 1.3.6.1.5.5.7.3.9. Officially described as "Signing - // OCSP responses". - OcspSigning bool `protobuf:"varint,6,opt,name=ocsp_signing,json=ocspSigning,proto3" json:"ocsp_signing,omitempty"` -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) Reset() { - *x = KeyUsage_ExtendedKeyUsageOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyUsage_ExtendedKeyUsageOptions) ProtoMessage() {} - -func (x *KeyUsage_ExtendedKeyUsageOptions) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_resources_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeyUsage_ExtendedKeyUsageOptions.ProtoReflect.Descriptor instead. -func (*KeyUsage_ExtendedKeyUsageOptions) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP(), []int{12, 1} -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetServerAuth() bool { - if x != nil { - return x.ServerAuth - } - return false -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetClientAuth() bool { - if x != nil { - return x.ClientAuth - } - return false -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetCodeSigning() bool { - if x != nil { - return x.CodeSigning - } - return false -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetEmailProtection() bool { - if x != nil { - return x.EmailProtection - } - return false -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetTimeStamping() bool { - if x != nil { - return x.TimeStamping - } - return false -} - -func (x *KeyUsage_ExtendedKeyUsageOptions) GetOcspSigning() bool { - if x != nil { - return x.OcspSigning - } - return false -} - -var File_google_cloud_security_privateca_v1_resources_proto protoreflect.FileDescriptor - -var file_google_cloud_security_privateca_v1_resources_proto_rawDesc = []byte{ - 0x0a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x22, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, - 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0x12, 0x0a, 0x14, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x58, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x42, 0x05, 0xe2, 0x41, 0x02, - 0x02, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x54, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, - 0x05, 0xe2, 0x41, 0x02, 0x02, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, - 0x0a, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x05, 0xe2, 0x41, 0x02, - 0x02, 0x05, 0x52, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x69, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x42, 0x05, 0xe2, 0x41, 0x02, 0x02, 0x05, 0x52, 0x07, - 0x6b, 0x65, 0x79, 0x53, 0x70, 0x65, 0x63, 0x12, 0x6a, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6f, 0x72, - 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x11, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x49, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x54, 0x69, - 0x65, 0x72, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, 0x12, 0x5a, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x13, 0x70, 0x65, - 0x6d, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x11, 0x70, - 0x65, 0x6d, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x12, 0x80, 0x01, 0x0a, 0x1b, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x19, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0a, 0x67, 0x63, 0x73, 0x5f, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x05, 0x52, 0x09, 0x67, - 0x63, 0x73, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x6a, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x55, 0x72, - 0x6c, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x55, 0x72, 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x03, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, - 0x0b, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x62, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x6f, 0x0a, 0x0a, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x55, 0x72, - 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x26, 0x0a, - 0x0f, 0x63, 0x72, 0x6c, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x72, 0x6c, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x55, 0x72, 0x6c, 0x73, 0x1a, 0xbf, 0x01, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x65, 0x63, 0x12, 0x33, 0x0a, 0x15, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x5f, 0x6b, 0x6d, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x12, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x4b, 0x6d, 0x73, 0x4b, 0x65, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6a, 0x0a, - 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x4a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x48, - 0x61, 0x73, 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x48, 0x00, 0x52, 0x09, - 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x42, 0x0c, 0x0a, 0x0a, 0x4b, 0x65, 0x79, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x55, 0x42, 0x4f, 0x52, 0x44, 0x49, 0x4e, 0x41, 0x54, 0x45, - 0x10, 0x02, 0x22, 0x70, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, - 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x54, 0x41, 0x47, 0x45, 0x44, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x57, 0x41, - 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x05, 0x22, 0xfc, 0x01, 0x0a, 0x11, 0x53, 0x69, 0x67, 0x6e, 0x48, 0x61, 0x73, - 0x68, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x49, - 0x47, 0x4e, 0x5f, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, - 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x53, 0x53, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x5f, - 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x53, 0x41, 0x5f, - 0x50, 0x53, 0x53, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, - 0x02, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x53, 0x53, 0x5f, 0x34, 0x30, 0x39, - 0x36, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x53, - 0x41, 0x5f, 0x50, 0x4b, 0x43, 0x53, 0x31, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x5f, 0x53, 0x48, 0x41, - 0x32, 0x35, 0x36, 0x10, 0x06, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x4b, 0x43, - 0x53, 0x31, 0x5f, 0x33, 0x30, 0x37, 0x32, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x07, - 0x12, 0x19, 0x0a, 0x15, 0x52, 0x53, 0x41, 0x5f, 0x50, 0x4b, 0x43, 0x53, 0x31, 0x5f, 0x34, 0x30, - 0x39, 0x36, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x08, 0x12, 0x12, 0x0a, 0x0e, 0x45, - 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x04, 0x12, - 0x12, 0x0a, 0x0e, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38, 0x34, 0x5f, 0x53, 0x48, 0x41, 0x33, 0x38, - 0x34, 0x10, 0x05, 0x3a, 0x9d, 0x01, 0xea, 0x41, 0x99, 0x01, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x68, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x7d, 0x22, 0xce, 0x11, 0x0a, 0x06, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x18, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, - 0x6f, 0x6c, 0x2e, 0x54, 0x69, 0x65, 0x72, 0x42, 0x05, 0xe2, 0x41, 0x02, 0x02, 0x05, 0x52, 0x04, - 0x74, 0x69, 0x65, 0x72, 0x12, 0x68, 0x0a, 0x0f, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0e, - 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x71, - 0x0a, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, - 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x11, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, - 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x68, 0x0a, 0x11, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x0f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0d, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x63, 0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x43, 0x72, - 0x6c, 0x1a, 0xea, 0x0b, 0x0a, 0x0e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x7a, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, - 0x65, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, - 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x73, - 0x12, 0x4a, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6c, 0x69, 0x66, 0x65, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0f, 0x6d, 0x61, 0x78, - 0x69, 0x6d, 0x75, 0x6d, 0x4c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x83, 0x01, 0x0a, - 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x47, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, - 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x14, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, - 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0f, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x7b, 0x0a, 0x14, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x73, - 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x13, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, - 0x74, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x16, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, - 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x15, - 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x45, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x90, 0x05, 0x0a, 0x0e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, - 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x67, 0x0a, 0x03, 0x72, 0x73, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, - 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x2e, - 0x52, 0x73, 0x61, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x03, 0x72, 0x73, - 0x61, 0x12, 0x7b, 0x0a, 0x0e, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x74, 0x69, 0x63, 0x5f, 0x63, 0x75, - 0x72, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x54, - 0x79, 0x70, 0x65, 0x2e, 0x45, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, - 0x0d, 0x65, 0x6c, 0x6c, 0x69, 0x70, 0x74, 0x69, 0x63, 0x43, 0x75, 0x72, 0x76, 0x65, 0x1a, 0x6c, - 0x0a, 0x0a, 0x52, 0x73, 0x61, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x10, - 0x6d, 0x69, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0e, 0x6d, 0x69, - 0x6e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2e, 0x0a, 0x10, - 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x75, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0e, 0x6d, 0x61, - 0x78, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x9d, 0x02, 0x0a, - 0x09, 0x45, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x13, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, - 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x67, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x50, 0x6f, 0x6f, 0x6c, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x54, 0x79, - 0x70, 0x65, 0x2e, 0x45, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x45, 0x63, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, - 0x6d, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x12, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x22, 0x6f, 0x0a, 0x14, 0x45, - 0x63, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, - 0x74, 0x68, 0x6d, 0x12, 0x26, 0x0a, 0x22, 0x45, 0x43, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x54, - 0x55, 0x52, 0x45, 0x5f, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, - 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x45, - 0x43, 0x44, 0x53, 0x41, 0x5f, 0x50, 0x33, 0x38, 0x34, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x45, - 0x44, 0x44, 0x53, 0x41, 0x5f, 0x32, 0x35, 0x35, 0x31, 0x39, 0x10, 0x03, 0x42, 0x0a, 0x0a, 0x08, - 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x1a, 0x93, 0x01, 0x0a, 0x0d, 0x49, 0x73, 0x73, - 0x75, 0x61, 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x18, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x73, 0x72, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x69, 0x73, - 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x15, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x73, 0x72, 0x42, 0x61, 0x73, 0x65, - 0x64, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x1b, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, - 0x69, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x01, 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x61, 0x73, 0x65, 0x64, 0x49, 0x73, 0x73, 0x75, 0x61, 0x6e, 0x63, 0x65, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x38, 0x0a, 0x04, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4e, 0x54, 0x45, 0x52, - 0x50, 0x52, 0x49, 0x53, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x56, 0x4f, 0x50, - 0x53, 0x10, 0x02, 0x3a, 0x5f, 0xea, 0x41, 0x5c, 0x0a, 0x1f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x39, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x7d, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, - 0x6f, 0x6f, 0x6c, 0x7d, 0x22, 0xf4, 0x09, 0x0a, 0x19, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x0f, - 0x73, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0e, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x89, 0x01, 0x0a, 0x14, - 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x03, 0x52, 0x13, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x65, 0x6d, 0x5f, 0x63, - 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x06, - 0x70, 0x65, 0x6d, 0x43, 0x72, 0x6c, 0x12, 0x23, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, - 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x5f, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x0b, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x67, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x1a, 0xf0, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x64, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x4b, 0x0a, 0x0b, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, - 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x68, 0x65, 0x78, 0x5f, 0x73, 0x65, - 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x68, 0x65, 0x78, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x61, 0x0a, 0x11, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x3a, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, - 0x53, 0x55, 0x50, 0x45, 0x52, 0x53, 0x45, 0x44, 0x45, 0x44, 0x10, 0x02, 0x3a, 0xdc, 0x01, 0xea, - 0x41, 0xd8, 0x01, 0x0a, 0x32, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0xa1, 0x01, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x7d, 0x22, 0x96, 0x0c, 0x0a, 0x0b, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x03, 0xfa, - 0x41, 0x26, 0x0a, 0x24, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, - 0x0a, 0x07, 0x70, 0x65, 0x6d, 0x5f, 0x63, 0x73, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x05, 0x48, 0x00, 0x52, 0x06, 0x70, 0x65, 0x6d, 0x43, 0x73, 0x72, 0x12, - 0x55, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x05, 0x48, 0x00, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x78, 0x0a, 0x1c, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, - 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, - 0x01, 0x03, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x1a, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x3c, 0x0a, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x05, 0xe2, - 0x41, 0x02, 0x02, 0x05, 0x52, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x68, - 0x0a, 0x14, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0xe2, 0x41, - 0x01, 0x05, 0xfa, 0x41, 0x2e, 0x0a, 0x2c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x13, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x05, 0x52, 0x0b, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x76, 0x0a, 0x12, 0x72, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x11, - 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x12, 0x2d, 0x0a, 0x0f, 0x70, 0x65, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, - 0x52, 0x0e, 0x70, 0x65, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x12, 0x79, 0x0a, 0x17, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x03, 0x52, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x15, 0x70, - 0x65, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, - 0x52, 0x13, 0x70, 0x65, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, - 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xb9, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x10, - 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0f, 0x72, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x43, 0x0a, - 0x0f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, - 0x6d, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x7f, 0xea, - 0x41, 0x7c, 0x0a, 0x24, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x54, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x7d, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x2f, 0x7b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x7d, 0x42, 0x14, - 0x0a, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x22, 0x9d, 0x07, 0x0a, 0x13, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0xe2, 0x41, 0x01, 0x03, - 0xfa, 0x41, 0x2e, 0x0a, 0x2c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x11, 0x70, 0x72, 0x65, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x10, 0x70, 0x72, - 0x65, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x7b, - 0x0a, 0x14, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, - 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x13, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x80, 0x01, 0x0a, 0x16, - 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x5f, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, - 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x15, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, - 0x6f, 0x75, 0x67, 0x68, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, - 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x61, 0x0a, 0x06, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, - 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x87, 0x01, 0xea, 0x41, 0x83, - 0x01, 0x0a, 0x2c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, - 0x53, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x7d, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x6c, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x7d, 0x22, 0xc8, 0x04, 0x0a, 0x0e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x4f, 0x0a, 0x09, 0x6b, 0x65, 0x79, 0x5f, 0x75, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, - 0x6b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x61, 0x0a, 0x0a, 0x63, 0x61, 0x5f, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x2e, 0x43, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x63, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x0a, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x01, 0x52, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x73, 0x12, 0x2e, - 0x0a, 0x10, 0x61, 0x69, 0x61, 0x5f, 0x6f, 0x63, 0x73, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0e, - 0x61, 0x69, 0x61, 0x4f, 0x63, 0x73, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x6c, - 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x61, 0x6c, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x90, 0x01, 0x0a, - 0x09, 0x43, 0x61, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x05, 0x69, 0x73, - 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x48, - 0x00, 0x52, 0x04, 0x69, 0x73, 0x43, 0x61, 0x88, 0x01, 0x01, 0x12, 0x3e, 0x0a, 0x16, 0x6d, 0x61, - 0x78, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x48, 0x01, 0x52, 0x13, 0x6d, 0x61, 0x78, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x50, 0x61, 0x74, - 0x68, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x69, - 0x73, 0x5f, 0x63, 0x61, 0x42, 0x19, 0x0a, 0x17, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x72, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0xe3, 0x02, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6d, 0x0a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x14, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x7e, 0x0a, 0x10, 0x70, 0x65, 0x6d, 0x5f, 0x69, 0x73, 0x73, 0x75, - 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x65, 0x6d, 0x49, 0x73, 0x73, 0x75, 0x65, 0x72, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x1a, 0x49, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2f, - 0x0a, 0x10, 0x70, 0x65, 0x6d, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0f, - 0x70, 0x65, 0x6d, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x42, - 0x14, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xac, 0x01, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x55, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x46, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x22, 0x30, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, - 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x50, - 0x45, 0x4d, 0x10, 0x01, 0x22, 0xf8, 0x03, 0x0a, 0x11, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x70, 0x0a, 0x0e, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0d, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x59, 0x0a, 0x0b, - 0x78, 0x35, 0x30, 0x39, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, 0x72, 0x61, 0x6d, - 0x65, 0x74, 0x65, 0x72, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x78, 0x35, 0x30, - 0x39, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x1a, 0xc1, 0x01, 0x0a, 0x0d, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, 0x0a, - 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x63, 0x0a, 0x10, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, - 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, - 0x97, 0x0a, 0x0a, 0x16, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x13, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x10, 0x78, 0x35, - 0x30, 0x39, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x0f, 0x78, 0x35, 0x30, 0x39, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x0a, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x66, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x49, - 0x64, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, - 0x6a, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x52, 0x0e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x17, 0x63, - 0x72, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x63, 0x72, - 0x6c, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x61, 0x69, 0x61, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x69, - 0x6e, 0x67, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x75, - 0x72, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x19, 0x61, 0x69, 0x61, 0x49, 0x73, - 0x73, 0x75, 0x69, 0x6e, 0x67, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x55, 0x72, 0x6c, 0x73, 0x12, 0x7c, 0x0a, 0x10, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x66, 0x69, 0x6e, - 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x51, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, - 0x74, 0x52, 0x0f, 0x63, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, - 0x6e, 0x74, 0x1a, 0xa3, 0x03, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x07, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x12, 0x5d, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x52, - 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2a, 0x0a, 0x11, 0x68, 0x65, 0x78, 0x5f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x68, 0x65, 0x78, 0x53, - 0x65, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x35, 0x0a, 0x08, 0x6c, - 0x69, 0x66, 0x65, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x69, 0x66, 0x65, 0x74, 0x69, - 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x42, 0x65, 0x66, 0x6f, - 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x61, 0x66, - 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6e, 0x6f, 0x74, 0x41, - 0x66, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x24, 0x0a, 0x05, 0x4b, 0x65, 0x79, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x1a, 0x39, - 0x0a, 0x16, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6e, - 0x67, 0x65, 0x72, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x68, 0x61, 0x32, - 0x35, 0x36, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x22, 0x36, 0x0a, 0x08, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, - 0x69, 0x64, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x0c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x50, 0x61, 0x74, - 0x68, 0x22, 0x9e, 0x01, 0x0a, 0x0d, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x08, 0x63, 0x72, 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, 0x63, 0x72, - 0x69, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xb2, 0x07, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x62, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, - 0x55, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x4b, 0x65, 0x79, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x12, 0x72, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4b, - 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6b, 0x0a, 0x1b, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, - 0x77, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, - 0x75, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x52, 0x18, 0x75, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x1a, 0xec, 0x02, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, - 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x67, 0x69, - 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x69, 0x67, 0x69, 0x74, 0x61, 0x6c, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x65, 0x6e, 0x63, 0x69, - 0x70, 0x68, 0x65, 0x72, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x6b, 0x65, 0x79, 0x45, 0x6e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0x2b, 0x0a, 0x11, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x6e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x64, 0x61, 0x74, 0x61, - 0x45, 0x6e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, - 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x67, 0x72, 0x65, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x65, 0x72, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x72, 0x6c, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x72, 0x6c, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x6e, 0x63, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x65, 0x6e, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x64, 0x65, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x4f, - 0x6e, 0x6c, 0x79, 0x1a, 0xf1, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x64, - 0x4b, 0x65, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, - 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x75, 0x74, - 0x68, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x69, 0x6e, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x69, 0x67, - 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x23, 0x0a, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x69, 0x6e, 0x67, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, - 0x70, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x63, 0x73, 0x70, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6f, 0x63, 0x73, 0x70, - 0x53, 0x69, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x22, 0xa2, 0x02, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x13, 0x6f, - 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x6e, - 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x1a, 0x0a, 0x08, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x6e, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x65, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, - 0x72, 0x65, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xe2, 0x01, 0x0a, - 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6e, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x64, 0x6e, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x75, 0x72, 0x69, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x69, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x6d, 0x61, 0x69, - 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x70, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0b, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x52, 0x0a, - 0x0b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x58, 0x35, 0x30, 0x39, 0x45, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x53, 0x61, 0x6e, - 0x73, 0x22, 0xc6, 0x02, 0x0a, 0x1e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x0e, 0x63, 0x65, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0d, 0x63, 0x65, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x19, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, - 0x17, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x61, 0x73, - 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x88, 0x01, 0x01, 0x12, 0x57, 0x0a, 0x23, 0x61, - 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x01, - 0x52, 0x1f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, - 0x68, 0x88, 0x01, 0x01, 0x42, 0x1c, 0x0a, 0x1a, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x42, 0x26, 0x0a, 0x24, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x70, - 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0xc8, 0x03, 0x0a, 0x1f, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x8e, - 0x01, 0x0a, 0x10, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x5d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x2e, 0x4b, - 0x6e, 0x6f, 0x77, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0f, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x67, 0x0a, 0x15, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x64, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x14, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xaa, 0x01, 0x0a, 0x19, 0x4b, 0x6e, 0x6f, - 0x77, 0x6e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, - 0x4e, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x5f, - 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x58, 0x54, 0x45, 0x4e, - 0x44, 0x45, 0x44, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, - 0x0e, 0x0a, 0x0a, 0x43, 0x41, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x03, 0x12, - 0x0e, 0x0a, 0x0a, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x5f, 0x49, 0x44, 0x53, 0x10, 0x04, 0x12, - 0x14, 0x0a, 0x10, 0x41, 0x49, 0x41, 0x5f, 0x4f, 0x43, 0x53, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x53, 0x10, 0x05, 0x2a, 0x87, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, - 0x56, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x10, - 0x01, 0x12, 0x24, 0x0a, 0x20, 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, - 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, - 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x41, 0x46, 0x46, 0x49, 0x4c, - 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x03, - 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x55, 0x50, 0x45, 0x52, 0x53, 0x45, 0x44, 0x45, 0x44, 0x10, 0x04, - 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x45, 0x53, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4f, 0x46, - 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x14, 0x0a, 0x10, - 0x43, 0x45, 0x52, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x48, 0x4f, 0x4c, 0x44, - 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x52, 0x49, 0x56, 0x49, 0x4c, 0x45, 0x47, 0x45, 0x5f, - 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x41, 0x57, 0x4e, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x41, - 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, - 0x54, 0x59, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x10, 0x08, 0x2a, - 0x5d, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, - 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, - 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x52, 0x45, 0x46, 0x4c, - 0x45, 0x43, 0x54, 0x45, 0x44, 0x5f, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x10, 0x02, 0x42, 0x86, - 0x02, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x17, 0x50, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x43, 0x61, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, - 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2f, 0x76, 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0xf8, 0x01, 0x01, 0xaa, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x43, 0x41, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x5c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x5c, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x41, 0x5c, 0x56, 0x31, 0xea, 0x02, - 0x26, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x43, 0x41, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_cloud_security_privateca_v1_resources_proto_rawDescOnce sync.Once - file_google_cloud_security_privateca_v1_resources_proto_rawDescData = file_google_cloud_security_privateca_v1_resources_proto_rawDesc -) - -func file_google_cloud_security_privateca_v1_resources_proto_rawDescGZIP() []byte { - file_google_cloud_security_privateca_v1_resources_proto_rawDescOnce.Do(func() { - file_google_cloud_security_privateca_v1_resources_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_security_privateca_v1_resources_proto_rawDescData) - }) - return file_google_cloud_security_privateca_v1_resources_proto_rawDescData -} - -var file_google_cloud_security_privateca_v1_resources_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_google_cloud_security_privateca_v1_resources_proto_msgTypes = make([]protoimpl.MessageInfo, 40) -var file_google_cloud_security_privateca_v1_resources_proto_goTypes = []interface{}{ - (RevocationReason)(0), // 0: google.cloud.security.privateca.v1.RevocationReason - (SubjectRequestMode)(0), // 1: google.cloud.security.privateca.v1.SubjectRequestMode - (CertificateAuthority_Type)(0), // 2: google.cloud.security.privateca.v1.CertificateAuthority.Type - (CertificateAuthority_State)(0), // 3: google.cloud.security.privateca.v1.CertificateAuthority.State - (CertificateAuthority_SignHashAlgorithm)(0), // 4: google.cloud.security.privateca.v1.CertificateAuthority.SignHashAlgorithm - (CaPool_Tier)(0), // 5: google.cloud.security.privateca.v1.CaPool.Tier - (CaPool_IssuancePolicy_AllowedKeyType_EcKeyType_EcSignatureAlgorithm)(0), // 6: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.EcKeyType.EcSignatureAlgorithm - (CertificateRevocationList_State)(0), // 7: google.cloud.security.privateca.v1.CertificateRevocationList.State - (PublicKey_KeyFormat)(0), // 8: google.cloud.security.privateca.v1.PublicKey.KeyFormat - (CertificateExtensionConstraints_KnownCertificateExtension)(0), // 9: google.cloud.security.privateca.v1.CertificateExtensionConstraints.KnownCertificateExtension - (*CertificateAuthority)(nil), // 10: google.cloud.security.privateca.v1.CertificateAuthority - (*CaPool)(nil), // 11: google.cloud.security.privateca.v1.CaPool - (*CertificateRevocationList)(nil), // 12: google.cloud.security.privateca.v1.CertificateRevocationList - (*Certificate)(nil), // 13: google.cloud.security.privateca.v1.Certificate - (*CertificateTemplate)(nil), // 14: google.cloud.security.privateca.v1.CertificateTemplate - (*X509Parameters)(nil), // 15: google.cloud.security.privateca.v1.X509Parameters - (*SubordinateConfig)(nil), // 16: google.cloud.security.privateca.v1.SubordinateConfig - (*PublicKey)(nil), // 17: google.cloud.security.privateca.v1.PublicKey - (*CertificateConfig)(nil), // 18: google.cloud.security.privateca.v1.CertificateConfig - (*CertificateDescription)(nil), // 19: google.cloud.security.privateca.v1.CertificateDescription - (*ObjectId)(nil), // 20: google.cloud.security.privateca.v1.ObjectId - (*X509Extension)(nil), // 21: google.cloud.security.privateca.v1.X509Extension - (*KeyUsage)(nil), // 22: google.cloud.security.privateca.v1.KeyUsage - (*Subject)(nil), // 23: google.cloud.security.privateca.v1.Subject - (*SubjectAltNames)(nil), // 24: google.cloud.security.privateca.v1.SubjectAltNames - (*CertificateIdentityConstraints)(nil), // 25: google.cloud.security.privateca.v1.CertificateIdentityConstraints - (*CertificateExtensionConstraints)(nil), // 26: google.cloud.security.privateca.v1.CertificateExtensionConstraints - (*CertificateAuthority_AccessUrls)(nil), // 27: google.cloud.security.privateca.v1.CertificateAuthority.AccessUrls - (*CertificateAuthority_KeyVersionSpec)(nil), // 28: google.cloud.security.privateca.v1.CertificateAuthority.KeyVersionSpec - nil, // 29: google.cloud.security.privateca.v1.CertificateAuthority.LabelsEntry - (*CaPool_PublishingOptions)(nil), // 30: google.cloud.security.privateca.v1.CaPool.PublishingOptions - (*CaPool_IssuancePolicy)(nil), // 31: google.cloud.security.privateca.v1.CaPool.IssuancePolicy - nil, // 32: google.cloud.security.privateca.v1.CaPool.LabelsEntry - (*CaPool_IssuancePolicy_AllowedKeyType)(nil), // 33: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType - (*CaPool_IssuancePolicy_IssuanceModes)(nil), // 34: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes - (*CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType)(nil), // 35: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.RsaKeyType - (*CaPool_IssuancePolicy_AllowedKeyType_EcKeyType)(nil), // 36: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.EcKeyType - (*CertificateRevocationList_RevokedCertificate)(nil), // 37: google.cloud.security.privateca.v1.CertificateRevocationList.RevokedCertificate - nil, // 38: google.cloud.security.privateca.v1.CertificateRevocationList.LabelsEntry - (*Certificate_RevocationDetails)(nil), // 39: google.cloud.security.privateca.v1.Certificate.RevocationDetails - nil, // 40: google.cloud.security.privateca.v1.Certificate.LabelsEntry - nil, // 41: google.cloud.security.privateca.v1.CertificateTemplate.LabelsEntry - (*X509Parameters_CaOptions)(nil), // 42: google.cloud.security.privateca.v1.X509Parameters.CaOptions - (*SubordinateConfig_SubordinateConfigChain)(nil), // 43: google.cloud.security.privateca.v1.SubordinateConfig.SubordinateConfigChain - (*CertificateConfig_SubjectConfig)(nil), // 44: google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig - (*CertificateDescription_SubjectDescription)(nil), // 45: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription - (*CertificateDescription_KeyId)(nil), // 46: google.cloud.security.privateca.v1.CertificateDescription.KeyId - (*CertificateDescription_CertificateFingerprint)(nil), // 47: google.cloud.security.privateca.v1.CertificateDescription.CertificateFingerprint - (*KeyUsage_KeyUsageOptions)(nil), // 48: google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions - (*KeyUsage_ExtendedKeyUsageOptions)(nil), // 49: google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions - (*durationpb.Duration)(nil), // 50: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp - (*expr.Expr)(nil), // 52: google.type.Expr -} -var file_google_cloud_security_privateca_v1_resources_proto_depIdxs = []int32{ - 2, // 0: google.cloud.security.privateca.v1.CertificateAuthority.type:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.Type - 18, // 1: google.cloud.security.privateca.v1.CertificateAuthority.config:type_name -> google.cloud.security.privateca.v1.CertificateConfig - 50, // 2: google.cloud.security.privateca.v1.CertificateAuthority.lifetime:type_name -> google.protobuf.Duration - 28, // 3: google.cloud.security.privateca.v1.CertificateAuthority.key_spec:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.KeyVersionSpec - 16, // 4: google.cloud.security.privateca.v1.CertificateAuthority.subordinate_config:type_name -> google.cloud.security.privateca.v1.SubordinateConfig - 5, // 5: google.cloud.security.privateca.v1.CertificateAuthority.tier:type_name -> google.cloud.security.privateca.v1.CaPool.Tier - 3, // 6: google.cloud.security.privateca.v1.CertificateAuthority.state:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.State - 19, // 7: google.cloud.security.privateca.v1.CertificateAuthority.ca_certificate_descriptions:type_name -> google.cloud.security.privateca.v1.CertificateDescription - 27, // 8: google.cloud.security.privateca.v1.CertificateAuthority.access_urls:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.AccessUrls - 51, // 9: google.cloud.security.privateca.v1.CertificateAuthority.create_time:type_name -> google.protobuf.Timestamp - 51, // 10: google.cloud.security.privateca.v1.CertificateAuthority.update_time:type_name -> google.protobuf.Timestamp - 51, // 11: google.cloud.security.privateca.v1.CertificateAuthority.delete_time:type_name -> google.protobuf.Timestamp - 51, // 12: google.cloud.security.privateca.v1.CertificateAuthority.expire_time:type_name -> google.protobuf.Timestamp - 29, // 13: google.cloud.security.privateca.v1.CertificateAuthority.labels:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.LabelsEntry - 5, // 14: google.cloud.security.privateca.v1.CaPool.tier:type_name -> google.cloud.security.privateca.v1.CaPool.Tier - 31, // 15: google.cloud.security.privateca.v1.CaPool.issuance_policy:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy - 30, // 16: google.cloud.security.privateca.v1.CaPool.publishing_options:type_name -> google.cloud.security.privateca.v1.CaPool.PublishingOptions - 32, // 17: google.cloud.security.privateca.v1.CaPool.labels:type_name -> google.cloud.security.privateca.v1.CaPool.LabelsEntry - 37, // 18: google.cloud.security.privateca.v1.CertificateRevocationList.revoked_certificates:type_name -> google.cloud.security.privateca.v1.CertificateRevocationList.RevokedCertificate - 7, // 19: google.cloud.security.privateca.v1.CertificateRevocationList.state:type_name -> google.cloud.security.privateca.v1.CertificateRevocationList.State - 51, // 20: google.cloud.security.privateca.v1.CertificateRevocationList.create_time:type_name -> google.protobuf.Timestamp - 51, // 21: google.cloud.security.privateca.v1.CertificateRevocationList.update_time:type_name -> google.protobuf.Timestamp - 38, // 22: google.cloud.security.privateca.v1.CertificateRevocationList.labels:type_name -> google.cloud.security.privateca.v1.CertificateRevocationList.LabelsEntry - 18, // 23: google.cloud.security.privateca.v1.Certificate.config:type_name -> google.cloud.security.privateca.v1.CertificateConfig - 50, // 24: google.cloud.security.privateca.v1.Certificate.lifetime:type_name -> google.protobuf.Duration - 1, // 25: google.cloud.security.privateca.v1.Certificate.subject_mode:type_name -> google.cloud.security.privateca.v1.SubjectRequestMode - 39, // 26: google.cloud.security.privateca.v1.Certificate.revocation_details:type_name -> google.cloud.security.privateca.v1.Certificate.RevocationDetails - 19, // 27: google.cloud.security.privateca.v1.Certificate.certificate_description:type_name -> google.cloud.security.privateca.v1.CertificateDescription - 51, // 28: google.cloud.security.privateca.v1.Certificate.create_time:type_name -> google.protobuf.Timestamp - 51, // 29: google.cloud.security.privateca.v1.Certificate.update_time:type_name -> google.protobuf.Timestamp - 40, // 30: google.cloud.security.privateca.v1.Certificate.labels:type_name -> google.cloud.security.privateca.v1.Certificate.LabelsEntry - 15, // 31: google.cloud.security.privateca.v1.CertificateTemplate.predefined_values:type_name -> google.cloud.security.privateca.v1.X509Parameters - 25, // 32: google.cloud.security.privateca.v1.CertificateTemplate.identity_constraints:type_name -> google.cloud.security.privateca.v1.CertificateIdentityConstraints - 26, // 33: google.cloud.security.privateca.v1.CertificateTemplate.passthrough_extensions:type_name -> google.cloud.security.privateca.v1.CertificateExtensionConstraints - 51, // 34: google.cloud.security.privateca.v1.CertificateTemplate.create_time:type_name -> google.protobuf.Timestamp - 51, // 35: google.cloud.security.privateca.v1.CertificateTemplate.update_time:type_name -> google.protobuf.Timestamp - 41, // 36: google.cloud.security.privateca.v1.CertificateTemplate.labels:type_name -> google.cloud.security.privateca.v1.CertificateTemplate.LabelsEntry - 22, // 37: google.cloud.security.privateca.v1.X509Parameters.key_usage:type_name -> google.cloud.security.privateca.v1.KeyUsage - 42, // 38: google.cloud.security.privateca.v1.X509Parameters.ca_options:type_name -> google.cloud.security.privateca.v1.X509Parameters.CaOptions - 20, // 39: google.cloud.security.privateca.v1.X509Parameters.policy_ids:type_name -> google.cloud.security.privateca.v1.ObjectId - 21, // 40: google.cloud.security.privateca.v1.X509Parameters.additional_extensions:type_name -> google.cloud.security.privateca.v1.X509Extension - 43, // 41: google.cloud.security.privateca.v1.SubordinateConfig.pem_issuer_chain:type_name -> google.cloud.security.privateca.v1.SubordinateConfig.SubordinateConfigChain - 8, // 42: google.cloud.security.privateca.v1.PublicKey.format:type_name -> google.cloud.security.privateca.v1.PublicKey.KeyFormat - 44, // 43: google.cloud.security.privateca.v1.CertificateConfig.subject_config:type_name -> google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig - 15, // 44: google.cloud.security.privateca.v1.CertificateConfig.x509_config:type_name -> google.cloud.security.privateca.v1.X509Parameters - 17, // 45: google.cloud.security.privateca.v1.CertificateConfig.public_key:type_name -> google.cloud.security.privateca.v1.PublicKey - 45, // 46: google.cloud.security.privateca.v1.CertificateDescription.subject_description:type_name -> google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription - 15, // 47: google.cloud.security.privateca.v1.CertificateDescription.x509_description:type_name -> google.cloud.security.privateca.v1.X509Parameters - 17, // 48: google.cloud.security.privateca.v1.CertificateDescription.public_key:type_name -> google.cloud.security.privateca.v1.PublicKey - 46, // 49: google.cloud.security.privateca.v1.CertificateDescription.subject_key_id:type_name -> google.cloud.security.privateca.v1.CertificateDescription.KeyId - 46, // 50: google.cloud.security.privateca.v1.CertificateDescription.authority_key_id:type_name -> google.cloud.security.privateca.v1.CertificateDescription.KeyId - 47, // 51: google.cloud.security.privateca.v1.CertificateDescription.cert_fingerprint:type_name -> google.cloud.security.privateca.v1.CertificateDescription.CertificateFingerprint - 20, // 52: google.cloud.security.privateca.v1.X509Extension.object_id:type_name -> google.cloud.security.privateca.v1.ObjectId - 48, // 53: google.cloud.security.privateca.v1.KeyUsage.base_key_usage:type_name -> google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions - 49, // 54: google.cloud.security.privateca.v1.KeyUsage.extended_key_usage:type_name -> google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions - 20, // 55: google.cloud.security.privateca.v1.KeyUsage.unknown_extended_key_usages:type_name -> google.cloud.security.privateca.v1.ObjectId - 21, // 56: google.cloud.security.privateca.v1.SubjectAltNames.custom_sans:type_name -> google.cloud.security.privateca.v1.X509Extension - 52, // 57: google.cloud.security.privateca.v1.CertificateIdentityConstraints.cel_expression:type_name -> google.type.Expr - 9, // 58: google.cloud.security.privateca.v1.CertificateExtensionConstraints.known_extensions:type_name -> google.cloud.security.privateca.v1.CertificateExtensionConstraints.KnownCertificateExtension - 20, // 59: google.cloud.security.privateca.v1.CertificateExtensionConstraints.additional_extensions:type_name -> google.cloud.security.privateca.v1.ObjectId - 4, // 60: google.cloud.security.privateca.v1.CertificateAuthority.KeyVersionSpec.algorithm:type_name -> google.cloud.security.privateca.v1.CertificateAuthority.SignHashAlgorithm - 33, // 61: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.allowed_key_types:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType - 50, // 62: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.maximum_lifetime:type_name -> google.protobuf.Duration - 34, // 63: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.allowed_issuance_modes:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes - 15, // 64: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values:type_name -> google.cloud.security.privateca.v1.X509Parameters - 25, // 65: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.identity_constraints:type_name -> google.cloud.security.privateca.v1.CertificateIdentityConstraints - 26, // 66: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.passthrough_extensions:type_name -> google.cloud.security.privateca.v1.CertificateExtensionConstraints - 35, // 67: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.rsa:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.RsaKeyType - 36, // 68: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.elliptic_curve:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.EcKeyType - 6, // 69: google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.EcKeyType.signature_algorithm:type_name -> google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType.EcKeyType.EcSignatureAlgorithm - 0, // 70: google.cloud.security.privateca.v1.CertificateRevocationList.RevokedCertificate.revocation_reason:type_name -> google.cloud.security.privateca.v1.RevocationReason - 0, // 71: google.cloud.security.privateca.v1.Certificate.RevocationDetails.revocation_state:type_name -> google.cloud.security.privateca.v1.RevocationReason - 51, // 72: google.cloud.security.privateca.v1.Certificate.RevocationDetails.revocation_time:type_name -> google.protobuf.Timestamp - 23, // 73: google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig.subject:type_name -> google.cloud.security.privateca.v1.Subject - 24, // 74: google.cloud.security.privateca.v1.CertificateConfig.SubjectConfig.subject_alt_name:type_name -> google.cloud.security.privateca.v1.SubjectAltNames - 23, // 75: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription.subject:type_name -> google.cloud.security.privateca.v1.Subject - 24, // 76: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription.subject_alt_name:type_name -> google.cloud.security.privateca.v1.SubjectAltNames - 50, // 77: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription.lifetime:type_name -> google.protobuf.Duration - 51, // 78: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription.not_before_time:type_name -> google.protobuf.Timestamp - 51, // 79: google.cloud.security.privateca.v1.CertificateDescription.SubjectDescription.not_after_time:type_name -> google.protobuf.Timestamp - 80, // [80:80] is the sub-list for method output_type - 80, // [80:80] is the sub-list for method input_type - 80, // [80:80] is the sub-list for extension type_name - 80, // [80:80] is the sub-list for extension extendee - 0, // [0:80] is the sub-list for field type_name -} - -func init() { file_google_cloud_security_privateca_v1_resources_proto_init() } -func file_google_cloud_security_privateca_v1_resources_proto_init() { - if File_google_cloud_security_privateca_v1_resources_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateAuthority); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateRevocationList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Certificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateTemplate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509Parameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubordinateConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PublicKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateDescription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ObjectId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509Extension); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyUsage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subject); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubjectAltNames); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateIdentityConstraints); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateExtensionConstraints); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateAuthority_AccessUrls); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateAuthority_KeyVersionSpec); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_PublishingOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_IssuancePolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_IssuancePolicy_AllowedKeyType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_IssuancePolicy_IssuanceModes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_IssuancePolicy_AllowedKeyType_RsaKeyType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CaPool_IssuancePolicy_AllowedKeyType_EcKeyType); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateRevocationList_RevokedCertificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Certificate_RevocationDetails); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*X509Parameters_CaOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubordinateConfig_SubordinateConfigChain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateConfig_SubjectConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateDescription_SubjectDescription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateDescription_KeyId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateDescription_CertificateFingerprint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyUsage_KeyUsageOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyUsage_ExtendedKeyUsageOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*Certificate_PemCsr)(nil), - (*Certificate_Config)(nil), - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*SubordinateConfig_CertificateAuthority)(nil), - (*SubordinateConfig_PemIssuerChain)(nil), - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[15].OneofWrappers = []interface{}{} - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[18].OneofWrappers = []interface{}{ - (*CertificateAuthority_KeyVersionSpec_CloudKmsKeyVersion)(nil), - (*CertificateAuthority_KeyVersionSpec_Algorithm)(nil), - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[23].OneofWrappers = []interface{}{ - (*CaPool_IssuancePolicy_AllowedKeyType_Rsa)(nil), - (*CaPool_IssuancePolicy_AllowedKeyType_EllipticCurve)(nil), - } - file_google_cloud_security_privateca_v1_resources_proto_msgTypes[32].OneofWrappers = []interface{}{} - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_cloud_security_privateca_v1_resources_proto_rawDesc, - NumEnums: 10, - NumMessages: 40, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_cloud_security_privateca_v1_resources_proto_goTypes, - DependencyIndexes: file_google_cloud_security_privateca_v1_resources_proto_depIdxs, - EnumInfos: file_google_cloud_security_privateca_v1_resources_proto_enumTypes, - MessageInfos: file_google_cloud_security_privateca_v1_resources_proto_msgTypes, - }.Build() - File_google_cloud_security_privateca_v1_resources_proto = out.File - file_google_cloud_security_privateca_v1_resources_proto_rawDesc = nil - file_google_cloud_security_privateca_v1_resources_proto_goTypes = nil - file_google_cloud_security_privateca_v1_resources_proto_depIdxs = nil -} diff --git a/gen/proto/google/cloud/security/privateca/v1/service.pb.go b/gen/proto/google/cloud/security/privateca/v1/service.pb.go deleted file mode 100644 index 9eb0976..0000000 --- a/gen/proto/google/cloud/security/privateca/v1/service.pb.go +++ /dev/null @@ -1,4539 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/cloud/security/privateca/v1/service.proto - -package privateca - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - longrunning "google.golang.org/genproto/googleapis/longrunning" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "google.golang.org/protobuf/types/known/durationpb" - fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Request message for [CertificateAuthorityService.CreateCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate]. -type CreateCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the [Certificate][google.cloud.security.privateca.v1.Certificate], - // in the format `projects/*/locations/*/caPools/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}`. This field is required when using a - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the Enterprise [CertificateAuthority.Tier][], - // but is optional and its value is ignored otherwise. - CertificateId string `protobuf:"bytes,2,opt,name=certificate_id,json=certificateId,proto3" json:"certificate_id,omitempty"` - // Required. A [Certificate][google.cloud.security.privateca.v1.Certificate] with initial field values. - Certificate *Certificate `protobuf:"bytes,3,opt,name=certificate,proto3" json:"certificate,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and the - // request times out. If you make the request again with the same request WorkloadID, - // the server can check if original operation with the same request WorkloadID was - // received, and if so, will ignore the second request. This prevents clients - // from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - // Optional. If this is true, no [Certificate][google.cloud.security.privateca.v1.Certificate] resource will be persisted regardless - // of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s [tier][google.cloud.security.privateca.v1.CaPool.tier], and the returned [Certificate][google.cloud.security.privateca.v1.Certificate] - // will not contain the [pem_certificate][google.cloud.security.privateca.v1.Certificate.pem_certificate] field. - ValidateOnly bool `protobuf:"varint,5,opt,name=validate_only,json=validateOnly,proto3" json:"validate_only,omitempty"` - // Optional. The resource WorkloadID of the [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that should issue the - // certificate. This optional field will ignore the load-balancing scheme of - // the Pool and directly issue the certificate from the CA with the specified - // WorkloadID, contained in the same [CaPool][google.cloud.security.privateca.v1.CaPool] referenced by `parent`. Per-CA quota - // rules apply. If left empty, a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will be chosen from - // the [CaPool][google.cloud.security.privateca.v1.CaPool] by the service. For example, to issue a [Certificate][google.cloud.security.privateca.v1.Certificate] from - // a Certificate Authority with resource name - // "projects/my-project/locations/us-central1/caPools/my-pool/certificateAuthorities/my-ca", - // you can set the [parent][google.cloud.security.privateca.v1.CreateCertificateRequest.parent] to - // "projects/my-project/locations/us-central1/caPools/my-pool" and the - // [issuing_certificate_authority_id][google.cloud.security.privateca.v1.CreateCertificateRequest.issuing_certificate_authority_id] to "my-ca". - IssuingCertificateAuthorityId string `protobuf:"bytes,6,opt,name=issuing_certificate_authority_id,json=issuingCertificateAuthorityId,proto3" json:"issuing_certificate_authority_id,omitempty"` -} - -func (x *CreateCertificateRequest) Reset() { - *x = CreateCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCertificateRequest) ProtoMessage() {} - -func (x *CreateCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCertificateRequest.ProtoReflect.Descriptor instead. -func (*CreateCertificateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{0} -} - -func (x *CreateCertificateRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateCertificateRequest) GetCertificateId() string { - if x != nil { - return x.CertificateId - } - return "" -} - -func (x *CreateCertificateRequest) GetCertificate() *Certificate { - if x != nil { - return x.Certificate - } - return nil -} - -func (x *CreateCertificateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -func (x *CreateCertificateRequest) GetValidateOnly() bool { - if x != nil { - return x.ValidateOnly - } - return false -} - -func (x *CreateCertificateRequest) GetIssuingCertificateAuthorityId() string { - if x != nil { - return x.IssuingCertificateAuthorityId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.GetCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificate]. -type GetCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The [name][google.cloud.security.privateca.v1.Certificate.name] of the [Certificate][google.cloud.security.privateca.v1.Certificate] to get. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetCertificateRequest) Reset() { - *x = GetCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCertificateRequest) ProtoMessage() {} - -func (x *GetCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCertificateRequest.ProtoReflect.Descriptor instead. -func (*GetCertificateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{1} -} - -func (x *GetCertificateRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for [CertificateAuthorityService.ListCertificates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates]. -type ListCertificatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [Certificates][google.cloud.security.privateca.v1.Certificate], in the format - // `projects/*/locations/*/caPools/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. Limit on the number of - // [Certificates][google.cloud.security.privateca.v1.Certificate] to include in the - // response. Further [Certificates][google.cloud.security.privateca.v1.Certificate] can subsequently be obtained - // by including the - // [ListCertificatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificatesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. Pagination token, returned earlier via - // [ListCertificatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificatesResponse.next_page_token]. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Only include resources that match the filter in the response. For details - // on supported filters and syntax, see [Certificates Filtering - // documentation](https://cloud.google.com/certificate-authority-service/docs/sorting-filtering-certificates#filtering_support). - Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` - // Optional. Specify how the results should be sorted. For details on supported fields - // and syntax, see [Certificates Sorting - // documentation](https://cloud.google.com/certificate-authority-service/docs/sorting-filtering-certificates#sorting_support). - OrderBy string `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` -} - -func (x *ListCertificatesRequest) Reset() { - *x = ListCertificatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificatesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificatesRequest) ProtoMessage() {} - -func (x *ListCertificatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificatesRequest.ProtoReflect.Descriptor instead. -func (*ListCertificatesRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{2} -} - -func (x *ListCertificatesRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListCertificatesRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCertificatesRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -func (x *ListCertificatesRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCertificatesRequest) GetOrderBy() string { - if x != nil { - return x.OrderBy - } - return "" -} - -// Response message for [CertificateAuthorityService.ListCertificates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates]. -type ListCertificatesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of [Certificates][google.cloud.security.privateca.v1.Certificate]. - Certificates []*Certificate `protobuf:"bytes,1,rep,name=certificates,proto3" json:"certificates,omitempty"` - // A token to retrieve next page of results. Pass this value in - // [ListCertificatesRequest.next_page_token][] to retrieve the - // next page of results. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // A list of locations (e.g. "us-west1") that could not be reached. - Unreachable []string `protobuf:"bytes,3,rep,name=unreachable,proto3" json:"unreachable,omitempty"` -} - -func (x *ListCertificatesResponse) Reset() { - *x = ListCertificatesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificatesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificatesResponse) ProtoMessage() {} - -func (x *ListCertificatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificatesResponse.ProtoReflect.Descriptor instead. -func (*ListCertificatesResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{3} -} - -func (x *ListCertificatesResponse) GetCertificates() []*Certificate { - if x != nil { - return x.Certificates - } - return nil -} - -func (x *ListCertificatesResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *ListCertificatesResponse) GetUnreachable() []string { - if x != nil { - return x.Unreachable - } - return nil -} - -// Request message for -// [CertificateAuthorityService.RevokeCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.RevokeCertificate]. -type RevokeCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [Certificate][google.cloud.security.privateca.v1.Certificate] in the - // format - // `projects/*/locations/*/caPools/*/certificates/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Required. The [RevocationReason][google.cloud.security.privateca.v1.RevocationReason] for revoking this certificate. - Reason RevocationReason `protobuf:"varint,2,opt,name=reason,proto3,enum=google.cloud.security.privateca.v1.RevocationReason" json:"reason,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *RevokeCertificateRequest) Reset() { - *x = RevokeCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RevokeCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RevokeCertificateRequest) ProtoMessage() {} - -func (x *RevokeCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RevokeCertificateRequest.ProtoReflect.Descriptor instead. -func (*RevokeCertificateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{4} -} - -func (x *RevokeCertificateRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *RevokeCertificateRequest) GetReason() RevocationReason { - if x != nil { - return x.Reason - } - return RevocationReason_REVOCATION_REASON_UNSPECIFIED -} - -func (x *RevokeCertificateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for [CertificateAuthorityService.UpdateCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificate]. -type UpdateCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. [Certificate][google.cloud.security.privateca.v1.Certificate] with updated values. - Certificate *Certificate `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` - // Required. A list of fields to be updated in this request. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UpdateCertificateRequest) Reset() { - *x = UpdateCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCertificateRequest) ProtoMessage() {} - -func (x *UpdateCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCertificateRequest.ProtoReflect.Descriptor instead. -func (*UpdateCertificateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{5} -} - -func (x *UpdateCertificateRequest) GetCertificate() *Certificate { - if x != nil { - return x.Certificate - } - return nil -} - -func (x *UpdateCertificateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -func (x *UpdateCertificateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.ActivateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.ActivateCertificateAuthority]. -type ActivateCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Required. The signed CA certificate issued from - // [FetchCertificateAuthorityCsrResponse.pem_csr][google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrResponse.pem_csr]. - PemCaCertificate string `protobuf:"bytes,2,opt,name=pem_ca_certificate,json=pemCaCertificate,proto3" json:"pem_ca_certificate,omitempty"` - // Required. Must include information about the issuer of 'pem_ca_certificate', and any - // further issuers until the self-signed CA. - SubordinateConfig *SubordinateConfig `protobuf:"bytes,3,opt,name=subordinate_config,json=subordinateConfig,proto3" json:"subordinate_config,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *ActivateCertificateAuthorityRequest) Reset() { - *x = ActivateCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ActivateCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ActivateCertificateAuthorityRequest) ProtoMessage() {} - -func (x *ActivateCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ActivateCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*ActivateCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{6} -} - -func (x *ActivateCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ActivateCertificateAuthorityRequest) GetPemCaCertificate() string { - if x != nil { - return x.PemCaCertificate - } - return "" -} - -func (x *ActivateCertificateAuthorityRequest) GetSubordinateConfig() *SubordinateConfig { - if x != nil { - return x.SubordinateConfig - } - return nil -} - -func (x *ActivateCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.CreateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateAuthority]. -type CreateCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the - // [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority], in the format - // `projects/*/locations/*/caPools/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - CertificateAuthorityId string `protobuf:"bytes,2,opt,name=certificate_authority_id,json=certificateAuthorityId,proto3" json:"certificate_authority_id,omitempty"` - // Required. A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] with initial field values. - CertificateAuthority *CertificateAuthority `protobuf:"bytes,3,opt,name=certificate_authority,json=certificateAuthority,proto3" json:"certificate_authority,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *CreateCertificateAuthorityRequest) Reset() { - *x = CreateCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCertificateAuthorityRequest) ProtoMessage() {} - -func (x *CreateCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*CreateCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{7} -} - -func (x *CreateCertificateAuthorityRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateCertificateAuthorityRequest) GetCertificateAuthorityId() string { - if x != nil { - return x.CertificateAuthorityId - } - return "" -} - -func (x *CreateCertificateAuthorityRequest) GetCertificateAuthority() *CertificateAuthority { - if x != nil { - return x.CertificateAuthority - } - return nil -} - -func (x *CreateCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.DisableCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.DisableCertificateAuthority]. -type DisableCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *DisableCertificateAuthorityRequest) Reset() { - *x = DisableCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DisableCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DisableCertificateAuthorityRequest) ProtoMessage() {} - -func (x *DisableCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DisableCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*DisableCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{8} -} - -func (x *DisableCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DisableCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.EnableCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.EnableCertificateAuthority]. -type EnableCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *EnableCertificateAuthorityRequest) Reset() { - *x = EnableCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EnableCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EnableCertificateAuthorityRequest) ProtoMessage() {} - -func (x *EnableCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EnableCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*EnableCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{9} -} - -func (x *EnableCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *EnableCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.FetchCertificateAuthorityCsr][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr]. -type FetchCertificateAuthorityCsrRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *FetchCertificateAuthorityCsrRequest) Reset() { - *x = FetchCertificateAuthorityCsrRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FetchCertificateAuthorityCsrRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FetchCertificateAuthorityCsrRequest) ProtoMessage() {} - -func (x *FetchCertificateAuthorityCsrRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FetchCertificateAuthorityCsrRequest.ProtoReflect.Descriptor instead. -func (*FetchCertificateAuthorityCsrRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{10} -} - -func (x *FetchCertificateAuthorityCsrRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Response message for -// [CertificateAuthorityService.FetchCertificateAuthorityCsr][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr]. -type FetchCertificateAuthorityCsrResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The PEM-encoded signed certificate signing request (CSR). - PemCsr string `protobuf:"bytes,1,opt,name=pem_csr,json=pemCsr,proto3" json:"pem_csr,omitempty"` -} - -func (x *FetchCertificateAuthorityCsrResponse) Reset() { - *x = FetchCertificateAuthorityCsrResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FetchCertificateAuthorityCsrResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FetchCertificateAuthorityCsrResponse) ProtoMessage() {} - -func (x *FetchCertificateAuthorityCsrResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FetchCertificateAuthorityCsrResponse.ProtoReflect.Descriptor instead. -func (*FetchCertificateAuthorityCsrResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{11} -} - -func (x *FetchCertificateAuthorityCsrResponse) GetPemCsr() string { - if x != nil { - return x.PemCsr - } - return "" -} - -// Request message for [CertificateAuthorityService.GetCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateAuthority]. -type GetCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The [name][google.cloud.security.privateca.v1.CertificateAuthority.name] of the [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] to - // get. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetCertificateAuthorityRequest) Reset() { - *x = GetCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCertificateAuthorityRequest) ProtoMessage() {} - -func (x *GetCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*GetCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{12} -} - -func (x *GetCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for -// [CertificateAuthorityService.ListCertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities]. -type ListCertificateAuthoritiesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the - // [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority], in the format - // `projects/*/locations/*/caPools/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. Limit on the number of [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] to - // include in the response. - // Further [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] can subsequently be - // obtained by including the - // [ListCertificateAuthoritiesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. Pagination token, returned earlier via - // [ListCertificateAuthoritiesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse.next_page_token]. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Only include resources that match the filter in the response. - Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` - // Optional. Specify how the results should be sorted. - OrderBy string `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` -} - -func (x *ListCertificateAuthoritiesRequest) Reset() { - *x = ListCertificateAuthoritiesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateAuthoritiesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateAuthoritiesRequest) ProtoMessage() {} - -func (x *ListCertificateAuthoritiesRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateAuthoritiesRequest.ProtoReflect.Descriptor instead. -func (*ListCertificateAuthoritiesRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{13} -} - -func (x *ListCertificateAuthoritiesRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListCertificateAuthoritiesRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCertificateAuthoritiesRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -func (x *ListCertificateAuthoritiesRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCertificateAuthoritiesRequest) GetOrderBy() string { - if x != nil { - return x.OrderBy - } - return "" -} - -// Response message for -// [CertificateAuthorityService.ListCertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities]. -type ListCertificateAuthoritiesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority]. - CertificateAuthorities []*CertificateAuthority `protobuf:"bytes,1,rep,name=certificate_authorities,json=certificateAuthorities,proto3" json:"certificate_authorities,omitempty"` - // A token to retrieve next page of results. Pass this value in - // [ListCertificateAuthoritiesRequest.next_page_token][] to retrieve the next - // page of results. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // A list of locations (e.g. "us-west1") that could not be reached. - Unreachable []string `protobuf:"bytes,3,rep,name=unreachable,proto3" json:"unreachable,omitempty"` -} - -func (x *ListCertificateAuthoritiesResponse) Reset() { - *x = ListCertificateAuthoritiesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateAuthoritiesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateAuthoritiesResponse) ProtoMessage() {} - -func (x *ListCertificateAuthoritiesResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateAuthoritiesResponse.ProtoReflect.Descriptor instead. -func (*ListCertificateAuthoritiesResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{14} -} - -func (x *ListCertificateAuthoritiesResponse) GetCertificateAuthorities() []*CertificateAuthority { - if x != nil { - return x.CertificateAuthorities - } - return nil -} - -func (x *ListCertificateAuthoritiesResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *ListCertificateAuthoritiesResponse) GetUnreachable() []string { - if x != nil { - return x.Unreachable - } - return nil -} - -// Request message for -// [CertificateAuthorityService.UndeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority]. -type UndeleteCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UndeleteCertificateAuthorityRequest) Reset() { - *x = UndeleteCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UndeleteCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UndeleteCertificateAuthorityRequest) ProtoMessage() {} - -func (x *UndeleteCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UndeleteCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*UndeleteCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{15} -} - -func (x *UndeleteCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *UndeleteCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.DeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateAuthority]. -type DeleteCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - // Optional. This field allows the CA to be deleted even if the CA has - // active certs. Active certs include both unrevoked and unexpired certs. - IgnoreActiveCertificates bool `protobuf:"varint,4,opt,name=ignore_active_certificates,json=ignoreActiveCertificates,proto3" json:"ignore_active_certificates,omitempty"` -} - -func (x *DeleteCertificateAuthorityRequest) Reset() { - *x = DeleteCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteCertificateAuthorityRequest) ProtoMessage() {} - -func (x *DeleteCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*DeleteCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{16} -} - -func (x *DeleteCertificateAuthorityRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DeleteCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -func (x *DeleteCertificateAuthorityRequest) GetIgnoreActiveCertificates() bool { - if x != nil { - return x.IgnoreActiveCertificates - } - return false -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateAuthority]. -type UpdateCertificateAuthorityRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] with updated values. - CertificateAuthority *CertificateAuthority `protobuf:"bytes,1,opt,name=certificate_authority,json=certificateAuthority,proto3" json:"certificate_authority,omitempty"` - // Required. A list of fields to be updated in this request. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UpdateCertificateAuthorityRequest) Reset() { - *x = UpdateCertificateAuthorityRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCertificateAuthorityRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCertificateAuthorityRequest) ProtoMessage() {} - -func (x *UpdateCertificateAuthorityRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCertificateAuthorityRequest.ProtoReflect.Descriptor instead. -func (*UpdateCertificateAuthorityRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{17} -} - -func (x *UpdateCertificateAuthorityRequest) GetCertificateAuthority() *CertificateAuthority { - if x != nil { - return x.CertificateAuthority - } - return nil -} - -func (x *UpdateCertificateAuthorityRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -func (x *UpdateCertificateAuthorityRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.CreateCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCaPool]. -type CreateCaPoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [CaPool][google.cloud.security.privateca.v1.CaPool], in the format `projects/*/locations/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - CaPoolId string `protobuf:"bytes,2,opt,name=ca_pool_id,json=caPoolId,proto3" json:"ca_pool_id,omitempty"` - // Required. A [CaPool][google.cloud.security.privateca.v1.CaPool] with initial field values. - CaPool *CaPool `protobuf:"bytes,3,opt,name=ca_pool,json=caPool,proto3" json:"ca_pool,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *CreateCaPoolRequest) Reset() { - *x = CreateCaPoolRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCaPoolRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCaPoolRequest) ProtoMessage() {} - -func (x *CreateCaPoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCaPoolRequest.ProtoReflect.Descriptor instead. -func (*CreateCaPoolRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{18} -} - -func (x *CreateCaPoolRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateCaPoolRequest) GetCaPoolId() string { - if x != nil { - return x.CaPoolId - } - return "" -} - -func (x *CreateCaPoolRequest) GetCaPool() *CaPool { - if x != nil { - return x.CaPool - } - return nil -} - -func (x *CreateCaPoolRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.UpdateCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCaPool]. -type UpdateCaPoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. [CaPool][google.cloud.security.privateca.v1.CaPool] with updated values. - CaPool *CaPool `protobuf:"bytes,1,opt,name=ca_pool,json=caPool,proto3" json:"ca_pool,omitempty"` - // Required. A list of fields to be updated in this request. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UpdateCaPoolRequest) Reset() { - *x = UpdateCaPoolRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCaPoolRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCaPoolRequest) ProtoMessage() {} - -func (x *UpdateCaPoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCaPoolRequest.ProtoReflect.Descriptor instead. -func (*UpdateCaPoolRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{19} -} - -func (x *UpdateCaPoolRequest) GetCaPool() *CaPool { - if x != nil { - return x.CaPool - } - return nil -} - -func (x *UpdateCaPoolRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -func (x *UpdateCaPoolRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.DeleteCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCaPool]. -type DeleteCaPoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *DeleteCaPoolRequest) Reset() { - *x = DeleteCaPoolRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteCaPoolRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteCaPoolRequest) ProtoMessage() {} - -func (x *DeleteCaPoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteCaPoolRequest.ProtoReflect.Descriptor instead. -func (*DeleteCaPoolRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{20} -} - -func (x *DeleteCaPoolRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DeleteCaPoolRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.FetchCaCerts][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts]. -type FetchCaCertsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for the [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - CaPool string `protobuf:"bytes,1,opt,name=ca_pool,json=caPool,proto3" json:"ca_pool,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *FetchCaCertsRequest) Reset() { - *x = FetchCaCertsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FetchCaCertsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FetchCaCertsRequest) ProtoMessage() {} - -func (x *FetchCaCertsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FetchCaCertsRequest.ProtoReflect.Descriptor instead. -func (*FetchCaCertsRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{21} -} - -func (x *FetchCaCertsRequest) GetCaPool() string { - if x != nil { - return x.CaPool - } - return "" -} - -func (x *FetchCaCertsRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Response message for -// [CertificateAuthorityService.FetchCaCerts][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts]. -type FetchCaCertsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The PEM encoded CA certificate chains of all - // [ACTIVE][CertificateAuthority.State.ACTIVE] [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // resources in this [CaPool][google.cloud.security.privateca.v1.CaPool]. - CaCerts []*FetchCaCertsResponse_CertChain `protobuf:"bytes,1,rep,name=ca_certs,json=caCerts,proto3" json:"ca_certs,omitempty"` -} - -func (x *FetchCaCertsResponse) Reset() { - *x = FetchCaCertsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FetchCaCertsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FetchCaCertsResponse) ProtoMessage() {} - -func (x *FetchCaCertsResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FetchCaCertsResponse.ProtoReflect.Descriptor instead. -func (*FetchCaCertsResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{22} -} - -func (x *FetchCaCertsResponse) GetCaCerts() []*FetchCaCertsResponse_CertChain { - if x != nil { - return x.CaCerts - } - return nil -} - -// Request message for [CertificateAuthorityService.GetCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCaPool]. -type GetCaPoolRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The [name][google.cloud.security.privateca.v1.CaPool.name] of the [CaPool][google.cloud.security.privateca.v1.CaPool] to get. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetCaPoolRequest) Reset() { - *x = GetCaPoolRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCaPoolRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCaPoolRequest) ProtoMessage() {} - -func (x *GetCaPoolRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCaPoolRequest.ProtoReflect.Descriptor instead. -func (*GetCaPoolRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{23} -} - -func (x *GetCaPoolRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for -// [CertificateAuthorityService.ListCaPools][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools]. -type ListCaPoolsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [CaPools][google.cloud.security.privateca.v1.CaPool], in the format - // `projects/*/locations/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. Limit on the number of [CaPools][google.cloud.security.privateca.v1.CaPool] to - // include in the response. - // Further [CaPools][google.cloud.security.privateca.v1.CaPool] can subsequently be - // obtained by including the - // [ListCaPoolsResponse.next_page_token][google.cloud.security.privateca.v1.ListCaPoolsResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. Pagination token, returned earlier via - // [ListCaPoolsResponse.next_page_token][google.cloud.security.privateca.v1.ListCaPoolsResponse.next_page_token]. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Only include resources that match the filter in the response. - Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` - // Optional. Specify how the results should be sorted. - OrderBy string `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` -} - -func (x *ListCaPoolsRequest) Reset() { - *x = ListCaPoolsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCaPoolsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCaPoolsRequest) ProtoMessage() {} - -func (x *ListCaPoolsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCaPoolsRequest.ProtoReflect.Descriptor instead. -func (*ListCaPoolsRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{24} -} - -func (x *ListCaPoolsRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListCaPoolsRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCaPoolsRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -func (x *ListCaPoolsRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCaPoolsRequest) GetOrderBy() string { - if x != nil { - return x.OrderBy - } - return "" -} - -// Response message for -// [CertificateAuthorityService.ListCaPools][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools]. -type ListCaPoolsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of [CaPools][google.cloud.security.privateca.v1.CaPool]. - CaPools []*CaPool `protobuf:"bytes,1,rep,name=ca_pools,json=caPools,proto3" json:"ca_pools,omitempty"` - // A token to retrieve next page of results. Pass this value in - // [ListCertificateAuthoritiesRequest.next_page_token][] to retrieve the next - // page of results. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // A list of locations (e.g. "us-west1") that could not be reached. - Unreachable []string `protobuf:"bytes,3,rep,name=unreachable,proto3" json:"unreachable,omitempty"` -} - -func (x *ListCaPoolsResponse) Reset() { - *x = ListCaPoolsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCaPoolsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCaPoolsResponse) ProtoMessage() {} - -func (x *ListCaPoolsResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCaPoolsResponse.ProtoReflect.Descriptor instead. -func (*ListCaPoolsResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{25} -} - -func (x *ListCaPoolsResponse) GetCaPools() []*CaPool { - if x != nil { - return x.CaPools - } - return nil -} - -func (x *ListCaPoolsResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *ListCaPoolsResponse) GetUnreachable() []string { - if x != nil { - return x.Unreachable - } - return nil -} - -// Request message for -// [CertificateAuthorityService.GetCertificateRevocationList][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateRevocationList]. -type GetCertificateRevocationListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The [name][google.cloud.security.privateca.v1.CertificateRevocationList.name] of the - // [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] to get. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetCertificateRevocationListRequest) Reset() { - *x = GetCertificateRevocationListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCertificateRevocationListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCertificateRevocationListRequest) ProtoMessage() {} - -func (x *GetCertificateRevocationListRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCertificateRevocationListRequest.ProtoReflect.Descriptor instead. -func (*GetCertificateRevocationListRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{26} -} - -func (x *GetCertificateRevocationListRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for -// [CertificateAuthorityService.ListCertificateRevocationLists][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists]. -type ListCertificateRevocationListsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList], in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. Limit on the number of - // [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList] to include in the - // response. Further [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList] - // can subsequently be obtained by including the - // [ListCertificateRevocationListsResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. Pagination token, returned earlier via - // [ListCertificateRevocationListsResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse.next_page_token]. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Only include resources that match the filter in the response. - Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` - // Optional. Specify how the results should be sorted. - OrderBy string `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` -} - -func (x *ListCertificateRevocationListsRequest) Reset() { - *x = ListCertificateRevocationListsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateRevocationListsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateRevocationListsRequest) ProtoMessage() {} - -func (x *ListCertificateRevocationListsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateRevocationListsRequest.ProtoReflect.Descriptor instead. -func (*ListCertificateRevocationListsRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{27} -} - -func (x *ListCertificateRevocationListsRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListCertificateRevocationListsRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCertificateRevocationListsRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -func (x *ListCertificateRevocationListsRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCertificateRevocationListsRequest) GetOrderBy() string { - if x != nil { - return x.OrderBy - } - return "" -} - -// Response message for -// [CertificateAuthorityService.ListCertificateRevocationLists][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists]. -type ListCertificateRevocationListsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList]. - CertificateRevocationLists []*CertificateRevocationList `protobuf:"bytes,1,rep,name=certificate_revocation_lists,json=certificateRevocationLists,proto3" json:"certificate_revocation_lists,omitempty"` - // A token to retrieve next page of results. Pass this value in - // [ListCertificateRevocationListsRequest.next_page_token][] to retrieve the - // next page of results. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // A list of locations (e.g. "us-west1") that could not be reached. - Unreachable []string `protobuf:"bytes,3,rep,name=unreachable,proto3" json:"unreachable,omitempty"` -} - -func (x *ListCertificateRevocationListsResponse) Reset() { - *x = ListCertificateRevocationListsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateRevocationListsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateRevocationListsResponse) ProtoMessage() {} - -func (x *ListCertificateRevocationListsResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateRevocationListsResponse.ProtoReflect.Descriptor instead. -func (*ListCertificateRevocationListsResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{28} -} - -func (x *ListCertificateRevocationListsResponse) GetCertificateRevocationLists() []*CertificateRevocationList { - if x != nil { - return x.CertificateRevocationLists - } - return nil -} - -func (x *ListCertificateRevocationListsResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *ListCertificateRevocationListsResponse) GetUnreachable() []string { - if x != nil { - return x.Unreachable - } - return nil -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateRevocationList][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateRevocationList]. -type UpdateCertificateRevocationListRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] with updated values. - CertificateRevocationList *CertificateRevocationList `protobuf:"bytes,1,opt,name=certificate_revocation_list,json=certificateRevocationList,proto3" json:"certificate_revocation_list,omitempty"` - // Required. A list of fields to be updated in this request. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UpdateCertificateRevocationListRequest) Reset() { - *x = UpdateCertificateRevocationListRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCertificateRevocationListRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCertificateRevocationListRequest) ProtoMessage() {} - -func (x *UpdateCertificateRevocationListRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCertificateRevocationListRequest.ProtoReflect.Descriptor instead. -func (*UpdateCertificateRevocationListRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{29} -} - -func (x *UpdateCertificateRevocationListRequest) GetCertificateRevocationList() *CertificateRevocationList { - if x != nil { - return x.CertificateRevocationList - } - return nil -} - -func (x *UpdateCertificateRevocationListRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -func (x *UpdateCertificateRevocationListRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.CreateCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateTemplate]. -type CreateCertificateTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate], in the format - // `projects/*/locations/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - CertificateTemplateId string `protobuf:"bytes,2,opt,name=certificate_template_id,json=certificateTemplateId,proto3" json:"certificate_template_id,omitempty"` - // Required. A [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with initial field values. - CertificateTemplate *CertificateTemplate `protobuf:"bytes,3,opt,name=certificate_template,json=certificateTemplate,proto3" json:"certificate_template,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,4,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *CreateCertificateTemplateRequest) Reset() { - *x = CreateCertificateTemplateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CreateCertificateTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CreateCertificateTemplateRequest) ProtoMessage() {} - -func (x *CreateCertificateTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CreateCertificateTemplateRequest.ProtoReflect.Descriptor instead. -func (*CreateCertificateTemplateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{30} -} - -func (x *CreateCertificateTemplateRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *CreateCertificateTemplateRequest) GetCertificateTemplateId() string { - if x != nil { - return x.CertificateTemplateId - } - return "" -} - -func (x *CreateCertificateTemplateRequest) GetCertificateTemplate() *CertificateTemplate { - if x != nil { - return x.CertificateTemplate - } - return nil -} - -func (x *CreateCertificateTemplateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.DeleteCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateTemplate]. -type DeleteCertificateTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name for this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] in the format - // `projects/*/locations/*/certificateTemplates/*`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,2,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *DeleteCertificateTemplateRequest) Reset() { - *x = DeleteCertificateTemplateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteCertificateTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteCertificateTemplateRequest) ProtoMessage() {} - -func (x *DeleteCertificateTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteCertificateTemplateRequest.ProtoReflect.Descriptor instead. -func (*DeleteCertificateTemplateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{31} -} - -func (x *DeleteCertificateTemplateRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *DeleteCertificateTemplateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Request message for -// [CertificateAuthorityService.GetCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateTemplate]. -type GetCertificateTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The [name][google.cloud.security.privateca.v1.CertificateTemplate.name] of the [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] to - // get. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetCertificateTemplateRequest) Reset() { - *x = GetCertificateTemplateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetCertificateTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetCertificateTemplateRequest) ProtoMessage() {} - -func (x *GetCertificateTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetCertificateTemplateRequest.ProtoReflect.Descriptor instead. -func (*GetCertificateTemplateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{32} -} - -func (x *GetCertificateTemplateRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Request message for -// [CertificateAuthorityService.ListCertificateTemplates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates]. -type ListCertificateTemplatesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The resource name of the location associated with the - // [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate], in the format - // `projects/*/locations/*`. - Parent string `protobuf:"bytes,1,opt,name=parent,proto3" json:"parent,omitempty"` - // Optional. Limit on the number of - // [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate] to include in the response. - // Further [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate] can subsequently be - // obtained by including the - // [ListCertificateTemplatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateTemplatesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. Pagination token, returned earlier via - // [ListCertificateTemplatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateTemplatesResponse.next_page_token]. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Only include resources that match the filter in the response. - Filter string `protobuf:"bytes,4,opt,name=filter,proto3" json:"filter,omitempty"` - // Optional. Specify how the results should be sorted. - OrderBy string `protobuf:"bytes,5,opt,name=order_by,json=orderBy,proto3" json:"order_by,omitempty"` -} - -func (x *ListCertificateTemplatesRequest) Reset() { - *x = ListCertificateTemplatesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateTemplatesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateTemplatesRequest) ProtoMessage() {} - -func (x *ListCertificateTemplatesRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateTemplatesRequest.ProtoReflect.Descriptor instead. -func (*ListCertificateTemplatesRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{33} -} - -func (x *ListCertificateTemplatesRequest) GetParent() string { - if x != nil { - return x.Parent - } - return "" -} - -func (x *ListCertificateTemplatesRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListCertificateTemplatesRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -func (x *ListCertificateTemplatesRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListCertificateTemplatesRequest) GetOrderBy() string { - if x != nil { - return x.OrderBy - } - return "" -} - -// Response message for -// [CertificateAuthorityService.ListCertificateTemplates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates]. -type ListCertificateTemplatesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate]. - CertificateTemplates []*CertificateTemplate `protobuf:"bytes,1,rep,name=certificate_templates,json=certificateTemplates,proto3" json:"certificate_templates,omitempty"` - // A token to retrieve next page of results. Pass this value in - // [ListCertificateTemplatesRequest.next_page_token][] to retrieve - // the next page of results. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - // A list of locations (e.g. "us-west1") that could not be reached. - Unreachable []string `protobuf:"bytes,3,rep,name=unreachable,proto3" json:"unreachable,omitempty"` -} - -func (x *ListCertificateTemplatesResponse) Reset() { - *x = ListCertificateTemplatesResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListCertificateTemplatesResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListCertificateTemplatesResponse) ProtoMessage() {} - -func (x *ListCertificateTemplatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListCertificateTemplatesResponse.ProtoReflect.Descriptor instead. -func (*ListCertificateTemplatesResponse) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{34} -} - -func (x *ListCertificateTemplatesResponse) GetCertificateTemplates() []*CertificateTemplate { - if x != nil { - return x.CertificateTemplates - } - return nil -} - -func (x *ListCertificateTemplatesResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -func (x *ListCertificateTemplatesResponse) GetUnreachable() []string { - if x != nil { - return x.Unreachable - } - return nil -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateTemplate]. -type UpdateCertificateTemplateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with updated values. - CertificateTemplate *CertificateTemplate `protobuf:"bytes,1,opt,name=certificate_template,json=certificateTemplate,proto3" json:"certificate_template,omitempty"` - // Required. A list of fields to be updated in this request. - UpdateMask *fieldmaskpb.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - // Optional. An WorkloadID to identify requests. Specify a unique request WorkloadID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // WorkloadID, the server can check if original operation with the same request WorkloadID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,3,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` -} - -func (x *UpdateCertificateTemplateRequest) Reset() { - *x = UpdateCertificateTemplateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpdateCertificateTemplateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpdateCertificateTemplateRequest) ProtoMessage() {} - -func (x *UpdateCertificateTemplateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpdateCertificateTemplateRequest.ProtoReflect.Descriptor instead. -func (*UpdateCertificateTemplateRequest) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{35} -} - -func (x *UpdateCertificateTemplateRequest) GetCertificateTemplate() *CertificateTemplate { - if x != nil { - return x.CertificateTemplate - } - return nil -} - -func (x *UpdateCertificateTemplateRequest) GetUpdateMask() *fieldmaskpb.FieldMask { - if x != nil { - return x.UpdateMask - } - return nil -} - -func (x *UpdateCertificateTemplateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -// Represents the metadata of the long-running operation. -type OperationMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Output only. The time the operation was created. - CreateTime *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty"` - // Output only. The time the operation finished running. - EndTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"` - // Output only. Server-defined resource path for the target of the operation. - Target string `protobuf:"bytes,3,opt,name=target,proto3" json:"target,omitempty"` - // Output only. Name of the verb executed by the operation. - Verb string `protobuf:"bytes,4,opt,name=verb,proto3" json:"verb,omitempty"` - // Output only. Human-readable status of the operation, if any. - StatusMessage string `protobuf:"bytes,5,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"` - // Output only. Identifies whether the user has requested cancellation - // of the operation. Operations that have successfully been cancelled - // have [Operation.error][] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, - // corresponding to `Code.CANCELLED`. - RequestedCancellation bool `protobuf:"varint,6,opt,name=requested_cancellation,json=requestedCancellation,proto3" json:"requested_cancellation,omitempty"` - // Output only. API version used to start the operation. - ApiVersion string `protobuf:"bytes,7,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` -} - -func (x *OperationMetadata) Reset() { - *x = OperationMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OperationMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OperationMetadata) ProtoMessage() {} - -func (x *OperationMetadata) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OperationMetadata.ProtoReflect.Descriptor instead. -func (*OperationMetadata) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{36} -} - -func (x *OperationMetadata) GetCreateTime() *timestamppb.Timestamp { - if x != nil { - return x.CreateTime - } - return nil -} - -func (x *OperationMetadata) GetEndTime() *timestamppb.Timestamp { - if x != nil { - return x.EndTime - } - return nil -} - -func (x *OperationMetadata) GetTarget() string { - if x != nil { - return x.Target - } - return "" -} - -func (x *OperationMetadata) GetVerb() string { - if x != nil { - return x.Verb - } - return "" -} - -func (x *OperationMetadata) GetStatusMessage() string { - if x != nil { - return x.StatusMessage - } - return "" -} - -func (x *OperationMetadata) GetRequestedCancellation() bool { - if x != nil { - return x.RequestedCancellation - } - return false -} - -func (x *OperationMetadata) GetApiVersion() string { - if x != nil { - return x.ApiVersion - } - return "" -} - -type FetchCaCertsResponse_CertChain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The certificates that form the CA chain, from leaf to root order. - Certificates []string `protobuf:"bytes,1,rep,name=certificates,proto3" json:"certificates,omitempty"` -} - -func (x *FetchCaCertsResponse_CertChain) Reset() { - *x = FetchCaCertsResponse_CertChain{} - if protoimpl.UnsafeEnabled { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FetchCaCertsResponse_CertChain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FetchCaCertsResponse_CertChain) ProtoMessage() {} - -func (x *FetchCaCertsResponse_CertChain) ProtoReflect() protoreflect.Message { - mi := &file_google_cloud_security_privateca_v1_service_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FetchCaCertsResponse_CertChain.ProtoReflect.Descriptor instead. -func (*FetchCaCertsResponse_CertChain) Descriptor() ([]byte, []int) { - return file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP(), []int{22, 0} -} - -func (x *FetchCaCertsResponse_CertChain) GetCertificates() []string { - if x != nil { - return x.Certificates - } - return nil -} - -var File_google_cloud_security_privateca_v1_service_proto protoreflect.FileDescriptor - -var file_google_cloud_security_privateca_v1_service_proto_rawDesc = []byte{ - 0x0a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x22, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, - 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x23, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x81, 0x03, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x40, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x21, 0x0a, 0x1f, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, - 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x0e, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x0d, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, - 0x64, 0x12, 0x57, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, - 0x29, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x0c, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x20, 0x69, 0x73, - 0x73, 0x75, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x1d, 0x69, 0x73, 0x73, 0x75, - 0x69, 0x6e, 0x67, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x49, 0x64, 0x22, 0x5a, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xe2, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x40, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x21, 0x0a, 0x1f, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x01, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0xb9, 0x01, 0x0a, 0x18, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x53, 0x0a, 0x0c, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0c, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, - 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xd6, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x76, 0x6f, 0x6b, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2d, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x26, 0x0a, 0x24, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, - 0xdb, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x0b, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xb6, 0x02, - 0x0a, 0x23, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, - 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x32, 0x0a, 0x12, 0x70, 0x65, 0x6d, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x10, 0x70, 0x65, 0x6d, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6a, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x11, - 0x73, 0x75, 0x62, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xbf, 0x02, 0x0a, 0x21, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x06, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, - 0x01, 0x02, 0xfa, 0x41, 0x21, 0x0a, 0x1f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3e, - 0x0a, 0x18, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x73, - 0x0a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x14, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x95, 0x01, 0x0a, 0x22, 0x44, 0x69, 0x73, - 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, - 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, - 0x22, 0x94, 0x01, 0x0a, 0x21, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x23, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x43, 0x73, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, - 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x24, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x73, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x65, 0x6d, 0x5f, 0x63, 0x73, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x06, 0x70, 0x65, 0x6d, 0x43, 0x73, - 0x72, 0x22, 0x6c, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0xec, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x21, 0x0a, 0x1f, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, - 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x70, 0x61, - 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x1c, 0x0a, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, - 0x08, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0xe1, - 0x01, 0x0a, 0x22, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x17, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, - 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x16, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, - 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, - 0x6c, 0x65, 0x22, 0x96, 0x01, 0x0a, 0x23, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, - 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xd8, 0x01, 0x0a, 0x21, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, - 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x64, 0x12, 0x42, 0x0a, 0x1a, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x18, 0x69, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x22, 0x80, 0x02, 0x0a, 0x21, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x73, 0x0a, 0x15, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x14, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, - 0x73, 0x6b, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xed, 0x01, 0x0a, 0x13, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x42, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, - 0x08, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x07, 0x63, 0x61, 0x5f, - 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x63, 0x61, - 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x13, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x49, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x41, 0x0a, 0x0b, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, - 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x61, - 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, - 0x41, 0x21, 0x0a, 0x1f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, - 0x6f, 0x6f, 0x6c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x7d, - 0x0a, 0x13, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x07, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x21, 0x0a, - 0x1f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, - 0x52, 0x06, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xa6, 0x01, - 0x0a, 0x14, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x08, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x07, 0x63, 0x61, - 0x43, 0x65, 0x72, 0x74, 0x73, 0x1a, 0x2f, 0x0a, 0x09, 0x43, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x22, 0x50, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x61, 0x50, - 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, - 0x21, 0x0a, 0x1f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x61, 0x50, 0x6f, - 0x6f, 0x6c, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x42, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, 0x70, 0x61, - 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x01, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, - 0x52, 0x07, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, - 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, - 0x62, 0x6c, 0x65, 0x22, 0x76, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3b, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, - 0x34, 0x0a, 0x32, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xfe, 0x01, 0x0a, 0x25, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2f, 0x0a, 0x2d, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x06, 0x70, - 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, - 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x01, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, - 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x01, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0xf3, 0x01, 0x0a, - 0x26, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7f, 0x0a, 0x1c, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x1a, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, - 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, - 0x6c, 0x65, 0x22, 0x96, 0x02, 0x0a, 0x26, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x83, 0x01, - 0x0a, 0x1b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x19, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, - 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xbb, 0x02, 0x0a, 0x20, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x42, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x2a, 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x17, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x15, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x49, 0x64, 0x12, 0x70, 0x0a, 0x14, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, - 0x13, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x20, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0xe2, 0x41, - 0x01, 0x02, 0xfa, 0x41, 0x2e, 0x0a, 0x2c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0x6a, - 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x49, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x35, 0xe2, - 0x41, 0x01, 0x02, 0xfa, 0x41, 0x2e, 0x0a, 0x2c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x1f, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, - 0x0a, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x2a, - 0xe2, 0x41, 0x01, 0x02, 0xfa, 0x41, 0x23, 0x0a, 0x21, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x08, 0x70, 0x61, 0x67, - 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x23, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x06, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x08, 0x6f, 0x72, 0x64, 0x65, - 0x72, 0x5f, 0x62, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, - 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x22, 0xda, 0x01, 0x0a, 0x20, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, - 0x0a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x14, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0f, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x75, 0x6e, 0x72, 0x65, 0x61, - 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x70, 0x0a, 0x14, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x13, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x41, 0x0a, - 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x61, 0x73, 0x6b, - 0x12, 0x23, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x01, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x64, 0x22, 0xdc, 0x02, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x41, 0x0a, 0x0b, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x03, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3b, - 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x03, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x76, 0x65, 0x72, - 0x62, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x04, 0x76, - 0x65, 0x72, 0x62, 0x12, 0x2b, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x3b, 0x0a, 0x16, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, - 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x15, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, - 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x03, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x32, 0xfa, 0x3b, 0x0a, 0x1b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0xf7, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x73, 0xda, 0x41, 0x21, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x2c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x22, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, - 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, - 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x73, 0x3a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0xc7, - 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x12, 0x39, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x49, 0xda, - 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x76, - 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, - 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x3b, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, - 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0xd7, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, 0x53, 0xda, 0x41, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, - 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x3a, 0x01, 0x2a, 0x12, - 0xf9, 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x22, 0x75, 0xda, 0x41, 0x17, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x32, 0x46, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x0b, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x94, 0x02, 0x0a, 0x1c, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x47, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, - 0x22, 0x4d, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x3a, - 0x01, 0x2a, 0x12, 0xcc, 0x02, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc7, 0x01, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x35, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x5d, 0x22, 0x44, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x3a, 0x15, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x91, 0x02, 0x0a, 0x1b, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x46, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8a, 0x01, 0xca, 0x41, 0x29, 0x0a, 0x14, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x51, 0x22, 0x4c, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, - 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x64, 0x69, 0x73, 0x61, 0x62, - 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8e, 0x02, 0x0a, 0x1a, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x12, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, - 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x89, 0x01, 0xca, 0x41, 0x29, - 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x22, 0x4b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x8c, 0x02, 0x0a, 0x1c, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x43, 0x73, 0x72, 0x12, 0x47, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x73, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x48, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, - 0x73, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x59, 0xda, 0x41, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, - 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, - 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, - 0x66, 0x65, 0x74, 0x63, 0x68, 0x12, 0xec, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x42, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, - 0x53, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, - 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0x82, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x46, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x55, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, - 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x94, 0x02, 0x0a, 0x1c, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x47, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, - 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x11, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x22, 0x4d, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, - 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x3a, 0x01, 0x2a, - 0x12, 0x83, 0x02, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, - 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7f, 0xca, 0x41, 0x29, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, - 0x2a, 0x44, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xce, 0x02, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x45, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc9, 0x01, 0xca, 0x41, - 0x29, 0x0a, 0x14, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x21, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x73, 0x32, 0x5a, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, - 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, - 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, - 0x3a, 0x15, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0xde, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, - 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x76, 0xca, 0x41, 0x1b, 0x0a, 0x06, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x11, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xda, 0x41, 0x19, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x2c, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x2c, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x64, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x36, 0x22, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x3a, - 0x07, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0xe0, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, - 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x78, 0xca, 0x41, 0x1b, 0x0a, 0x06, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x11, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xda, 0x41, 0x13, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2c, 0x75, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x32, 0x33, 0x2f, - 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, - 0x2a, 0x7d, 0x3a, 0x07, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0xa9, 0x01, 0x0a, 0x09, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x34, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x22, 0x3a, 0xda, 0x41, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x76, 0x31, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, - 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, - 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xbc, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, - 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, - 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x12, 0xcf, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x67, 0xca, 0x41, 0x2a, 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x11, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, 0x76, 0x31, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, - 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xd3, 0x01, 0x0a, 0x0c, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x12, 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, - 0x65, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0xda, 0x41, - 0x07, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x61, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x3d, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x12, 0x98, - 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x47, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x70, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x12, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x12, 0xab, 0x02, 0x0a, 0x1e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x49, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x4a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x72, 0xda, 0x41, 0x06, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x63, 0x12, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, 0x73, - 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x12, 0x8d, 0x03, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x4a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfe, 0x01, 0xca, 0x41, 0x2e, 0x0a, 0x19, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x27, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, - 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9c, 0x01, 0x32, 0x7d, 0x2f, 0x76, 0x31, - 0x2f, 0x7b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x61, 0x50, 0x6f, 0x6f, 0x6c, - 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x1b, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xba, 0x02, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, - 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, - 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x01, 0xca, 0x41, 0x28, - 0x0a, 0x13, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x33, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x2c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x50, 0x22, 0x38, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, - 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x14, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x9a, 0x02, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x97, 0x01, 0xca, 0x41, 0x4d, 0x0a, 0x15, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x12, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x2a, 0x38, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x2a, - 0x7d, 0x12, 0xdd, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x41, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x37, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x22, 0x47, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x2a, - 0x7d, 0x12, 0xf0, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x43, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, - 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0xda, 0x41, 0x06, 0x70, 0x61, - 0x72, 0x65, 0x6e, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x76, 0x31, 0x2f, - 0x7b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x3d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x7d, 0x2f, - 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x12, 0xbc, 0x02, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0x44, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x63, 0x6c, 0x6f, 0x75, - 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb9, 0x01, 0xca, 0x41, 0x28, 0x0a, 0x13, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x12, 0x11, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xda, 0x41, 0x20, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2c, 0x75, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x32, 0x4d, - 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x2a, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x2a, 0x7d, 0x3a, 0x14, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x1a, 0x4c, 0xca, 0x41, 0x18, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, - 0x61, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, - 0xd2, 0x41, 0x2e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x75, - 0x74, 0x68, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2d, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x42, 0xfd, 0x01, 0x0a, 0x26, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x50, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, - 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x2f, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x2f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0x2f, 0x76, - 0x31, 0x3b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x63, 0x61, 0xf8, 0x01, 0x01, 0xaa, 0x02, - 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x41, - 0x2e, 0x56, 0x31, 0xca, 0x02, 0x22, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x43, 0x6c, 0x6f, - 0x75, 0x64, 0x5c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5c, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x43, 0x41, 0x5c, 0x56, 0x31, 0xea, 0x02, 0x26, 0x47, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x3a, 0x3a, 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x3a, 0x3a, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x3a, 0x3a, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x41, 0x3a, 0x3a, 0x56, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_cloud_security_privateca_v1_service_proto_rawDescOnce sync.Once - file_google_cloud_security_privateca_v1_service_proto_rawDescData = file_google_cloud_security_privateca_v1_service_proto_rawDesc -) - -func file_google_cloud_security_privateca_v1_service_proto_rawDescGZIP() []byte { - file_google_cloud_security_privateca_v1_service_proto_rawDescOnce.Do(func() { - file_google_cloud_security_privateca_v1_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_cloud_security_privateca_v1_service_proto_rawDescData) - }) - return file_google_cloud_security_privateca_v1_service_proto_rawDescData -} - -var file_google_cloud_security_privateca_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 38) -var file_google_cloud_security_privateca_v1_service_proto_goTypes = []interface{}{ - (*CreateCertificateRequest)(nil), // 0: google.cloud.security.privateca.v1.CreateCertificateRequest - (*GetCertificateRequest)(nil), // 1: google.cloud.security.privateca.v1.GetCertificateRequest - (*ListCertificatesRequest)(nil), // 2: google.cloud.security.privateca.v1.ListCertificatesRequest - (*ListCertificatesResponse)(nil), // 3: google.cloud.security.privateca.v1.ListCertificatesResponse - (*RevokeCertificateRequest)(nil), // 4: google.cloud.security.privateca.v1.RevokeCertificateRequest - (*UpdateCertificateRequest)(nil), // 5: google.cloud.security.privateca.v1.UpdateCertificateRequest - (*ActivateCertificateAuthorityRequest)(nil), // 6: google.cloud.security.privateca.v1.ActivateCertificateAuthorityRequest - (*CreateCertificateAuthorityRequest)(nil), // 7: google.cloud.security.privateca.v1.CreateCertificateAuthorityRequest - (*DisableCertificateAuthorityRequest)(nil), // 8: google.cloud.security.privateca.v1.DisableCertificateAuthorityRequest - (*EnableCertificateAuthorityRequest)(nil), // 9: google.cloud.security.privateca.v1.EnableCertificateAuthorityRequest - (*FetchCertificateAuthorityCsrRequest)(nil), // 10: google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrRequest - (*FetchCertificateAuthorityCsrResponse)(nil), // 11: google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrResponse - (*GetCertificateAuthorityRequest)(nil), // 12: google.cloud.security.privateca.v1.GetCertificateAuthorityRequest - (*ListCertificateAuthoritiesRequest)(nil), // 13: google.cloud.security.privateca.v1.ListCertificateAuthoritiesRequest - (*ListCertificateAuthoritiesResponse)(nil), // 14: google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse - (*UndeleteCertificateAuthorityRequest)(nil), // 15: google.cloud.security.privateca.v1.UndeleteCertificateAuthorityRequest - (*DeleteCertificateAuthorityRequest)(nil), // 16: google.cloud.security.privateca.v1.DeleteCertificateAuthorityRequest - (*UpdateCertificateAuthorityRequest)(nil), // 17: google.cloud.security.privateca.v1.UpdateCertificateAuthorityRequest - (*CreateCaPoolRequest)(nil), // 18: google.cloud.security.privateca.v1.CreateCaPoolRequest - (*UpdateCaPoolRequest)(nil), // 19: google.cloud.security.privateca.v1.UpdateCaPoolRequest - (*DeleteCaPoolRequest)(nil), // 20: google.cloud.security.privateca.v1.DeleteCaPoolRequest - (*FetchCaCertsRequest)(nil), // 21: google.cloud.security.privateca.v1.FetchCaCertsRequest - (*FetchCaCertsResponse)(nil), // 22: google.cloud.security.privateca.v1.FetchCaCertsResponse - (*GetCaPoolRequest)(nil), // 23: google.cloud.security.privateca.v1.GetCaPoolRequest - (*ListCaPoolsRequest)(nil), // 24: google.cloud.security.privateca.v1.ListCaPoolsRequest - (*ListCaPoolsResponse)(nil), // 25: google.cloud.security.privateca.v1.ListCaPoolsResponse - (*GetCertificateRevocationListRequest)(nil), // 26: google.cloud.security.privateca.v1.GetCertificateRevocationListRequest - (*ListCertificateRevocationListsRequest)(nil), // 27: google.cloud.security.privateca.v1.ListCertificateRevocationListsRequest - (*ListCertificateRevocationListsResponse)(nil), // 28: google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse - (*UpdateCertificateRevocationListRequest)(nil), // 29: google.cloud.security.privateca.v1.UpdateCertificateRevocationListRequest - (*CreateCertificateTemplateRequest)(nil), // 30: google.cloud.security.privateca.v1.CreateCertificateTemplateRequest - (*DeleteCertificateTemplateRequest)(nil), // 31: google.cloud.security.privateca.v1.DeleteCertificateTemplateRequest - (*GetCertificateTemplateRequest)(nil), // 32: google.cloud.security.privateca.v1.GetCertificateTemplateRequest - (*ListCertificateTemplatesRequest)(nil), // 33: google.cloud.security.privateca.v1.ListCertificateTemplatesRequest - (*ListCertificateTemplatesResponse)(nil), // 34: google.cloud.security.privateca.v1.ListCertificateTemplatesResponse - (*UpdateCertificateTemplateRequest)(nil), // 35: google.cloud.security.privateca.v1.UpdateCertificateTemplateRequest - (*OperationMetadata)(nil), // 36: google.cloud.security.privateca.v1.OperationMetadata - (*FetchCaCertsResponse_CertChain)(nil), // 37: google.cloud.security.privateca.v1.FetchCaCertsResponse.CertChain - (*Certificate)(nil), // 38: google.cloud.security.privateca.v1.Certificate - (RevocationReason)(0), // 39: google.cloud.security.privateca.v1.RevocationReason - (*fieldmaskpb.FieldMask)(nil), // 40: google.protobuf.FieldMask - (*SubordinateConfig)(nil), // 41: google.cloud.security.privateca.v1.SubordinateConfig - (*CertificateAuthority)(nil), // 42: google.cloud.security.privateca.v1.CertificateAuthority - (*CaPool)(nil), // 43: google.cloud.security.privateca.v1.CaPool - (*CertificateRevocationList)(nil), // 44: google.cloud.security.privateca.v1.CertificateRevocationList - (*CertificateTemplate)(nil), // 45: google.cloud.security.privateca.v1.CertificateTemplate - (*timestamppb.Timestamp)(nil), // 46: google.protobuf.Timestamp - (*longrunning.Operation)(nil), // 47: google.longrunning.Operation -} -var file_google_cloud_security_privateca_v1_service_proto_depIdxs = []int32{ - 38, // 0: google.cloud.security.privateca.v1.CreateCertificateRequest.certificate:type_name -> google.cloud.security.privateca.v1.Certificate - 38, // 1: google.cloud.security.privateca.v1.ListCertificatesResponse.certificates:type_name -> google.cloud.security.privateca.v1.Certificate - 39, // 2: google.cloud.security.privateca.v1.RevokeCertificateRequest.reason:type_name -> google.cloud.security.privateca.v1.RevocationReason - 38, // 3: google.cloud.security.privateca.v1.UpdateCertificateRequest.certificate:type_name -> google.cloud.security.privateca.v1.Certificate - 40, // 4: google.cloud.security.privateca.v1.UpdateCertificateRequest.update_mask:type_name -> google.protobuf.FieldMask - 41, // 5: google.cloud.security.privateca.v1.ActivateCertificateAuthorityRequest.subordinate_config:type_name -> google.cloud.security.privateca.v1.SubordinateConfig - 42, // 6: google.cloud.security.privateca.v1.CreateCertificateAuthorityRequest.certificate_authority:type_name -> google.cloud.security.privateca.v1.CertificateAuthority - 42, // 7: google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse.certificate_authorities:type_name -> google.cloud.security.privateca.v1.CertificateAuthority - 42, // 8: google.cloud.security.privateca.v1.UpdateCertificateAuthorityRequest.certificate_authority:type_name -> google.cloud.security.privateca.v1.CertificateAuthority - 40, // 9: google.cloud.security.privateca.v1.UpdateCertificateAuthorityRequest.update_mask:type_name -> google.protobuf.FieldMask - 43, // 10: google.cloud.security.privateca.v1.CreateCaPoolRequest.ca_pool:type_name -> google.cloud.security.privateca.v1.CaPool - 43, // 11: google.cloud.security.privateca.v1.UpdateCaPoolRequest.ca_pool:type_name -> google.cloud.security.privateca.v1.CaPool - 40, // 12: google.cloud.security.privateca.v1.UpdateCaPoolRequest.update_mask:type_name -> google.protobuf.FieldMask - 37, // 13: google.cloud.security.privateca.v1.FetchCaCertsResponse.ca_certs:type_name -> google.cloud.security.privateca.v1.FetchCaCertsResponse.CertChain - 43, // 14: google.cloud.security.privateca.v1.ListCaPoolsResponse.ca_pools:type_name -> google.cloud.security.privateca.v1.CaPool - 44, // 15: google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse.certificate_revocation_lists:type_name -> google.cloud.security.privateca.v1.CertificateRevocationList - 44, // 16: google.cloud.security.privateca.v1.UpdateCertificateRevocationListRequest.certificate_revocation_list:type_name -> google.cloud.security.privateca.v1.CertificateRevocationList - 40, // 17: google.cloud.security.privateca.v1.UpdateCertificateRevocationListRequest.update_mask:type_name -> google.protobuf.FieldMask - 45, // 18: google.cloud.security.privateca.v1.CreateCertificateTemplateRequest.certificate_template:type_name -> google.cloud.security.privateca.v1.CertificateTemplate - 45, // 19: google.cloud.security.privateca.v1.ListCertificateTemplatesResponse.certificate_templates:type_name -> google.cloud.security.privateca.v1.CertificateTemplate - 45, // 20: google.cloud.security.privateca.v1.UpdateCertificateTemplateRequest.certificate_template:type_name -> google.cloud.security.privateca.v1.CertificateTemplate - 40, // 21: google.cloud.security.privateca.v1.UpdateCertificateTemplateRequest.update_mask:type_name -> google.protobuf.FieldMask - 46, // 22: google.cloud.security.privateca.v1.OperationMetadata.create_time:type_name -> google.protobuf.Timestamp - 46, // 23: google.cloud.security.privateca.v1.OperationMetadata.end_time:type_name -> google.protobuf.Timestamp - 0, // 24: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate:input_type -> google.cloud.security.privateca.v1.CreateCertificateRequest - 1, // 25: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificate:input_type -> google.cloud.security.privateca.v1.GetCertificateRequest - 2, // 26: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates:input_type -> google.cloud.security.privateca.v1.ListCertificatesRequest - 4, // 27: google.cloud.security.privateca.v1.CertificateAuthorityService.RevokeCertificate:input_type -> google.cloud.security.privateca.v1.RevokeCertificateRequest - 5, // 28: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificate:input_type -> google.cloud.security.privateca.v1.UpdateCertificateRequest - 6, // 29: google.cloud.security.privateca.v1.CertificateAuthorityService.ActivateCertificateAuthority:input_type -> google.cloud.security.privateca.v1.ActivateCertificateAuthorityRequest - 7, // 30: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateAuthority:input_type -> google.cloud.security.privateca.v1.CreateCertificateAuthorityRequest - 8, // 31: google.cloud.security.privateca.v1.CertificateAuthorityService.DisableCertificateAuthority:input_type -> google.cloud.security.privateca.v1.DisableCertificateAuthorityRequest - 9, // 32: google.cloud.security.privateca.v1.CertificateAuthorityService.EnableCertificateAuthority:input_type -> google.cloud.security.privateca.v1.EnableCertificateAuthorityRequest - 10, // 33: google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr:input_type -> google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrRequest - 12, // 34: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateAuthority:input_type -> google.cloud.security.privateca.v1.GetCertificateAuthorityRequest - 13, // 35: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities:input_type -> google.cloud.security.privateca.v1.ListCertificateAuthoritiesRequest - 15, // 36: google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority:input_type -> google.cloud.security.privateca.v1.UndeleteCertificateAuthorityRequest - 16, // 37: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateAuthority:input_type -> google.cloud.security.privateca.v1.DeleteCertificateAuthorityRequest - 17, // 38: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateAuthority:input_type -> google.cloud.security.privateca.v1.UpdateCertificateAuthorityRequest - 18, // 39: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCaPool:input_type -> google.cloud.security.privateca.v1.CreateCaPoolRequest - 19, // 40: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCaPool:input_type -> google.cloud.security.privateca.v1.UpdateCaPoolRequest - 23, // 41: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCaPool:input_type -> google.cloud.security.privateca.v1.GetCaPoolRequest - 24, // 42: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools:input_type -> google.cloud.security.privateca.v1.ListCaPoolsRequest - 20, // 43: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCaPool:input_type -> google.cloud.security.privateca.v1.DeleteCaPoolRequest - 21, // 44: google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts:input_type -> google.cloud.security.privateca.v1.FetchCaCertsRequest - 26, // 45: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateRevocationList:input_type -> google.cloud.security.privateca.v1.GetCertificateRevocationListRequest - 27, // 46: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists:input_type -> google.cloud.security.privateca.v1.ListCertificateRevocationListsRequest - 29, // 47: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateRevocationList:input_type -> google.cloud.security.privateca.v1.UpdateCertificateRevocationListRequest - 30, // 48: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateTemplate:input_type -> google.cloud.security.privateca.v1.CreateCertificateTemplateRequest - 31, // 49: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateTemplate:input_type -> google.cloud.security.privateca.v1.DeleteCertificateTemplateRequest - 32, // 50: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateTemplate:input_type -> google.cloud.security.privateca.v1.GetCertificateTemplateRequest - 33, // 51: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates:input_type -> google.cloud.security.privateca.v1.ListCertificateTemplatesRequest - 35, // 52: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateTemplate:input_type -> google.cloud.security.privateca.v1.UpdateCertificateTemplateRequest - 38, // 53: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate:output_type -> google.cloud.security.privateca.v1.Certificate - 38, // 54: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificate:output_type -> google.cloud.security.privateca.v1.Certificate - 3, // 55: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates:output_type -> google.cloud.security.privateca.v1.ListCertificatesResponse - 38, // 56: google.cloud.security.privateca.v1.CertificateAuthorityService.RevokeCertificate:output_type -> google.cloud.security.privateca.v1.Certificate - 38, // 57: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificate:output_type -> google.cloud.security.privateca.v1.Certificate - 47, // 58: google.cloud.security.privateca.v1.CertificateAuthorityService.ActivateCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 59: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 60: google.cloud.security.privateca.v1.CertificateAuthorityService.DisableCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 61: google.cloud.security.privateca.v1.CertificateAuthorityService.EnableCertificateAuthority:output_type -> google.longrunning.Operation - 11, // 62: google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr:output_type -> google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrResponse - 42, // 63: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateAuthority:output_type -> google.cloud.security.privateca.v1.CertificateAuthority - 14, // 64: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities:output_type -> google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse - 47, // 65: google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 66: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 67: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateAuthority:output_type -> google.longrunning.Operation - 47, // 68: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCaPool:output_type -> google.longrunning.Operation - 47, // 69: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCaPool:output_type -> google.longrunning.Operation - 43, // 70: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCaPool:output_type -> google.cloud.security.privateca.v1.CaPool - 25, // 71: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools:output_type -> google.cloud.security.privateca.v1.ListCaPoolsResponse - 47, // 72: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCaPool:output_type -> google.longrunning.Operation - 22, // 73: google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts:output_type -> google.cloud.security.privateca.v1.FetchCaCertsResponse - 44, // 74: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateRevocationList:output_type -> google.cloud.security.privateca.v1.CertificateRevocationList - 28, // 75: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists:output_type -> google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse - 47, // 76: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateRevocationList:output_type -> google.longrunning.Operation - 47, // 77: google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateTemplate:output_type -> google.longrunning.Operation - 47, // 78: google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateTemplate:output_type -> google.longrunning.Operation - 45, // 79: google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateTemplate:output_type -> google.cloud.security.privateca.v1.CertificateTemplate - 34, // 80: google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates:output_type -> google.cloud.security.privateca.v1.ListCertificateTemplatesResponse - 47, // 81: google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateTemplate:output_type -> google.longrunning.Operation - 53, // [53:82] is the sub-list for method output_type - 24, // [24:53] is the sub-list for method input_type - 24, // [24:24] is the sub-list for extension type_name - 24, // [24:24] is the sub-list for extension extendee - 0, // [0:24] is the sub-list for field type_name -} - -func init() { file_google_cloud_security_privateca_v1_service_proto_init() } -func file_google_cloud_security_privateca_v1_service_proto_init() { - if File_google_cloud_security_privateca_v1_service_proto != nil { - return - } - file_google_cloud_security_privateca_v1_resources_proto_init() - if !protoimpl.UnsafeEnabled { - file_google_cloud_security_privateca_v1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificatesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RevokeCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ActivateCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DisableCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EnableCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchCertificateAuthorityCsrRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchCertificateAuthorityCsrResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateAuthoritiesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateAuthoritiesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UndeleteCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCertificateAuthorityRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCaPoolRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCaPoolRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCaPoolRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchCaCertsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchCaCertsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCaPoolRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCaPoolsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCaPoolsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCertificateRevocationListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateRevocationListsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateRevocationListsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCertificateRevocationListRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateCertificateTemplateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteCertificateTemplateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetCertificateTemplateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateTemplatesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListCertificateTemplatesResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateCertificateTemplateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OperationMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_cloud_security_privateca_v1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchCaCertsResponse_CertChain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_cloud_security_privateca_v1_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 38, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_google_cloud_security_privateca_v1_service_proto_goTypes, - DependencyIndexes: file_google_cloud_security_privateca_v1_service_proto_depIdxs, - MessageInfos: file_google_cloud_security_privateca_v1_service_proto_msgTypes, - }.Build() - File_google_cloud_security_privateca_v1_service_proto = out.File - file_google_cloud_security_privateca_v1_service_proto_rawDesc = nil - file_google_cloud_security_privateca_v1_service_proto_goTypes = nil - file_google_cloud_security_privateca_v1_service_proto_depIdxs = nil -} diff --git a/gen/proto/google/longrunning/operations.pb.go b/gen/proto/google/longrunning/operations.pb.go deleted file mode 100644 index cfbe3b7..0000000 --- a/gen/proto/google/longrunning/operations.pb.go +++ /dev/null @@ -1,928 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/longrunning/operations.proto - -package longrunning - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - status "google.golang.org/genproto/googleapis/rpc/status" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - descriptorpb "google.golang.org/protobuf/types/descriptorpb" - anypb "google.golang.org/protobuf/types/known/anypb" - durationpb "google.golang.org/protobuf/types/known/durationpb" - emptypb "google.golang.org/protobuf/types/known/emptypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// This resource represents a long-running operation that is the result of a -// network API call. -type Operation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The server-assigned name, which is only unique within the same service that - // originally returns it. If you use the default HTTP mapping, the - // `name` should be a resource name ending with `operations/{unique_id}`. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Service-specific metadata associated with the operation. It typically - // contains progress information and common metadata such as create time. - // Some services might not provide such metadata. Any method that returns a - // long-running operation should document the metadata type, if any. - Metadata *anypb.Any `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` - // If the value is `false`, it means the operation is still in progress. - // If `true`, the operation is completed, and either `error` or `response` is - // available. - Done bool `protobuf:"varint,3,opt,name=done,proto3" json:"done,omitempty"` - // The operation result, which can be either an `error` or a valid `response`. - // If `done` == `false`, neither `error` nor `response` is set. - // If `done` == `true`, exactly one of `error` or `response` is set. - // - // Types that are assignable to Result: - // *Operation_Error - // *Operation_Response - Result isOperation_Result `protobuf_oneof:"result"` -} - -func (x *Operation) Reset() { - *x = Operation{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Operation) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Operation) ProtoMessage() {} - -func (x *Operation) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Operation.ProtoReflect.Descriptor instead. -func (*Operation) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{0} -} - -func (x *Operation) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Operation) GetMetadata() *anypb.Any { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Operation) GetDone() bool { - if x != nil { - return x.Done - } - return false -} - -func (m *Operation) GetResult() isOperation_Result { - if m != nil { - return m.Result - } - return nil -} - -func (x *Operation) GetError() *status.Status { - if x, ok := x.GetResult().(*Operation_Error); ok { - return x.Error - } - return nil -} - -func (x *Operation) GetResponse() *anypb.Any { - if x, ok := x.GetResult().(*Operation_Response); ok { - return x.Response - } - return nil -} - -type isOperation_Result interface { - isOperation_Result() -} - -type Operation_Error struct { - // The error result of the operation in case of failure or cancellation. - Error *status.Status `protobuf:"bytes,4,opt,name=error,proto3,oneof"` -} - -type Operation_Response struct { - // The normal response of the operation in case of success. If the original - // method returns no data on success, such as `Delete`, the response is - // `google.protobuf.Empty`. If the original method is standard - // `Get`/`Create`/`Update`, the response should be the resource. For other - // methods, the response should have the type `XxxResponse`, where `Xxx` - // is the original method name. For example, if the original method name - // is `TakeSnapshot()`, the inferred response type is - // `TakeSnapshotResponse`. - Response *anypb.Any `protobuf:"bytes,5,opt,name=response,proto3,oneof"` -} - -func (*Operation_Error) isOperation_Result() {} - -func (*Operation_Response) isOperation_Result() {} - -// The request message for [Operations.GetOperation][google.longrunning.Operations.GetOperation]. -type GetOperationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *GetOperationRequest) Reset() { - *x = GetOperationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetOperationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetOperationRequest) ProtoMessage() {} - -func (x *GetOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetOperationRequest.ProtoReflect.Descriptor instead. -func (*GetOperationRequest) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{1} -} - -func (x *GetOperationRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The request message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. -type ListOperationsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation's parent resource. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` - // The standard list filter. - Filter string `protobuf:"bytes,1,opt,name=filter,proto3" json:"filter,omitempty"` - // The standard list page size. - PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // The standard list page token. - PageToken string `protobuf:"bytes,3,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` -} - -func (x *ListOperationsRequest) Reset() { - *x = ListOperationsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListOperationsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListOperationsRequest) ProtoMessage() {} - -func (x *ListOperationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListOperationsRequest.ProtoReflect.Descriptor instead. -func (*ListOperationsRequest) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{2} -} - -func (x *ListOperationsRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *ListOperationsRequest) GetFilter() string { - if x != nil { - return x.Filter - } - return "" -} - -func (x *ListOperationsRequest) GetPageSize() int32 { - if x != nil { - return x.PageSize - } - return 0 -} - -func (x *ListOperationsRequest) GetPageToken() string { - if x != nil { - return x.PageToken - } - return "" -} - -// The response message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. -type ListOperationsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of operations that matches the specified filter in the request. - Operations []*Operation `protobuf:"bytes,1,rep,name=operations,proto3" json:"operations,omitempty"` - // The standard List next-page token. - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` -} - -func (x *ListOperationsResponse) Reset() { - *x = ListOperationsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListOperationsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListOperationsResponse) ProtoMessage() {} - -func (x *ListOperationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListOperationsResponse.ProtoReflect.Descriptor instead. -func (*ListOperationsResponse) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{3} -} - -func (x *ListOperationsResponse) GetOperations() []*Operation { - if x != nil { - return x.Operations - } - return nil -} - -func (x *ListOperationsResponse) GetNextPageToken() string { - if x != nil { - return x.NextPageToken - } - return "" -} - -// The request message for [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]. -type CancelOperationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource to be cancelled. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *CancelOperationRequest) Reset() { - *x = CancelOperationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CancelOperationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CancelOperationRequest) ProtoMessage() {} - -func (x *CancelOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CancelOperationRequest.ProtoReflect.Descriptor instead. -func (*CancelOperationRequest) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{4} -} - -func (x *CancelOperationRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The request message for [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation]. -type DeleteOperationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource to be deleted. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *DeleteOperationRequest) Reset() { - *x = DeleteOperationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteOperationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteOperationRequest) ProtoMessage() {} - -func (x *DeleteOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteOperationRequest.ProtoReflect.Descriptor instead. -func (*DeleteOperationRequest) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{5} -} - -func (x *DeleteOperationRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The request message for [Operations.WaitOperation][google.longrunning.Operations.WaitOperation]. -type WaitOperationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the operation resource to wait on. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The maximum duration to wait before timing out. If left blank, the wait - // will be at most the time permitted by the underlying HTTP/RPC protocol. - // If RPC context deadline is also specified, the shorter one will be used. - Timeout *durationpb.Duration `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` -} - -func (x *WaitOperationRequest) Reset() { - *x = WaitOperationRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WaitOperationRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WaitOperationRequest) ProtoMessage() {} - -func (x *WaitOperationRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WaitOperationRequest.ProtoReflect.Descriptor instead. -func (*WaitOperationRequest) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{6} -} - -func (x *WaitOperationRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *WaitOperationRequest) GetTimeout() *durationpb.Duration { - if x != nil { - return x.Timeout - } - return nil -} - -// A message representing the message types used by a long-running operation. -// -// Example: -// -// rpc LongRunningRecognize(LongRunningRecognizeRequest) -// returns (google.longrunning.Operation) { -// option (google.longrunning.operation_info) = { -// response_type: "LongRunningRecognizeResponse" -// metadata_type: "LongRunningRecognizeMetadata" -// }; -// } -type OperationInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. The message name of the primary return type for this - // long-running operation. - // This type will be used to deserialize the LRO's response. - // - // If the response is in a different package from the rpc, a fully-qualified - // message name must be used (e.g. `google.protobuf.Struct`). - // - // Note: Altering this value constitutes a breaking change. - ResponseType string `protobuf:"bytes,1,opt,name=response_type,json=responseType,proto3" json:"response_type,omitempty"` - // Required. The message name of the metadata type for this long-running - // operation. - // - // If the response is in a different package from the rpc, a fully-qualified - // message name must be used (e.g. `google.protobuf.Struct`). - // - // Note: Altering this value constitutes a breaking change. - MetadataType string `protobuf:"bytes,2,opt,name=metadata_type,json=metadataType,proto3" json:"metadata_type,omitempty"` -} - -func (x *OperationInfo) Reset() { - *x = OperationInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_google_longrunning_operations_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OperationInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OperationInfo) ProtoMessage() {} - -func (x *OperationInfo) ProtoReflect() protoreflect.Message { - mi := &file_google_longrunning_operations_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OperationInfo.ProtoReflect.Descriptor instead. -func (*OperationInfo) Descriptor() ([]byte, []int) { - return file_google_longrunning_operations_proto_rawDescGZIP(), []int{7} -} - -func (x *OperationInfo) GetResponseType() string { - if x != nil { - return x.ResponseType - } - return "" -} - -func (x *OperationInfo) GetMetadataType() string { - if x != nil { - return x.MetadataType - } - return "" -} - -var file_google_longrunning_operations_proto_extTypes = []protoimpl.ExtensionInfo{ - { - ExtendedType: (*descriptorpb.MethodOptions)(nil), - ExtensionType: (*OperationInfo)(nil), - Field: 1049, - Name: "google.longrunning.operation_info", - Tag: "bytes,1049,opt,name=operation_info", - Filename: "google/longrunning/operations.proto", - }, -} - -// Extension fields to descriptorpb.MethodOptions. -var ( - // Additional information regarding long-running operations. - // In particular, this specifies the types that are returned from - // long-running operations. - // - // Required for methods that return `google.longrunning.Operation`; invalid - // otherwise. - // - // optional google.longrunning.OperationInfo operation_info = 1049; - E_OperationInfo = &file_google_longrunning_operations_proto_extTypes[0] -) - -var File_google_longrunning_operations_proto protoreflect.FileDescriptor - -var file_google_longrunning_operations_proto_rawDesc = []byte{ - 0x0a, 0x23, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x2f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, - 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, - 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xcf, 0x01, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, - 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x29, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x7f, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, - 0x7a, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x22, 0x7f, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0a, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, - 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, - 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x16, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x2c, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x5f, - 0x0a, 0x14, 0x57, 0x61, 0x69, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, - 0x59, 0x0a, 0x0d, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x32, 0xaa, 0x05, 0x0a, 0x0a, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x0e, 0x4c, 0x69, - 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2b, 0xda, 0x41, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x2c, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x7d, - 0x12, 0x7f, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2a, - 0x7d, 0x12, 0x7e, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, - 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x27, 0xda, 0x41, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x2a, 0x18, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, 0x2a, - 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x0f, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, - 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x61, 0x6e, 0x63, 0x65, - 0x6c, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x31, 0xda, 0x41, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x22, 0x1f, 0x2f, 0x76, 0x31, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x3d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x2a, - 0x2a, 0x7d, 0x3a, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x3a, 0x01, 0x2a, 0x12, 0x5a, 0x0a, 0x0d, - 0x57, 0x61, 0x69, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, - 0x6e, 0x67, 0x2e, 0x57, 0x61, 0x69, 0x74, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x1a, 0x1d, 0xca, 0x41, 0x1a, 0x6c, 0x6f, 0x6e, - 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2e, 0x63, 0x6f, 0x6d, 0x3a, 0x69, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, - 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x66, 0x6f, 0x42, 0x97, 0x01, 0x0a, 0x16, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x42, 0x0f, 0x4f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x3d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, - 0x69, 0x6e, 0x67, 0x3b, 0x6c, 0x6f, 0x6e, 0x67, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0xf8, - 0x01, 0x01, 0xaa, 0x02, 0x12, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, - 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0xca, 0x02, 0x12, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x5c, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_longrunning_operations_proto_rawDescOnce sync.Once - file_google_longrunning_operations_proto_rawDescData = file_google_longrunning_operations_proto_rawDesc -) - -func file_google_longrunning_operations_proto_rawDescGZIP() []byte { - file_google_longrunning_operations_proto_rawDescOnce.Do(func() { - file_google_longrunning_operations_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_longrunning_operations_proto_rawDescData) - }) - return file_google_longrunning_operations_proto_rawDescData -} - -var file_google_longrunning_operations_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_google_longrunning_operations_proto_goTypes = []interface{}{ - (*Operation)(nil), // 0: google.longrunning.Operation - (*GetOperationRequest)(nil), // 1: google.longrunning.GetOperationRequest - (*ListOperationsRequest)(nil), // 2: google.longrunning.ListOperationsRequest - (*ListOperationsResponse)(nil), // 3: google.longrunning.ListOperationsResponse - (*CancelOperationRequest)(nil), // 4: google.longrunning.CancelOperationRequest - (*DeleteOperationRequest)(nil), // 5: google.longrunning.DeleteOperationRequest - (*WaitOperationRequest)(nil), // 6: google.longrunning.WaitOperationRequest - (*OperationInfo)(nil), // 7: google.longrunning.OperationInfo - (*anypb.Any)(nil), // 8: google.protobuf.Any - (*status.Status)(nil), // 9: google.rpc.Status - (*durationpb.Duration)(nil), // 10: google.protobuf.Duration - (*descriptorpb.MethodOptions)(nil), // 11: google.protobuf.MethodOptions - (*emptypb.Empty)(nil), // 12: google.protobuf.Empty -} -var file_google_longrunning_operations_proto_depIdxs = []int32{ - 8, // 0: google.longrunning.Operation.metadata:type_name -> google.protobuf.Any - 9, // 1: google.longrunning.Operation.error:type_name -> google.rpc.Status - 8, // 2: google.longrunning.Operation.response:type_name -> google.protobuf.Any - 0, // 3: google.longrunning.ListOperationsResponse.operations:type_name -> google.longrunning.Operation - 10, // 4: google.longrunning.WaitOperationRequest.timeout:type_name -> google.protobuf.Duration - 11, // 5: google.longrunning.operation_info:extendee -> google.protobuf.MethodOptions - 7, // 6: google.longrunning.operation_info:type_name -> google.longrunning.OperationInfo - 2, // 7: google.longrunning.Operations.ListOperations:input_type -> google.longrunning.ListOperationsRequest - 1, // 8: google.longrunning.Operations.GetOperation:input_type -> google.longrunning.GetOperationRequest - 5, // 9: google.longrunning.Operations.DeleteOperation:input_type -> google.longrunning.DeleteOperationRequest - 4, // 10: google.longrunning.Operations.CancelOperation:input_type -> google.longrunning.CancelOperationRequest - 6, // 11: google.longrunning.Operations.WaitOperation:input_type -> google.longrunning.WaitOperationRequest - 3, // 12: google.longrunning.Operations.ListOperations:output_type -> google.longrunning.ListOperationsResponse - 0, // 13: google.longrunning.Operations.GetOperation:output_type -> google.longrunning.Operation - 12, // 14: google.longrunning.Operations.DeleteOperation:output_type -> google.protobuf.Empty - 12, // 15: google.longrunning.Operations.CancelOperation:output_type -> google.protobuf.Empty - 0, // 16: google.longrunning.Operations.WaitOperation:output_type -> google.longrunning.Operation - 12, // [12:17] is the sub-list for method output_type - 7, // [7:12] is the sub-list for method input_type - 6, // [6:7] is the sub-list for extension type_name - 5, // [5:6] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name -} - -func init() { file_google_longrunning_operations_proto_init() } -func file_google_longrunning_operations_proto_init() { - if File_google_longrunning_operations_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_longrunning_operations_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Operation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetOperationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListOperationsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListOperationsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CancelOperationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteOperationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WaitOperationRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_longrunning_operations_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OperationInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_google_longrunning_operations_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*Operation_Error)(nil), - (*Operation_Response)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_longrunning_operations_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, - NumExtensions: 1, - NumServices: 1, - }, - GoTypes: file_google_longrunning_operations_proto_goTypes, - DependencyIndexes: file_google_longrunning_operations_proto_depIdxs, - MessageInfos: file_google_longrunning_operations_proto_msgTypes, - ExtensionInfos: file_google_longrunning_operations_proto_extTypes, - }.Build() - File_google_longrunning_operations_proto = out.File - file_google_longrunning_operations_proto_rawDesc = nil - file_google_longrunning_operations_proto_goTypes = nil - file_google_longrunning_operations_proto_depIdxs = nil -} diff --git a/gen/proto/google/rpc/code.pb.go b/gen/proto/google/rpc/code.pb.go deleted file mode 100644 index a45c080..0000000 --- a/gen/proto/google/rpc/code.pb.go +++ /dev/null @@ -1,335 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/rpc/code.proto - -package code - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The canonical error codes for gRPC APIs. -// -// -// Sometimes multiple error codes may apply. Services should return -// the most specific error code that applies. For example, prefer -// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. -// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`. -type Code int32 - -const ( - // Not an error; returned on success - // - // HTTP Mapping: 200 OK - Code_OK Code = 0 - // The operation was cancelled, typically by the caller. - // - // HTTP Mapping: 499 Client Closed Request - Code_CANCELLED Code = 1 - // Unknown error. For example, this error may be returned when - // a `Status` value received from another address space belongs to - // an error space that is not known in this address space. Also - // errors raised by APIs that do not return enough error information - // may be converted to this error. - // - // HTTP Mapping: 500 Internal Server Error - Code_UNKNOWN Code = 2 - // The client specified an invalid argument. Note that this differs - // from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments - // that are problematic regardless of the state of the system - // (e.g., a malformed file name). - // - // HTTP Mapping: 400 Bad Request - Code_INVALID_ARGUMENT Code = 3 - // The deadline expired before the operation could complete. For operations - // that change the state of the system, this error may be returned - // even if the operation has completed successfully. For example, a - // successful response from a server could have been delayed long - // enough for the deadline to expire. - // - // HTTP Mapping: 504 Gateway Timeout - Code_DEADLINE_EXCEEDED Code = 4 - // Some requested entity (e.g., file or directory) was not found. - // - // Note to server developers: if a request is denied for an entire class - // of users, such as gradual feature rollout or undocumented whitelist, - // `NOT_FOUND` may be used. If a request is denied for some users within - // a class of users, such as user-based access control, `PERMISSION_DENIED` - // must be used. - // - // HTTP Mapping: 404 Not Found - Code_NOT_FOUND Code = 5 - // The entity that a client attempted to create (e.g., file or directory) - // already exists. - // - // HTTP Mapping: 409 Conflict - Code_ALREADY_EXISTS Code = 6 - // The caller does not have permission to execute the specified - // operation. `PERMISSION_DENIED` must not be used for rejections - // caused by exhausting some resource (use `RESOURCE_EXHAUSTED` - // instead for those errors). `PERMISSION_DENIED` must not be - // used if the caller can not be identified (use `UNAUTHENTICATED` - // instead for those errors). This error code does not imply the - // request is valid or the requested entity exists or satisfies - // other pre-conditions. - // - // HTTP Mapping: 403 Forbidden - Code_PERMISSION_DENIED Code = 7 - // The request does not have valid authentication credentials for the - // operation. - // - // HTTP Mapping: 401 Unauthorized - Code_UNAUTHENTICATED Code = 16 - // Some resource has been exhausted, perhaps a per-user quota, or - // perhaps the entire file system is out of space. - // - // HTTP Mapping: 429 Too Many Requests - Code_RESOURCE_EXHAUSTED Code = 8 - // The operation was rejected because the system is not in a state - // required for the operation's execution. For example, the directory - // to be deleted is non-empty, an rmdir operation is applied to - // a non-directory, etc. - // - // Service implementors can use the following guidelines to decide - // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: - // (a) Use `UNAVAILABLE` if the client can retry just the failing call. - // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., when a client-specified test-and-set fails, indicating the - // client should restart a read-modify-write sequence). - // (c) Use `FAILED_PRECONDITION` if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" - // fails because the directory is non-empty, `FAILED_PRECONDITION` - // should be returned since the client should not retry unless - // the files are deleted from the directory. - // - // HTTP Mapping: 400 Bad Request - Code_FAILED_PRECONDITION Code = 9 - // The operation was aborted, typically due to a concurrency issue such as - // a sequencer check failure or transaction abort. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 409 Conflict - Code_ABORTED Code = 10 - // The operation was attempted past the valid range. E.g., seeking or - // reading past end-of-file. - // - // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may - // be fixed if the system state changes. For example, a 32-bit file - // system will generate `INVALID_ARGUMENT` if asked to read at an - // offset that is not in the range [0,2^32-1], but it will generate - // `OUT_OF_RANGE` if asked to read from an offset past the current - // file size. - // - // There is a fair bit of overlap between `FAILED_PRECONDITION` and - // `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific - // error) when it applies so that callers who are iterating through - // a space can easily look for an `OUT_OF_RANGE` error to detect when - // they are done. - // - // HTTP Mapping: 400 Bad Request - Code_OUT_OF_RANGE Code = 11 - // The operation is not implemented or is not supported/enabled in this - // service. - // - // HTTP Mapping: 501 Not Implemented - Code_UNIMPLEMENTED Code = 12 - // Internal errors. This means that some invariants expected by the - // underlying system have been broken. This error code is reserved - // for serious errors. - // - // HTTP Mapping: 500 Internal Server Error - Code_INTERNAL Code = 13 - // The service is currently unavailable. This is most likely a - // transient condition, which can be corrected by retrying with - // a backoff. Note that it is not always safe to retry - // non-idempotent operations. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 503 Service Unavailable - Code_UNAVAILABLE Code = 14 - // Unrecoverable data loss or corruption. - // - // HTTP Mapping: 500 Internal Server Error - Code_DATA_LOSS Code = 15 -) - -// Enum value maps for Code. -var ( - Code_name = map[int32]string{ - 0: "OK", - 1: "CANCELLED", - 2: "UNKNOWN", - 3: "INVALID_ARGUMENT", - 4: "DEADLINE_EXCEEDED", - 5: "NOT_FOUND", - 6: "ALREADY_EXISTS", - 7: "PERMISSION_DENIED", - 16: "UNAUTHENTICATED", - 8: "RESOURCE_EXHAUSTED", - 9: "FAILED_PRECONDITION", - 10: "ABORTED", - 11: "OUT_OF_RANGE", - 12: "UNIMPLEMENTED", - 13: "INTERNAL", - 14: "UNAVAILABLE", - 15: "DATA_LOSS", - } - Code_value = map[string]int32{ - "OK": 0, - "CANCELLED": 1, - "UNKNOWN": 2, - "INVALID_ARGUMENT": 3, - "DEADLINE_EXCEEDED": 4, - "NOT_FOUND": 5, - "ALREADY_EXISTS": 6, - "PERMISSION_DENIED": 7, - "UNAUTHENTICATED": 16, - "RESOURCE_EXHAUSTED": 8, - "FAILED_PRECONDITION": 9, - "ABORTED": 10, - "OUT_OF_RANGE": 11, - "UNIMPLEMENTED": 12, - "INTERNAL": 13, - "UNAVAILABLE": 14, - "DATA_LOSS": 15, - } -) - -func (x Code) Enum() *Code { - p := new(Code) - *p = x - return p -} - -func (x Code) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Code) Descriptor() protoreflect.EnumDescriptor { - return file_google_rpc_code_proto_enumTypes[0].Descriptor() -} - -func (Code) Type() protoreflect.EnumType { - return &file_google_rpc_code_proto_enumTypes[0] -} - -func (x Code) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Code.Descriptor instead. -func (Code) EnumDescriptor() ([]byte, []int) { - return file_google_rpc_code_proto_rawDescGZIP(), []int{0} -} - -var File_google_rpc_code_proto protoreflect.FileDescriptor - -var file_google_rpc_code_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x72, 0x70, 0x63, 0x2a, 0xb7, 0x02, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x4c, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x02, - 0x12, 0x14, 0x0a, 0x10, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x55, - 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x41, 0x44, 0x4c, 0x49, - 0x4e, 0x45, 0x5f, 0x45, 0x58, 0x43, 0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0d, 0x0a, - 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, - 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x06, - 0x12, 0x15, 0x0a, 0x11, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, - 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x4e, 0x41, 0x55, 0x54, - 0x48, 0x45, 0x4e, 0x54, 0x49, 0x43, 0x41, 0x54, 0x45, 0x44, 0x10, 0x10, 0x12, 0x16, 0x0a, 0x12, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x58, 0x48, 0x41, 0x55, 0x53, 0x54, - 0x45, 0x44, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x50, - 0x52, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x0b, 0x0a, - 0x07, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x55, - 0x54, 0x5f, 0x4f, 0x46, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x0b, 0x12, 0x11, 0x0a, 0x0d, - 0x55, 0x4e, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x0c, 0x12, - 0x0c, 0x0a, 0x08, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x0d, 0x12, 0x0f, 0x0a, - 0x0b, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x0e, 0x12, 0x0d, - 0x0a, 0x09, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x4c, 0x4f, 0x53, 0x53, 0x10, 0x0f, 0x42, 0x58, 0x0a, - 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, - 0x09, 0x43, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x33, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, - 0x70, 0x69, 0x73, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x3b, 0x63, 0x6f, 0x64, - 0x65, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_rpc_code_proto_rawDescOnce sync.Once - file_google_rpc_code_proto_rawDescData = file_google_rpc_code_proto_rawDesc -) - -func file_google_rpc_code_proto_rawDescGZIP() []byte { - file_google_rpc_code_proto_rawDescOnce.Do(func() { - file_google_rpc_code_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_rpc_code_proto_rawDescData) - }) - return file_google_rpc_code_proto_rawDescData -} - -var file_google_rpc_code_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_google_rpc_code_proto_goTypes = []interface{}{ - (Code)(0), // 0: google.rpc.Code -} -var file_google_rpc_code_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_rpc_code_proto_init() } -func file_google_rpc_code_proto_init() { - if File_google_rpc_code_proto != nil { - return - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_rpc_code_proto_rawDesc, - NumEnums: 1, - NumMessages: 0, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_rpc_code_proto_goTypes, - DependencyIndexes: file_google_rpc_code_proto_depIdxs, - EnumInfos: file_google_rpc_code_proto_enumTypes, - }.Build() - File_google_rpc_code_proto = out.File - file_google_rpc_code_proto_rawDesc = nil - file_google_rpc_code_proto_goTypes = nil - file_google_rpc_code_proto_depIdxs = nil -} diff --git a/gen/proto/google/rpc/status.pb.go b/gen/proto/google/rpc/status.pb.go deleted file mode 100644 index ed6a3b1..0000000 --- a/gen/proto/google/rpc/status.pb.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/rpc/status.proto - -package status - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The `Status` type defines a logical error model that is suitable for -// different programming environments, including REST APIs and RPC APIs. It is -// used by [gRPC](https://github.com/grpc). Each `Status` message contains -// three pieces of data: error code, error message, and error details. -// -// You can find out more about this error model and how to work with it in the -// [API Design Guide](https://cloud.google.com/apis/design/errors). -type Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` -} - -func (x *Status) Reset() { - *x = Status{} - if protoimpl.UnsafeEnabled { - mi := &file_google_rpc_status_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Status) ProtoMessage() {} - -func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_google_rpc_status_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Status.ProtoReflect.Descriptor instead. -func (*Status) Descriptor() ([]byte, []int) { - return file_google_rpc_status_proto_rawDescGZIP(), []int{0} -} - -func (x *Status) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Status) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *Status) GetDetails() []*anypb.Any { - if x != nil { - return x.Details - } - return nil -} - -var File_google_rpc_status_proto protoreflect.FileDescriptor - -var file_google_rpc_status_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x72, 0x70, 0x63, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x61, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x0b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x37, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, - 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3b, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, -} - -var ( - file_google_rpc_status_proto_rawDescOnce sync.Once - file_google_rpc_status_proto_rawDescData = file_google_rpc_status_proto_rawDesc -) - -func file_google_rpc_status_proto_rawDescGZIP() []byte { - file_google_rpc_status_proto_rawDescOnce.Do(func() { - file_google_rpc_status_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_rpc_status_proto_rawDescData) - }) - return file_google_rpc_status_proto_rawDescData -} - -var file_google_rpc_status_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_google_rpc_status_proto_goTypes = []interface{}{ - (*Status)(nil), // 0: google.rpc.Status - (*anypb.Any)(nil), // 1: google.protobuf.Any -} -var file_google_rpc_status_proto_depIdxs = []int32{ - 1, // 0: google.rpc.Status.details:type_name -> google.protobuf.Any - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_google_rpc_status_proto_init() } -func file_google_rpc_status_proto_init() { - if File_google_rpc_status_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_rpc_status_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_rpc_status_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_rpc_status_proto_goTypes, - DependencyIndexes: file_google_rpc_status_proto_depIdxs, - MessageInfos: file_google_rpc_status_proto_msgTypes, - }.Build() - File_google_rpc_status_proto = out.File - file_google_rpc_status_proto_rawDesc = nil - file_google_rpc_status_proto_goTypes = nil - file_google_rpc_status_proto_depIdxs = nil -} diff --git a/gen/proto/google/security/meshca/v1/meshca.pb.go b/gen/proto/google/security/meshca/v1/meshca.pb.go deleted file mode 100644 index 601b867..0000000 --- a/gen/proto/google/security/meshca/v1/meshca.pb.go +++ /dev/null @@ -1,273 +0,0 @@ -// Copyright 2019 Istio Authors. All Rights Reserved. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/security/meshca/v1/meshca.proto - -package google_ca - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Certificate request message. -type MeshCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The request WorkloadID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - RequestId string `protobuf:"bytes,1,opt,name=request_id,json=requestId,proto3" json:"request_id,omitempty"` - // PEM-encoded certificate request. - Csr string `protobuf:"bytes,2,opt,name=csr,proto3" json:"csr,omitempty"` - // Optional: requested certificate validity period. - Validity *durationpb.Duration `protobuf:"bytes,3,opt,name=validity,proto3" json:"validity,omitempty"` // Reserved 4 -} - -func (x *MeshCertificateRequest) Reset() { - *x = MeshCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_google_security_meshca_v1_meshca_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshCertificateRequest) ProtoMessage() {} - -func (x *MeshCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_google_security_meshca_v1_meshca_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshCertificateRequest.ProtoReflect.Descriptor instead. -func (*MeshCertificateRequest) Descriptor() ([]byte, []int) { - return file_google_security_meshca_v1_meshca_proto_rawDescGZIP(), []int{0} -} - -func (x *MeshCertificateRequest) GetRequestId() string { - if x != nil { - return x.RequestId - } - return "" -} - -func (x *MeshCertificateRequest) GetCsr() string { - if x != nil { - return x.Csr - } - return "" -} - -func (x *MeshCertificateRequest) GetValidity() *durationpb.Duration { - if x != nil { - return x.Validity - } - return nil -} - -// Certificate response message. -type MeshCertificateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // PEM-encoded certificate chain. - // Leaf cert is element '0'. Root cert is element 'n'. - CertChain []string `protobuf:"bytes,1,rep,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` -} - -func (x *MeshCertificateResponse) Reset() { - *x = MeshCertificateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_google_security_meshca_v1_meshca_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MeshCertificateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MeshCertificateResponse) ProtoMessage() {} - -func (x *MeshCertificateResponse) ProtoReflect() protoreflect.Message { - mi := &file_google_security_meshca_v1_meshca_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MeshCertificateResponse.ProtoReflect.Descriptor instead. -func (*MeshCertificateResponse) Descriptor() ([]byte, []int) { - return file_google_security_meshca_v1_meshca_proto_rawDescGZIP(), []int{1} -} - -func (x *MeshCertificateResponse) GetCertChain() []string { - if x != nil { - return x.CertChain - } - return nil -} - -var File_google_security_meshca_v1_meshca_proto protoreflect.FileDescriptor - -var file_google_security_meshca_v1_meshca_proto_rawDesc = []byte{ - 0x0a, 0x26, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x2f, 0x6d, 0x65, 0x73, 0x68, 0x63, 0x61, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x65, 0x73, 0x68, - 0x63, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x63, 0x61, - 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, - 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x63, 0x73, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x73, 0x72, 0x12, - 0x35, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x22, 0x38, 0x0a, 0x17, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x32, 0x96, 0x01, 0x0a, 0x16, 0x4d, 0x65, 0x73, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7c, 0x0a, 0x11, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x12, 0x31, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, - 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x2e, - 0x4d, 0x65, 0x73, 0x68, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x5a, 0x0a, 0x1d, 0x63, 0x6f, 0x6d, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x6d, 0x65, 0x73, 0x68, 0x63, 0x61, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x4d, 0x65, 0x73, 0x68, - 0x43, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, - 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_security_meshca_v1_meshca_proto_rawDescOnce sync.Once - file_google_security_meshca_v1_meshca_proto_rawDescData = file_google_security_meshca_v1_meshca_proto_rawDesc -) - -func file_google_security_meshca_v1_meshca_proto_rawDescGZIP() []byte { - file_google_security_meshca_v1_meshca_proto_rawDescOnce.Do(func() { - file_google_security_meshca_v1_meshca_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_security_meshca_v1_meshca_proto_rawDescData) - }) - return file_google_security_meshca_v1_meshca_proto_rawDescData -} - -var file_google_security_meshca_v1_meshca_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_google_security_meshca_v1_meshca_proto_goTypes = []interface{}{ - (*MeshCertificateRequest)(nil), // 0: google.security.meshca.v1.MeshCertificateRequest - (*MeshCertificateResponse)(nil), // 1: google.security.meshca.v1.MeshCertificateResponse - (*durationpb.Duration)(nil), // 2: google.protobuf.Duration -} -var file_google_security_meshca_v1_meshca_proto_depIdxs = []int32{ - 2, // 0: google.security.meshca.v1.MeshCertificateRequest.validity:type_name -> google.protobuf.Duration - 0, // 1: google.security.meshca.v1.MeshCertificateService.CreateCertificate:input_type -> google.security.meshca.v1.MeshCertificateRequest - 1, // 2: google.security.meshca.v1.MeshCertificateService.CreateCertificate:output_type -> google.security.meshca.v1.MeshCertificateResponse - 2, // [2:3] is the sub-list for method output_type - 1, // [1:2] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_google_security_meshca_v1_meshca_proto_init() } -func file_google_security_meshca_v1_meshca_proto_init() { - if File_google_security_meshca_v1_meshca_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_security_meshca_v1_meshca_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_security_meshca_v1_meshca_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MeshCertificateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_security_meshca_v1_meshca_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_google_security_meshca_v1_meshca_proto_goTypes, - DependencyIndexes: file_google_security_meshca_v1_meshca_proto_depIdxs, - MessageInfos: file_google_security_meshca_v1_meshca_proto_msgTypes, - }.Build() - File_google_security_meshca_v1_meshca_proto = out.File - file_google_security_meshca_v1_meshca_proto_rawDesc = nil - file_google_security_meshca_v1_meshca_proto_goTypes = nil - file_google_security_meshca_v1_meshca_proto_depIdxs = nil -} diff --git a/gen/proto/google/type/expr.pb.go b/gen/proto/google/type/expr.pb.go deleted file mode 100644 index 32084e1..0000000 --- a/gen/proto/google/type/expr.pb.go +++ /dev/null @@ -1,231 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: google/type/expr.proto - -package expr - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Represents a textual expression in the Common Expression Language (CEL) -// syntax. CEL is a C-like expression language. The syntax and semantics of CEL -// are documented at https://github.com/google/cel-spec. -// -// Example (Comparison): -// -// title: "Summary size limit" -// description: "Determines if a summary is less than 100 chars" -// expression: "document.summary.size() < 100" -// -// Example (Equality): -// -// title: "Requestor is owner" -// description: "Determines if requestor is the document owner" -// expression: "document.owner == request.auth.claims.email" -// -// Example (Logic): -// -// title: "Public documents" -// description: "Determine whether the document should be publicly visible" -// expression: "document.type != 'private' && document.type != 'internal'" -// -// Example (Data Manipulation): -// -// title: "Notification string" -// description: "Create a notification string with a timestamp." -// expression: "'New message received at ' + string(document.create_time)" -// -// The exact variables and functions that may be referenced within an expression -// are determined by the service that evaluates it. See the service -// documentation for additional information. -type Expr struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Textual representation of an expression in Common Expression Language - // syntax. - Expression string `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"` - // Optional. Title for the expression, i.e. a short string describing - // its purpose. This can be used e.g. in UIs which allow to enter the - // expression. - Title string `protobuf:"bytes,2,opt,name=title,proto3" json:"title,omitempty"` - // Optional. Description of the expression. This is a longer text which - // describes the expression, e.g. when hovered over it in a UI. - Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` - // Optional. String indicating the location of the expression for error - // reporting, e.g. a file name and a position in the file. - Location string `protobuf:"bytes,4,opt,name=location,proto3" json:"location,omitempty"` -} - -func (x *Expr) Reset() { - *x = Expr{} - if protoimpl.UnsafeEnabled { - mi := &file_google_type_expr_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Expr) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Expr) ProtoMessage() {} - -func (x *Expr) ProtoReflect() protoreflect.Message { - mi := &file_google_type_expr_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Expr.ProtoReflect.Descriptor instead. -func (*Expr) Descriptor() ([]byte, []int) { - return file_google_type_expr_proto_rawDescGZIP(), []int{0} -} - -func (x *Expr) GetExpression() string { - if x != nil { - return x.Expression - } - return "" -} - -func (x *Expr) GetTitle() string { - if x != nil { - return x.Title - } - return "" -} - -func (x *Expr) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *Expr) GetLocation() string { - if x != nil { - return x.Location - } - return "" -} - -var File_google_type_expr_proto protoreflect.FileDescriptor - -var file_google_type_expr_proto_rawDesc = []byte{ - 0x0a, 0x16, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x65, 0x78, - 0x70, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x74, 0x79, 0x70, 0x65, 0x22, 0x7a, 0x0a, 0x04, 0x45, 0x78, 0x70, 0x72, 0x12, 0x1e, 0x0a, - 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x5a, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x74, 0x79, 0x70, 0x65, 0x42, 0x09, 0x45, 0x78, 0x70, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x65, 0x78, - 0x70, 0x72, 0x3b, 0x65, 0x78, 0x70, 0x72, 0xa2, 0x02, 0x03, 0x47, 0x54, 0x50, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_google_type_expr_proto_rawDescOnce sync.Once - file_google_type_expr_proto_rawDescData = file_google_type_expr_proto_rawDesc -) - -func file_google_type_expr_proto_rawDescGZIP() []byte { - file_google_type_expr_proto_rawDescOnce.Do(func() { - file_google_type_expr_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_type_expr_proto_rawDescData) - }) - return file_google_type_expr_proto_rawDescData -} - -var file_google_type_expr_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_google_type_expr_proto_goTypes = []interface{}{ - (*Expr)(nil), // 0: google.type.Expr -} -var file_google_type_expr_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_google_type_expr_proto_init() } -func file_google_type_expr_proto_init() { - if File_google_type_expr_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_google_type_expr_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Expr); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_type_expr_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_google_type_expr_proto_goTypes, - DependencyIndexes: file_google_type_expr_proto_depIdxs, - MessageInfos: file_google_type_expr_proto_msgTypes, - }.Build() - File_google_type_expr_proto = out.File - file_google_type_expr_proto_rawDesc = nil - file_google_type_expr_proto_goTypes = nil - file_google_type_expr_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/binlog/v1/binarylog.pb.go b/gen/proto/grpc/binlog/v1/binarylog.pb.go deleted file mode 100644 index 810e2a4..0000000 --- a/gen/proto/grpc/binlog/v1/binarylog.pb.go +++ /dev/null @@ -1,1182 +0,0 @@ -// Copyright 2018 The gRPC Authors -// All rights reserved. -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/binlog/v1/binarylog.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/binlog/v1/binarylog.proto - -package grpc_binarylog_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Enumerates the type of event -// Note the terminology is different from the RPC semantics -// definition, but the same meaning is expressed here. -type GrpcLogEntry_EventType int32 - -const ( - GrpcLogEntry_EVENT_TYPE_UNKNOWN GrpcLogEntry_EventType = 0 - // Header sent from client to server - GrpcLogEntry_EVENT_TYPE_CLIENT_HEADER GrpcLogEntry_EventType = 1 - // Header sent from server to client - GrpcLogEntry_EVENT_TYPE_SERVER_HEADER GrpcLogEntry_EventType = 2 - // Message sent from client to server - GrpcLogEntry_EVENT_TYPE_CLIENT_MESSAGE GrpcLogEntry_EventType = 3 - // Message sent from server to client - GrpcLogEntry_EVENT_TYPE_SERVER_MESSAGE GrpcLogEntry_EventType = 4 - // A signal that client is done sending - GrpcLogEntry_EVENT_TYPE_CLIENT_HALF_CLOSE GrpcLogEntry_EventType = 5 - // Trailer indicates the end of the RPC. - // On client side, this event means a trailer was either received - // from the network or the gRPC library locally generated a status - // to inform the application about a failure. - // On server side, this event means the server application requested - // to send a trailer. Note: EVENT_TYPE_CANCEL may still arrive after - // this due to races on server side. - GrpcLogEntry_EVENT_TYPE_SERVER_TRAILER GrpcLogEntry_EventType = 6 - // A signal that the RPC is cancelled. On client side, this - // indicates the client application requests a cancellation. - // On server side, this indicates that cancellation was detected. - // Note: This marks the end of the RPC. Events may arrive after - // this due to races. For example, on client side a trailer - // may arrive even though the application requested to cancel the RPC. - GrpcLogEntry_EVENT_TYPE_CANCEL GrpcLogEntry_EventType = 7 -) - -// Enum value maps for GrpcLogEntry_EventType. -var ( - GrpcLogEntry_EventType_name = map[int32]string{ - 0: "EVENT_TYPE_UNKNOWN", - 1: "EVENT_TYPE_CLIENT_HEADER", - 2: "EVENT_TYPE_SERVER_HEADER", - 3: "EVENT_TYPE_CLIENT_MESSAGE", - 4: "EVENT_TYPE_SERVER_MESSAGE", - 5: "EVENT_TYPE_CLIENT_HALF_CLOSE", - 6: "EVENT_TYPE_SERVER_TRAILER", - 7: "EVENT_TYPE_CANCEL", - } - GrpcLogEntry_EventType_value = map[string]int32{ - "EVENT_TYPE_UNKNOWN": 0, - "EVENT_TYPE_CLIENT_HEADER": 1, - "EVENT_TYPE_SERVER_HEADER": 2, - "EVENT_TYPE_CLIENT_MESSAGE": 3, - "EVENT_TYPE_SERVER_MESSAGE": 4, - "EVENT_TYPE_CLIENT_HALF_CLOSE": 5, - "EVENT_TYPE_SERVER_TRAILER": 6, - "EVENT_TYPE_CANCEL": 7, - } -) - -func (x GrpcLogEntry_EventType) Enum() *GrpcLogEntry_EventType { - p := new(GrpcLogEntry_EventType) - *p = x - return p -} - -func (x GrpcLogEntry_EventType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GrpcLogEntry_EventType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_binlog_v1_binarylog_proto_enumTypes[0].Descriptor() -} - -func (GrpcLogEntry_EventType) Type() protoreflect.EnumType { - return &file_grpc_binlog_v1_binarylog_proto_enumTypes[0] -} - -func (x GrpcLogEntry_EventType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GrpcLogEntry_EventType.Descriptor instead. -func (GrpcLogEntry_EventType) EnumDescriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 0} -} - -// Enumerates the entity that generates the log entry -type GrpcLogEntry_Logger int32 - -const ( - GrpcLogEntry_LOGGER_UNKNOWN GrpcLogEntry_Logger = 0 - GrpcLogEntry_LOGGER_CLIENT GrpcLogEntry_Logger = 1 - GrpcLogEntry_LOGGER_SERVER GrpcLogEntry_Logger = 2 -) - -// Enum value maps for GrpcLogEntry_Logger. -var ( - GrpcLogEntry_Logger_name = map[int32]string{ - 0: "LOGGER_UNKNOWN", - 1: "LOGGER_CLIENT", - 2: "LOGGER_SERVER", - } - GrpcLogEntry_Logger_value = map[string]int32{ - "LOGGER_UNKNOWN": 0, - "LOGGER_CLIENT": 1, - "LOGGER_SERVER": 2, - } -) - -func (x GrpcLogEntry_Logger) Enum() *GrpcLogEntry_Logger { - p := new(GrpcLogEntry_Logger) - *p = x - return p -} - -func (x GrpcLogEntry_Logger) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GrpcLogEntry_Logger) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_binlog_v1_binarylog_proto_enumTypes[1].Descriptor() -} - -func (GrpcLogEntry_Logger) Type() protoreflect.EnumType { - return &file_grpc_binlog_v1_binarylog_proto_enumTypes[1] -} - -func (x GrpcLogEntry_Logger) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GrpcLogEntry_Logger.Descriptor instead. -func (GrpcLogEntry_Logger) EnumDescriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0, 1} -} - -type Address_Type int32 - -const ( - Address_TYPE_UNKNOWN Address_Type = 0 - // address is in 1.2.3.4 form - Address_TYPE_IPV4 Address_Type = 1 - // address is in IPv6 canonical form (RFC5952 section 4) - // The scope is NOT included in the address string. - Address_TYPE_IPV6 Address_Type = 2 - // address is UDS string - Address_TYPE_UNIX Address_Type = 3 -) - -// Enum value maps for Address_Type. -var ( - Address_Type_name = map[int32]string{ - 0: "TYPE_UNKNOWN", - 1: "TYPE_IPV4", - 2: "TYPE_IPV6", - 3: "TYPE_UNIX", - } - Address_Type_value = map[string]int32{ - "TYPE_UNKNOWN": 0, - "TYPE_IPV4": 1, - "TYPE_IPV6": 2, - "TYPE_UNIX": 3, - } -) - -func (x Address_Type) Enum() *Address_Type { - p := new(Address_Type) - *p = x - return p -} - -func (x Address_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Address_Type) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_binlog_v1_binarylog_proto_enumTypes[2].Descriptor() -} - -func (Address_Type) Type() protoreflect.EnumType { - return &file_grpc_binlog_v1_binarylog_proto_enumTypes[2] -} - -func (x Address_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Address_Type.Descriptor instead. -func (Address_Type) EnumDescriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7, 0} -} - -// Log entry we store in binary logs -type GrpcLogEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The timestamp of the binary log message - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // Uniquely identifies a call. The value must not be 0 in order to disambiguate - // from an unset value. - // Each call may have several log entries, they will all have the same call_id. - // Nothing is guaranteed about their value other than they are unique across - // different RPCs in the same gRPC process. - CallId uint64 `protobuf:"varint,2,opt,name=call_id,json=callId,proto3" json:"call_id,omitempty"` - // The entry sequence id for this call. The first GrpcLogEntry has a - // value of 1, to disambiguate from an unset value. The purpose of - // this field is to detect missing entries in environments where - // durability or ordering is not guaranteed. - SequenceIdWithinCall uint64 `protobuf:"varint,3,opt,name=sequence_id_within_call,json=sequenceIdWithinCall,proto3" json:"sequence_id_within_call,omitempty"` - Type GrpcLogEntry_EventType `protobuf:"varint,4,opt,name=type,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_EventType" json:"type,omitempty"` - Logger GrpcLogEntry_Logger `protobuf:"varint,5,opt,name=logger,proto3,enum=grpc.binarylog.v1.GrpcLogEntry_Logger" json:"logger,omitempty"` // One of the above Logger enum - // The logger uses one of the following fields to record the payload, - // according to the type of the log entry. - // - // Types that are assignable to Payload: - // *GrpcLogEntry_ClientHeader - // *GrpcLogEntry_ServerHeader - // *GrpcLogEntry_Message - // *GrpcLogEntry_Trailer - Payload isGrpcLogEntry_Payload `protobuf_oneof:"payload"` - // true if payload does not represent the full message or metadata. - PayloadTruncated bool `protobuf:"varint,10,opt,name=payload_truncated,json=payloadTruncated,proto3" json:"payload_truncated,omitempty"` - // Peer address information, will only be recorded on the first - // incoming event. On client side, peer is logged on - // EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in - // the case of trailers-only. On server side, peer is always - // logged on EVENT_TYPE_CLIENT_HEADER. - Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"` -} - -func (x *GrpcLogEntry) Reset() { - *x = GrpcLogEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcLogEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcLogEntry) ProtoMessage() {} - -func (x *GrpcLogEntry) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcLogEntry.ProtoReflect.Descriptor instead. -func (*GrpcLogEntry) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{0} -} - -func (x *GrpcLogEntry) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *GrpcLogEntry) GetCallId() uint64 { - if x != nil { - return x.CallId - } - return 0 -} - -func (x *GrpcLogEntry) GetSequenceIdWithinCall() uint64 { - if x != nil { - return x.SequenceIdWithinCall - } - return 0 -} - -func (x *GrpcLogEntry) GetType() GrpcLogEntry_EventType { - if x != nil { - return x.Type - } - return GrpcLogEntry_EVENT_TYPE_UNKNOWN -} - -func (x *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger { - if x != nil { - return x.Logger - } - return GrpcLogEntry_LOGGER_UNKNOWN -} - -func (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (x *GrpcLogEntry) GetClientHeader() *ClientHeader { - if x, ok := x.GetPayload().(*GrpcLogEntry_ClientHeader); ok { - return x.ClientHeader - } - return nil -} - -func (x *GrpcLogEntry) GetServerHeader() *ServerHeader { - if x, ok := x.GetPayload().(*GrpcLogEntry_ServerHeader); ok { - return x.ServerHeader - } - return nil -} - -func (x *GrpcLogEntry) GetMessage() *Message { - if x, ok := x.GetPayload().(*GrpcLogEntry_Message); ok { - return x.Message - } - return nil -} - -func (x *GrpcLogEntry) GetTrailer() *Trailer { - if x, ok := x.GetPayload().(*GrpcLogEntry_Trailer); ok { - return x.Trailer - } - return nil -} - -func (x *GrpcLogEntry) GetPayloadTruncated() bool { - if x != nil { - return x.PayloadTruncated - } - return false -} - -func (x *GrpcLogEntry) GetPeer() *Address { - if x != nil { - return x.Peer - } - return nil -} - -type isGrpcLogEntry_Payload interface { - isGrpcLogEntry_Payload() -} - -type GrpcLogEntry_ClientHeader struct { - ClientHeader *ClientHeader `protobuf:"bytes,6,opt,name=client_header,json=clientHeader,proto3,oneof"` -} - -type GrpcLogEntry_ServerHeader struct { - ServerHeader *ServerHeader `protobuf:"bytes,7,opt,name=server_header,json=serverHeader,proto3,oneof"` -} - -type GrpcLogEntry_Message struct { - // Used by EVENT_TYPE_CLIENT_MESSAGE, EVENT_TYPE_SERVER_MESSAGE - Message *Message `protobuf:"bytes,8,opt,name=message,proto3,oneof"` -} - -type GrpcLogEntry_Trailer struct { - Trailer *Trailer `protobuf:"bytes,9,opt,name=trailer,proto3,oneof"` -} - -func (*GrpcLogEntry_ClientHeader) isGrpcLogEntry_Payload() {} - -func (*GrpcLogEntry_ServerHeader) isGrpcLogEntry_Payload() {} - -func (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {} - -func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {} - -type ClientHeader struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This contains only the metadata from the application. - Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - // The name of the RPC method, which looks something like: - // // - // Note the leading "/" character. - MethodName string `protobuf:"bytes,2,opt,name=method_name,json=methodName,proto3" json:"method_name,omitempty"` - // A single process may be used to run multiple virtual - // servers with different identities. - // The authority is the name of such a server identitiy. - // It is typically a portion of the URI in the form of - // or : . - Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"` - // the RPC timeout - Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"` -} - -func (x *ClientHeader) Reset() { - *x = ClientHeader{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientHeader) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientHeader) ProtoMessage() {} - -func (x *ClientHeader) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientHeader.ProtoReflect.Descriptor instead. -func (*ClientHeader) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{1} -} - -func (x *ClientHeader) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *ClientHeader) GetMethodName() string { - if x != nil { - return x.MethodName - } - return "" -} - -func (x *ClientHeader) GetAuthority() string { - if x != nil { - return x.Authority - } - return "" -} - -func (x *ClientHeader) GetTimeout() *durationpb.Duration { - if x != nil { - return x.Timeout - } - return nil -} - -type ServerHeader struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This contains only the metadata from the application. - Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (x *ServerHeader) Reset() { - *x = ServerHeader{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerHeader) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerHeader) ProtoMessage() {} - -func (x *ServerHeader) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerHeader.ProtoReflect.Descriptor instead. -func (*ServerHeader) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{2} -} - -func (x *ServerHeader) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -type Trailer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This contains only the metadata from the application. - Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - // The gRPC status code. - StatusCode uint32 `protobuf:"varint,2,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"` - // An original status message before any transport specific - // encoding. - StatusMessage string `protobuf:"bytes,3,opt,name=status_message,json=statusMessage,proto3" json:"status_message,omitempty"` - // The value of the 'grpc-status-details-bin' metadata key. If - // present, this is always an encoded 'google.rpc.Status' message. - StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"` -} - -func (x *Trailer) Reset() { - *x = Trailer{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Trailer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Trailer) ProtoMessage() {} - -func (x *Trailer) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Trailer.ProtoReflect.Descriptor instead. -func (*Trailer) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{3} -} - -func (x *Trailer) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Trailer) GetStatusCode() uint32 { - if x != nil { - return x.StatusCode - } - return 0 -} - -func (x *Trailer) GetStatusMessage() string { - if x != nil { - return x.StatusMessage - } - return "" -} - -func (x *Trailer) GetStatusDetails() []byte { - if x != nil { - return x.StatusDetails - } - return nil -} - -// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE -type Message struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Length of the message. It may not be the same as the length of the - // data field, as the logging payload can be truncated or omitted. - Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` - // May be truncated or omitted. - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *Message) Reset() { - *x = Message{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Message) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Message) ProtoMessage() {} - -func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Message.ProtoReflect.Descriptor instead. -func (*Message) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{4} -} - -func (x *Message) GetLength() uint32 { - if x != nil { - return x.Length - } - return 0 -} - -func (x *Message) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -// A list of metadata pairs, used in the payload of client header, -// server header, and server trailer. -// Implementations may omit some entries to honor the header limits -// of GRPC_BINARY_LOG_CONFIG. -// -// Header keys added by gRPC are omitted. To be more specific, -// implementations will not log the following entries, and this is -// not to be treated as a truncation: -// - entries handled by grpc that are not user visible, such as those -// that begin with 'grpc-' (with exception of grpc-trace-bin) -// or keys like 'lb-token' -// - transport specific entries, including but not limited to: -// ':path', ':authority', 'content-encoding', 'user-agent', 'te', etc -// - entries added for call credentials -// -// Implementations must always log grpc-trace-bin if it is present. -// Practically speaking it will only be visible on server side because -// grpc-trace-bin is managed by low level client side mechanisms -// inaccessible from the application level. On server side, the -// header is just a normal metadata key. -// The pair will not count towards the size limit. -type Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"` -} - -func (x *Metadata) Reset() { - *x = Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Metadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Metadata) ProtoMessage() {} - -func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. -func (*Metadata) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{5} -} - -func (x *Metadata) GetEntry() []*MetadataEntry { - if x != nil { - return x.Entry - } - return nil -} - -// A metadata key value pair -type MetadataEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *MetadataEntry) Reset() { - *x = MetadataEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MetadataEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetadataEntry) ProtoMessage() {} - -func (x *MetadataEntry) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetadataEntry.ProtoReflect.Descriptor instead. -func (*MetadataEntry) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{6} -} - -func (x *MetadataEntry) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *MetadataEntry) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -// Address information -type Address struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"` - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - // only for TYPE_IPV4 and TYPE_IPV6 - IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"` -} - -func (x *Address) Reset() { - *x = Address{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address) ProtoMessage() {} - -func (x *Address) ProtoReflect() protoreflect.Message { - mi := &file_grpc_binlog_v1_binarylog_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address.ProtoReflect.Descriptor instead. -func (*Address) Descriptor() ([]byte, []int) { - return file_grpc_binlog_v1_binarylog_proto_rawDescGZIP(), []int{7} -} - -func (x *Address) GetType() Address_Type { - if x != nil { - return x.Type - } - return Address_TYPE_UNKNOWN -} - -func (x *Address) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *Address) GetIpPort() uint32 { - if x != nil { - return x.IpPort - } - return 0 -} - -var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor - -var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31, - 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xbb, 0x07, 0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x17, 0x0a, 0x07, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x35, 0x0a, 0x17, 0x73, 0x65, 0x71, 0x75, - 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x73, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x49, 0x64, 0x57, 0x69, 0x74, 0x68, 0x69, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, - 0x3d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3e, - 0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, - 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x46, - 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, - 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, - 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, - 0x6c, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x2b, - 0x0a, 0x11, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x72, 0x75, 0x6e, 0x63, 0x61, - 0x74, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x54, 0x72, 0x75, 0x6e, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x70, - 0x65, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x22, 0xf5, 0x01, 0x0a, 0x09, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x01, 0x12, - 0x1c, 0x0a, 0x18, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, - 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, - 0x52, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x45, - 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, - 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x05, 0x12, 0x1d, 0x0a, - 0x19, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, - 0x45, 0x52, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x45, 0x52, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, - 0x4c, 0x10, 0x07, 0x22, 0x42, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, - 0x0e, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x4f, 0x47, 0x47, 0x45, 0x52, 0x5f, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x22, 0xbb, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, - 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x22, 0x47, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, - 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x54, 0x72, - 0x61, 0x69, 0x6c, 0x65, 0x72, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1f, - 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x35, 0x0a, - 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x42, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x36, 0x0a, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x22, 0x37, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xb8, 0x01, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x33, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x17, 0x0a, 0x07, - 0x69, 0x70, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, - 0x70, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x45, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, - 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x34, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x50, 0x56, 0x36, 0x10, 0x02, 0x12, 0x0d, 0x0a, - 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x10, 0x03, 0x42, 0x5c, 0x0a, 0x14, - 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once - file_grpc_binlog_v1_binarylog_proto_rawDescData = file_grpc_binlog_v1_binarylog_proto_rawDesc -) - -func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte { - file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() { - file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_binlog_v1_binarylog_proto_rawDescData) - }) - return file_grpc_binlog_v1_binarylog_proto_rawDescData -} - -var file_grpc_binlog_v1_binarylog_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_grpc_binlog_v1_binarylog_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_grpc_binlog_v1_binarylog_proto_goTypes = []interface{}{ - (GrpcLogEntry_EventType)(0), // 0: grpc.binarylog.v1.GrpcLogEntry.EventType - (GrpcLogEntry_Logger)(0), // 1: grpc.binarylog.v1.GrpcLogEntry.Logger - (Address_Type)(0), // 2: grpc.binarylog.v1.Address.Type - (*GrpcLogEntry)(nil), // 3: grpc.binarylog.v1.GrpcLogEntry - (*ClientHeader)(nil), // 4: grpc.binarylog.v1.ClientHeader - (*ServerHeader)(nil), // 5: grpc.binarylog.v1.ServerHeader - (*Trailer)(nil), // 6: grpc.binarylog.v1.Trailer - (*Message)(nil), // 7: grpc.binarylog.v1.Message - (*Metadata)(nil), // 8: grpc.binarylog.v1.Metadata - (*MetadataEntry)(nil), // 9: grpc.binarylog.v1.MetadataEntry - (*Address)(nil), // 10: grpc.binarylog.v1.Address - (*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 12: google.protobuf.Duration -} -var file_grpc_binlog_v1_binarylog_proto_depIdxs = []int32{ - 11, // 0: grpc.binarylog.v1.GrpcLogEntry.timestamp:type_name -> google.protobuf.Timestamp - 0, // 1: grpc.binarylog.v1.GrpcLogEntry.type:type_name -> grpc.binarylog.v1.GrpcLogEntry.EventType - 1, // 2: grpc.binarylog.v1.GrpcLogEntry.logger:type_name -> grpc.binarylog.v1.GrpcLogEntry.Logger - 4, // 3: grpc.binarylog.v1.GrpcLogEntry.client_header:type_name -> grpc.binarylog.v1.ClientHeader - 5, // 4: grpc.binarylog.v1.GrpcLogEntry.server_header:type_name -> grpc.binarylog.v1.ServerHeader - 7, // 5: grpc.binarylog.v1.GrpcLogEntry.message:type_name -> grpc.binarylog.v1.Message - 6, // 6: grpc.binarylog.v1.GrpcLogEntry.trailer:type_name -> grpc.binarylog.v1.Trailer - 10, // 7: grpc.binarylog.v1.GrpcLogEntry.peer:type_name -> grpc.binarylog.v1.Address - 8, // 8: grpc.binarylog.v1.ClientHeader.metadata:type_name -> grpc.binarylog.v1.Metadata - 12, // 9: grpc.binarylog.v1.ClientHeader.timeout:type_name -> google.protobuf.Duration - 8, // 10: grpc.binarylog.v1.ServerHeader.metadata:type_name -> grpc.binarylog.v1.Metadata - 8, // 11: grpc.binarylog.v1.Trailer.metadata:type_name -> grpc.binarylog.v1.Metadata - 9, // 12: grpc.binarylog.v1.Metadata.entry:type_name -> grpc.binarylog.v1.MetadataEntry - 2, // 13: grpc.binarylog.v1.Address.type:type_name -> grpc.binarylog.v1.Address.Type - 14, // [14:14] is the sub-list for method output_type - 14, // [14:14] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name -} - -func init() { file_grpc_binlog_v1_binarylog_proto_init() } -func file_grpc_binlog_v1_binarylog_proto_init() { - if File_grpc_binlog_v1_binarylog_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_binlog_v1_binarylog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcLogEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientHeader); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerHeader); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Trailer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Message); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetadataEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_binlog_v1_binarylog_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*GrpcLogEntry_ClientHeader)(nil), - (*GrpcLogEntry_ServerHeader)(nil), - (*GrpcLogEntry_Message)(nil), - (*GrpcLogEntry_Trailer)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_binlog_v1_binarylog_proto_rawDesc, - NumEnums: 3, - NumMessages: 8, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_binlog_v1_binarylog_proto_goTypes, - DependencyIndexes: file_grpc_binlog_v1_binarylog_proto_depIdxs, - EnumInfos: file_grpc_binlog_v1_binarylog_proto_enumTypes, - MessageInfos: file_grpc_binlog_v1_binarylog_proto_msgTypes, - }.Build() - File_grpc_binlog_v1_binarylog_proto = out.File - file_grpc_binlog_v1_binarylog_proto_rawDesc = nil - file_grpc_binlog_v1_binarylog_proto_goTypes = nil - file_grpc_binlog_v1_binarylog_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/channelz/v1/channelz.pb.go b/gen/proto/grpc/channelz/v1/channelz.pb.go deleted file mode 100644 index ea9c0f3..0000000 --- a/gen/proto/grpc/channelz/v1/channelz.pb.go +++ /dev/null @@ -1,4222 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// This file defines an interface for exporting monitoring information -// out of gRPC servers. See the full design at -// https://github.com/grpc/proposal/blob/master/A14-channelz.md -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/channelz/v1/channelz.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/channelz/v1/channelz.proto - -package grpc_channelz_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" - durationpb "google.golang.org/protobuf/types/known/durationpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ChannelConnectivityState_State int32 - -const ( - ChannelConnectivityState_UNKNOWN ChannelConnectivityState_State = 0 - ChannelConnectivityState_IDLE ChannelConnectivityState_State = 1 - ChannelConnectivityState_CONNECTING ChannelConnectivityState_State = 2 - ChannelConnectivityState_READY ChannelConnectivityState_State = 3 - ChannelConnectivityState_TRANSIENT_FAILURE ChannelConnectivityState_State = 4 - ChannelConnectivityState_SHUTDOWN ChannelConnectivityState_State = 5 -) - -// Enum value maps for ChannelConnectivityState_State. -var ( - ChannelConnectivityState_State_name = map[int32]string{ - 0: "UNKNOWN", - 1: "IDLE", - 2: "CONNECTING", - 3: "READY", - 4: "TRANSIENT_FAILURE", - 5: "SHUTDOWN", - } - ChannelConnectivityState_State_value = map[string]int32{ - "UNKNOWN": 0, - "IDLE": 1, - "CONNECTING": 2, - "READY": 3, - "TRANSIENT_FAILURE": 4, - "SHUTDOWN": 5, - } -) - -func (x ChannelConnectivityState_State) Enum() *ChannelConnectivityState_State { - p := new(ChannelConnectivityState_State) - *p = x - return p -} - -func (x ChannelConnectivityState_State) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChannelConnectivityState_State) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_channelz_v1_channelz_proto_enumTypes[0].Descriptor() -} - -func (ChannelConnectivityState_State) Type() protoreflect.EnumType { - return &file_grpc_channelz_v1_channelz_proto_enumTypes[0] -} - -func (x ChannelConnectivityState_State) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChannelConnectivityState_State.Descriptor instead. -func (ChannelConnectivityState_State) EnumDescriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{2, 0} -} - -// The supported severity levels of trace events. -type ChannelTraceEvent_Severity int32 - -const ( - ChannelTraceEvent_CT_UNKNOWN ChannelTraceEvent_Severity = 0 - ChannelTraceEvent_CT_INFO ChannelTraceEvent_Severity = 1 - ChannelTraceEvent_CT_WARNING ChannelTraceEvent_Severity = 2 - ChannelTraceEvent_CT_ERROR ChannelTraceEvent_Severity = 3 -) - -// Enum value maps for ChannelTraceEvent_Severity. -var ( - ChannelTraceEvent_Severity_name = map[int32]string{ - 0: "CT_UNKNOWN", - 1: "CT_INFO", - 2: "CT_WARNING", - 3: "CT_ERROR", - } - ChannelTraceEvent_Severity_value = map[string]int32{ - "CT_UNKNOWN": 0, - "CT_INFO": 1, - "CT_WARNING": 2, - "CT_ERROR": 3, - } -) - -func (x ChannelTraceEvent_Severity) Enum() *ChannelTraceEvent_Severity { - p := new(ChannelTraceEvent_Severity) - *p = x - return p -} - -func (x ChannelTraceEvent_Severity) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChannelTraceEvent_Severity) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_channelz_v1_channelz_proto_enumTypes[1].Descriptor() -} - -func (ChannelTraceEvent_Severity) Type() protoreflect.EnumType { - return &file_grpc_channelz_v1_channelz_proto_enumTypes[1] -} - -func (x ChannelTraceEvent_Severity) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChannelTraceEvent_Severity.Descriptor instead. -func (ChannelTraceEvent_Severity) EnumDescriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{4, 0} -} - -// Channel is a logical grouping of channels, subchannels, and sockets. -type Channel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The identifier for this channel. This should be set. - Ref *ChannelRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` - // Data specific to this channel. - Data *ChannelData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of channel refs. - // There may not be cycles in the ref graph. - // A channel ref may be present in more than one channel or subchannel. - ChannelRef []*ChannelRef `protobuf:"bytes,3,rep,name=channel_ref,json=channelRef,proto3" json:"channel_ref,omitempty"` - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of subchannel refs. - // There may not be cycles in the ref graph. - // A sub channel ref may be present in more than one channel or subchannel. - SubchannelRef []*SubchannelRef `protobuf:"bytes,4,rep,name=subchannel_ref,json=subchannelRef,proto3" json:"subchannel_ref,omitempty"` - // There are no ordering guarantees on the order of sockets. - SocketRef []*SocketRef `protobuf:"bytes,5,rep,name=socket_ref,json=socketRef,proto3" json:"socket_ref,omitempty"` -} - -func (x *Channel) Reset() { - *x = Channel{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Channel) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Channel) ProtoMessage() {} - -func (x *Channel) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Channel.ProtoReflect.Descriptor instead. -func (*Channel) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{0} -} - -func (x *Channel) GetRef() *ChannelRef { - if x != nil { - return x.Ref - } - return nil -} - -func (x *Channel) GetData() *ChannelData { - if x != nil { - return x.Data - } - return nil -} - -func (x *Channel) GetChannelRef() []*ChannelRef { - if x != nil { - return x.ChannelRef - } - return nil -} - -func (x *Channel) GetSubchannelRef() []*SubchannelRef { - if x != nil { - return x.SubchannelRef - } - return nil -} - -func (x *Channel) GetSocketRef() []*SocketRef { - if x != nil { - return x.SocketRef - } - return nil -} - -// Subchannel is a logical grouping of channels, subchannels, and sockets. -// A subchannel is load balanced over by it's ancestor -type Subchannel struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The identifier for this channel. - Ref *SubchannelRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` - // Data specific to this channel. - Data *ChannelData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of channel refs. - // There may not be cycles in the ref graph. - // A channel ref may be present in more than one channel or subchannel. - ChannelRef []*ChannelRef `protobuf:"bytes,3,rep,name=channel_ref,json=channelRef,proto3" json:"channel_ref,omitempty"` - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of subchannel refs. - // There may not be cycles in the ref graph. - // A sub channel ref may be present in more than one channel or subchannel. - SubchannelRef []*SubchannelRef `protobuf:"bytes,4,rep,name=subchannel_ref,json=subchannelRef,proto3" json:"subchannel_ref,omitempty"` - // There are no ordering guarantees on the order of sockets. - SocketRef []*SocketRef `protobuf:"bytes,5,rep,name=socket_ref,json=socketRef,proto3" json:"socket_ref,omitempty"` -} - -func (x *Subchannel) Reset() { - *x = Subchannel{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Subchannel) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Subchannel) ProtoMessage() {} - -func (x *Subchannel) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Subchannel.ProtoReflect.Descriptor instead. -func (*Subchannel) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{1} -} - -func (x *Subchannel) GetRef() *SubchannelRef { - if x != nil { - return x.Ref - } - return nil -} - -func (x *Subchannel) GetData() *ChannelData { - if x != nil { - return x.Data - } - return nil -} - -func (x *Subchannel) GetChannelRef() []*ChannelRef { - if x != nil { - return x.ChannelRef - } - return nil -} - -func (x *Subchannel) GetSubchannelRef() []*SubchannelRef { - if x != nil { - return x.SubchannelRef - } - return nil -} - -func (x *Subchannel) GetSocketRef() []*SocketRef { - if x != nil { - return x.SocketRef - } - return nil -} - -// These come from the specified states in this document: -// https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md -type ChannelConnectivityState struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - State ChannelConnectivityState_State `protobuf:"varint,1,opt,name=state,proto3,enum=grpc.channelz.v1.ChannelConnectivityState_State" json:"state,omitempty"` -} - -func (x *ChannelConnectivityState) Reset() { - *x = ChannelConnectivityState{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelConnectivityState) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelConnectivityState) ProtoMessage() {} - -func (x *ChannelConnectivityState) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelConnectivityState.ProtoReflect.Descriptor instead. -func (*ChannelConnectivityState) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{2} -} - -func (x *ChannelConnectivityState) GetState() ChannelConnectivityState_State { - if x != nil { - return x.State - } - return ChannelConnectivityState_UNKNOWN -} - -// Channel data is data related to a specific Channel or Subchannel. -type ChannelData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The connectivity state of the channel or subchannel. Implementations - // should always set this. - State *ChannelConnectivityState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` - // The target this channel originally tried to connect to. May be absent - Target string `protobuf:"bytes,2,opt,name=target,proto3" json:"target,omitempty"` - // A trace of recent events on the channel. May be absent. - Trace *ChannelTrace `protobuf:"bytes,3,opt,name=trace,proto3" json:"trace,omitempty"` - // The number of calls started on the channel - CallsStarted int64 `protobuf:"varint,4,opt,name=calls_started,json=callsStarted,proto3" json:"calls_started,omitempty"` - // The number of calls that have completed with an OK status - CallsSucceeded int64 `protobuf:"varint,5,opt,name=calls_succeeded,json=callsSucceeded,proto3" json:"calls_succeeded,omitempty"` - // The number of calls that have completed with a non-OK status - CallsFailed int64 `protobuf:"varint,6,opt,name=calls_failed,json=callsFailed,proto3" json:"calls_failed,omitempty"` - // The last time a call was started on the channel. - LastCallStartedTimestamp *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_call_started_timestamp,json=lastCallStartedTimestamp,proto3" json:"last_call_started_timestamp,omitempty"` -} - -func (x *ChannelData) Reset() { - *x = ChannelData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelData) ProtoMessage() {} - -func (x *ChannelData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelData.ProtoReflect.Descriptor instead. -func (*ChannelData) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{3} -} - -func (x *ChannelData) GetState() *ChannelConnectivityState { - if x != nil { - return x.State - } - return nil -} - -func (x *ChannelData) GetTarget() string { - if x != nil { - return x.Target - } - return "" -} - -func (x *ChannelData) GetTrace() *ChannelTrace { - if x != nil { - return x.Trace - } - return nil -} - -func (x *ChannelData) GetCallsStarted() int64 { - if x != nil { - return x.CallsStarted - } - return 0 -} - -func (x *ChannelData) GetCallsSucceeded() int64 { - if x != nil { - return x.CallsSucceeded - } - return 0 -} - -func (x *ChannelData) GetCallsFailed() int64 { - if x != nil { - return x.CallsFailed - } - return 0 -} - -func (x *ChannelData) GetLastCallStartedTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastCallStartedTimestamp - } - return nil -} - -// A trace event is an interesting thing that happened to a channel or -// subchannel, such as creation, address resolution, subchannel creation, etc. -type ChannelTraceEvent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // High level description of the event. - Description string `protobuf:"bytes,1,opt,name=description,proto3" json:"description,omitempty"` - // the severity of the trace event - Severity ChannelTraceEvent_Severity `protobuf:"varint,2,opt,name=severity,proto3,enum=grpc.channelz.v1.ChannelTraceEvent_Severity" json:"severity,omitempty"` - // When this event occurred. - Timestamp *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // ref of referenced channel or subchannel. - // Optional, only present if this event refers to a child object. For example, - // this field would be filled if this trace event was for a subchannel being - // created. - // - // Types that are assignable to ChildRef: - // *ChannelTraceEvent_ChannelRef - // *ChannelTraceEvent_SubchannelRef - ChildRef isChannelTraceEvent_ChildRef `protobuf_oneof:"child_ref"` -} - -func (x *ChannelTraceEvent) Reset() { - *x = ChannelTraceEvent{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelTraceEvent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelTraceEvent) ProtoMessage() {} - -func (x *ChannelTraceEvent) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelTraceEvent.ProtoReflect.Descriptor instead. -func (*ChannelTraceEvent) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{4} -} - -func (x *ChannelTraceEvent) GetDescription() string { - if x != nil { - return x.Description - } - return "" -} - -func (x *ChannelTraceEvent) GetSeverity() ChannelTraceEvent_Severity { - if x != nil { - return x.Severity - } - return ChannelTraceEvent_CT_UNKNOWN -} - -func (x *ChannelTraceEvent) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (m *ChannelTraceEvent) GetChildRef() isChannelTraceEvent_ChildRef { - if m != nil { - return m.ChildRef - } - return nil -} - -func (x *ChannelTraceEvent) GetChannelRef() *ChannelRef { - if x, ok := x.GetChildRef().(*ChannelTraceEvent_ChannelRef); ok { - return x.ChannelRef - } - return nil -} - -func (x *ChannelTraceEvent) GetSubchannelRef() *SubchannelRef { - if x, ok := x.GetChildRef().(*ChannelTraceEvent_SubchannelRef); ok { - return x.SubchannelRef - } - return nil -} - -type isChannelTraceEvent_ChildRef interface { - isChannelTraceEvent_ChildRef() -} - -type ChannelTraceEvent_ChannelRef struct { - ChannelRef *ChannelRef `protobuf:"bytes,4,opt,name=channel_ref,json=channelRef,proto3,oneof"` -} - -type ChannelTraceEvent_SubchannelRef struct { - SubchannelRef *SubchannelRef `protobuf:"bytes,5,opt,name=subchannel_ref,json=subchannelRef,proto3,oneof"` -} - -func (*ChannelTraceEvent_ChannelRef) isChannelTraceEvent_ChildRef() {} - -func (*ChannelTraceEvent_SubchannelRef) isChannelTraceEvent_ChildRef() {} - -// ChannelTrace represents the recent events that have occurred on the channel. -type ChannelTrace struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Number of events ever logged in this tracing object. This can differ from - // events.size() because events can be overwritten or garbage collected by - // implementations. - NumEventsLogged int64 `protobuf:"varint,1,opt,name=num_events_logged,json=numEventsLogged,proto3" json:"num_events_logged,omitempty"` - // Time that this channel was created. - CreationTimestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=creation_timestamp,json=creationTimestamp,proto3" json:"creation_timestamp,omitempty"` - // List of events that have occurred on this channel. - Events []*ChannelTraceEvent `protobuf:"bytes,3,rep,name=events,proto3" json:"events,omitempty"` -} - -func (x *ChannelTrace) Reset() { - *x = ChannelTrace{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelTrace) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelTrace) ProtoMessage() {} - -func (x *ChannelTrace) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelTrace.ProtoReflect.Descriptor instead. -func (*ChannelTrace) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{5} -} - -func (x *ChannelTrace) GetNumEventsLogged() int64 { - if x != nil { - return x.NumEventsLogged - } - return 0 -} - -func (x *ChannelTrace) GetCreationTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.CreationTimestamp - } - return nil -} - -func (x *ChannelTrace) GetEvents() []*ChannelTraceEvent { - if x != nil { - return x.Events - } - return nil -} - -// ChannelRef is a reference to a Channel. -type ChannelRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The globally unique id for this channel. Must be a positive number. - ChannelId int64 `protobuf:"varint,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` - // An optional name associated with the channel. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ChannelRef) Reset() { - *x = ChannelRef{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelRef) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelRef) ProtoMessage() {} - -func (x *ChannelRef) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelRef.ProtoReflect.Descriptor instead. -func (*ChannelRef) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{6} -} - -func (x *ChannelRef) GetChannelId() int64 { - if x != nil { - return x.ChannelId - } - return 0 -} - -func (x *ChannelRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// SubchannelRef is a reference to a Subchannel. -type SubchannelRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The globally unique id for this subchannel. Must be a positive number. - SubchannelId int64 `protobuf:"varint,7,opt,name=subchannel_id,json=subchannelId,proto3" json:"subchannel_id,omitempty"` - // An optional name associated with the subchannel. - Name string `protobuf:"bytes,8,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *SubchannelRef) Reset() { - *x = SubchannelRef{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubchannelRef) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubchannelRef) ProtoMessage() {} - -func (x *SubchannelRef) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubchannelRef.ProtoReflect.Descriptor instead. -func (*SubchannelRef) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{7} -} - -func (x *SubchannelRef) GetSubchannelId() int64 { - if x != nil { - return x.SubchannelId - } - return 0 -} - -func (x *SubchannelRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// SocketRef is a reference to a Socket. -type SocketRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The globally unique id for this socket. Must be a positive number. - SocketId int64 `protobuf:"varint,3,opt,name=socket_id,json=socketId,proto3" json:"socket_id,omitempty"` - // An optional name associated with the socket. - Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *SocketRef) Reset() { - *x = SocketRef{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketRef) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketRef) ProtoMessage() {} - -func (x *SocketRef) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketRef.ProtoReflect.Descriptor instead. -func (*SocketRef) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{8} -} - -func (x *SocketRef) GetSocketId() int64 { - if x != nil { - return x.SocketId - } - return 0 -} - -func (x *SocketRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// ServerRef is a reference to a Server. -type ServerRef struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A globally unique identifier for this server. Must be a positive number. - ServerId int64 `protobuf:"varint,5,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"` - // An optional name associated with the server. - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ServerRef) Reset() { - *x = ServerRef{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerRef) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerRef) ProtoMessage() {} - -func (x *ServerRef) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerRef.ProtoReflect.Descriptor instead. -func (*ServerRef) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{9} -} - -func (x *ServerRef) GetServerId() int64 { - if x != nil { - return x.ServerId - } - return 0 -} - -func (x *ServerRef) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Server represents a single server. There may be multiple servers in a single -// program. -type Server struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The identifier for a Server. This should be set. - Ref *ServerRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` - // The associated data of the Server. - Data *ServerData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - // The sockets that the server is listening on. There are no ordering - // guarantees. This may be absent. - ListenSocket []*SocketRef `protobuf:"bytes,3,rep,name=listen_socket,json=listenSocket,proto3" json:"listen_socket,omitempty"` -} - -func (x *Server) Reset() { - *x = Server{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Server) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Server) ProtoMessage() {} - -func (x *Server) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Server.ProtoReflect.Descriptor instead. -func (*Server) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{10} -} - -func (x *Server) GetRef() *ServerRef { - if x != nil { - return x.Ref - } - return nil -} - -func (x *Server) GetData() *ServerData { - if x != nil { - return x.Data - } - return nil -} - -func (x *Server) GetListenSocket() []*SocketRef { - if x != nil { - return x.ListenSocket - } - return nil -} - -// ServerData is data for a specific Server. -type ServerData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A trace of recent events on the server. May be absent. - Trace *ChannelTrace `protobuf:"bytes,1,opt,name=trace,proto3" json:"trace,omitempty"` - // The number of incoming calls started on the server - CallsStarted int64 `protobuf:"varint,2,opt,name=calls_started,json=callsStarted,proto3" json:"calls_started,omitempty"` - // The number of incoming calls that have completed with an OK status - CallsSucceeded int64 `protobuf:"varint,3,opt,name=calls_succeeded,json=callsSucceeded,proto3" json:"calls_succeeded,omitempty"` - // The number of incoming calls that have a completed with a non-OK status - CallsFailed int64 `protobuf:"varint,4,opt,name=calls_failed,json=callsFailed,proto3" json:"calls_failed,omitempty"` - // The last time a call was started on the server. - LastCallStartedTimestamp *timestamppb.Timestamp `protobuf:"bytes,5,opt,name=last_call_started_timestamp,json=lastCallStartedTimestamp,proto3" json:"last_call_started_timestamp,omitempty"` -} - -func (x *ServerData) Reset() { - *x = ServerData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerData) ProtoMessage() {} - -func (x *ServerData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerData.ProtoReflect.Descriptor instead. -func (*ServerData) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{11} -} - -func (x *ServerData) GetTrace() *ChannelTrace { - if x != nil { - return x.Trace - } - return nil -} - -func (x *ServerData) GetCallsStarted() int64 { - if x != nil { - return x.CallsStarted - } - return 0 -} - -func (x *ServerData) GetCallsSucceeded() int64 { - if x != nil { - return x.CallsSucceeded - } - return 0 -} - -func (x *ServerData) GetCallsFailed() int64 { - if x != nil { - return x.CallsFailed - } - return 0 -} - -func (x *ServerData) GetLastCallStartedTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastCallStartedTimestamp - } - return nil -} - -// Information about an actual connection. Pronounced "sock-ay". -type Socket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The identifier for the Socket. - Ref *SocketRef `protobuf:"bytes,1,opt,name=ref,proto3" json:"ref,omitempty"` - // Data specific to this Socket. - Data *SocketData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` - // The locally bound address. - Local *Address `protobuf:"bytes,3,opt,name=local,proto3" json:"local,omitempty"` - // The remote bound address. May be absent. - Remote *Address `protobuf:"bytes,4,opt,name=remote,proto3" json:"remote,omitempty"` - // Security details for this socket. May be absent if not available, or - // there is no security on the socket. - Security *Security `protobuf:"bytes,5,opt,name=security,proto3" json:"security,omitempty"` - // Optional, represents the name of the remote endpoint, if different than - // the original target name. - RemoteName string `protobuf:"bytes,6,opt,name=remote_name,json=remoteName,proto3" json:"remote_name,omitempty"` -} - -func (x *Socket) Reset() { - *x = Socket{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Socket) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Socket) ProtoMessage() {} - -func (x *Socket) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Socket.ProtoReflect.Descriptor instead. -func (*Socket) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{12} -} - -func (x *Socket) GetRef() *SocketRef { - if x != nil { - return x.Ref - } - return nil -} - -func (x *Socket) GetData() *SocketData { - if x != nil { - return x.Data - } - return nil -} - -func (x *Socket) GetLocal() *Address { - if x != nil { - return x.Local - } - return nil -} - -func (x *Socket) GetRemote() *Address { - if x != nil { - return x.Remote - } - return nil -} - -func (x *Socket) GetSecurity() *Security { - if x != nil { - return x.Security - } - return nil -} - -func (x *Socket) GetRemoteName() string { - if x != nil { - return x.RemoteName - } - return "" -} - -// SocketData is data associated for a specific Socket. The fields present -// are specific to the implementation, so there may be minor differences in -// the semantics. (e.g. flow control windows) -type SocketData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The number of streams that have been started. - StreamsStarted int64 `protobuf:"varint,1,opt,name=streams_started,json=streamsStarted,proto3" json:"streams_started,omitempty"` - // The number of streams that have ended successfully: - // On client side, received frame with eos bit set; - // On server side, sent frame with eos bit set. - StreamsSucceeded int64 `protobuf:"varint,2,opt,name=streams_succeeded,json=streamsSucceeded,proto3" json:"streams_succeeded,omitempty"` - // The number of streams that have ended unsuccessfully: - // On client side, ended without receiving frame with eos bit set; - // On server side, ended without sending frame with eos bit set. - StreamsFailed int64 `protobuf:"varint,3,opt,name=streams_failed,json=streamsFailed,proto3" json:"streams_failed,omitempty"` - // The number of grpc messages successfully sent on this socket. - MessagesSent int64 `protobuf:"varint,4,opt,name=messages_sent,json=messagesSent,proto3" json:"messages_sent,omitempty"` - // The number of grpc messages received on this socket. - MessagesReceived int64 `protobuf:"varint,5,opt,name=messages_received,json=messagesReceived,proto3" json:"messages_received,omitempty"` - // The number of keep alives sent. This is typically implemented with HTTP/2 - // ping messages. - KeepAlivesSent int64 `protobuf:"varint,6,opt,name=keep_alives_sent,json=keepAlivesSent,proto3" json:"keep_alives_sent,omitempty"` - // The last time a stream was created by this endpoint. Usually unset for - // servers. - LastLocalStreamCreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=last_local_stream_created_timestamp,json=lastLocalStreamCreatedTimestamp,proto3" json:"last_local_stream_created_timestamp,omitempty"` - // The last time a stream was created by the remote endpoint. Usually unset - // for clients. - LastRemoteStreamCreatedTimestamp *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=last_remote_stream_created_timestamp,json=lastRemoteStreamCreatedTimestamp,proto3" json:"last_remote_stream_created_timestamp,omitempty"` - // The last time a message was sent by this endpoint. - LastMessageSentTimestamp *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=last_message_sent_timestamp,json=lastMessageSentTimestamp,proto3" json:"last_message_sent_timestamp,omitempty"` - // The last time a message was received by this endpoint. - LastMessageReceivedTimestamp *timestamppb.Timestamp `protobuf:"bytes,10,opt,name=last_message_received_timestamp,json=lastMessageReceivedTimestamp,proto3" json:"last_message_received_timestamp,omitempty"` - // The amount of window, granted to the local endpoint by the remote endpoint. - // This may be slightly out of date due to network latency. This does NOT - // include stream level or TCP level flow control info. - LocalFlowControlWindow *wrapperspb.Int64Value `protobuf:"bytes,11,opt,name=local_flow_control_window,json=localFlowControlWindow,proto3" json:"local_flow_control_window,omitempty"` - // The amount of window, granted to the remote endpoint by the local endpoint. - // This may be slightly out of date due to network latency. This does NOT - // include stream level or TCP level flow control info. - RemoteFlowControlWindow *wrapperspb.Int64Value `protobuf:"bytes,12,opt,name=remote_flow_control_window,json=remoteFlowControlWindow,proto3" json:"remote_flow_control_window,omitempty"` - // Socket options set on this socket. May be absent if 'summary' is set - // on GetSocketRequest. - Option []*SocketOption `protobuf:"bytes,13,rep,name=option,proto3" json:"option,omitempty"` -} - -func (x *SocketData) Reset() { - *x = SocketData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketData) ProtoMessage() {} - -func (x *SocketData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketData.ProtoReflect.Descriptor instead. -func (*SocketData) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{13} -} - -func (x *SocketData) GetStreamsStarted() int64 { - if x != nil { - return x.StreamsStarted - } - return 0 -} - -func (x *SocketData) GetStreamsSucceeded() int64 { - if x != nil { - return x.StreamsSucceeded - } - return 0 -} - -func (x *SocketData) GetStreamsFailed() int64 { - if x != nil { - return x.StreamsFailed - } - return 0 -} - -func (x *SocketData) GetMessagesSent() int64 { - if x != nil { - return x.MessagesSent - } - return 0 -} - -func (x *SocketData) GetMessagesReceived() int64 { - if x != nil { - return x.MessagesReceived - } - return 0 -} - -func (x *SocketData) GetKeepAlivesSent() int64 { - if x != nil { - return x.KeepAlivesSent - } - return 0 -} - -func (x *SocketData) GetLastLocalStreamCreatedTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastLocalStreamCreatedTimestamp - } - return nil -} - -func (x *SocketData) GetLastRemoteStreamCreatedTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastRemoteStreamCreatedTimestamp - } - return nil -} - -func (x *SocketData) GetLastMessageSentTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastMessageSentTimestamp - } - return nil -} - -func (x *SocketData) GetLastMessageReceivedTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.LastMessageReceivedTimestamp - } - return nil -} - -func (x *SocketData) GetLocalFlowControlWindow() *wrapperspb.Int64Value { - if x != nil { - return x.LocalFlowControlWindow - } - return nil -} - -func (x *SocketData) GetRemoteFlowControlWindow() *wrapperspb.Int64Value { - if x != nil { - return x.RemoteFlowControlWindow - } - return nil -} - -func (x *SocketData) GetOption() []*SocketOption { - if x != nil { - return x.Option - } - return nil -} - -// Address represents the address used to create the socket. -type Address struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Address: - // *Address_TcpipAddress - // *Address_UdsAddress_ - // *Address_OtherAddress_ - Address isAddress_Address `protobuf_oneof:"address"` -} - -func (x *Address) Reset() { - *x = Address{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address) ProtoMessage() {} - -func (x *Address) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address.ProtoReflect.Descriptor instead. -func (*Address) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{14} -} - -func (m *Address) GetAddress() isAddress_Address { - if m != nil { - return m.Address - } - return nil -} - -func (x *Address) GetTcpipAddress() *Address_TcpIpAddress { - if x, ok := x.GetAddress().(*Address_TcpipAddress); ok { - return x.TcpipAddress - } - return nil -} - -func (x *Address) GetUdsAddress() *Address_UdsAddress { - if x, ok := x.GetAddress().(*Address_UdsAddress_); ok { - return x.UdsAddress - } - return nil -} - -func (x *Address) GetOtherAddress() *Address_OtherAddress { - if x, ok := x.GetAddress().(*Address_OtherAddress_); ok { - return x.OtherAddress - } - return nil -} - -type isAddress_Address interface { - isAddress_Address() -} - -type Address_TcpipAddress struct { - TcpipAddress *Address_TcpIpAddress `protobuf:"bytes,1,opt,name=tcpip_address,json=tcpipAddress,proto3,oneof"` -} - -type Address_UdsAddress_ struct { - UdsAddress *Address_UdsAddress `protobuf:"bytes,2,opt,name=uds_address,json=udsAddress,proto3,oneof"` -} - -type Address_OtherAddress_ struct { - OtherAddress *Address_OtherAddress `protobuf:"bytes,3,opt,name=other_address,json=otherAddress,proto3,oneof"` -} - -func (*Address_TcpipAddress) isAddress_Address() {} - -func (*Address_UdsAddress_) isAddress_Address() {} - -func (*Address_OtherAddress_) isAddress_Address() {} - -// Security represents details about how secure the socket is. -type Security struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Model: - // *Security_Tls_ - // *Security_Other - Model isSecurity_Model `protobuf_oneof:"model"` -} - -func (x *Security) Reset() { - *x = Security{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Security) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Security) ProtoMessage() {} - -func (x *Security) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Security.ProtoReflect.Descriptor instead. -func (*Security) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{15} -} - -func (m *Security) GetModel() isSecurity_Model { - if m != nil { - return m.Model - } - return nil -} - -func (x *Security) GetTls() *Security_Tls { - if x, ok := x.GetModel().(*Security_Tls_); ok { - return x.Tls - } - return nil -} - -func (x *Security) GetOther() *Security_OtherSecurity { - if x, ok := x.GetModel().(*Security_Other); ok { - return x.Other - } - return nil -} - -type isSecurity_Model interface { - isSecurity_Model() -} - -type Security_Tls_ struct { - Tls *Security_Tls `protobuf:"bytes,1,opt,name=tls,proto3,oneof"` -} - -type Security_Other struct { - Other *Security_OtherSecurity `protobuf:"bytes,2,opt,name=other,proto3,oneof"` -} - -func (*Security_Tls_) isSecurity_Model() {} - -func (*Security_Other) isSecurity_Model() {} - -// SocketOption represents socket options for a socket. Specifically, these -// are the options returned by getsockopt(). -type SocketOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The full name of the socket option. Typically this will be the upper case - // name, such as "SO_REUSEPORT". - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The human readable value of this socket option. At least one of value or - // additional will be set. - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` - // Additional data associated with the socket option. At least one of value - // or additional will be set. - Additional *anypb.Any `protobuf:"bytes,3,opt,name=additional,proto3" json:"additional,omitempty"` -} - -func (x *SocketOption) Reset() { - *x = SocketOption{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketOption) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketOption) ProtoMessage() {} - -func (x *SocketOption) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketOption.ProtoReflect.Descriptor instead. -func (*SocketOption) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{16} -} - -func (x *SocketOption) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *SocketOption) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -func (x *SocketOption) GetAdditional() *anypb.Any { - if x != nil { - return x.Additional - } - return nil -} - -// For use with SocketOption's additional field. This is primarily used for -// SO_RCVTIMEO and SO_SNDTIMEO -type SocketOptionTimeout struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Duration *durationpb.Duration `protobuf:"bytes,1,opt,name=duration,proto3" json:"duration,omitempty"` -} - -func (x *SocketOptionTimeout) Reset() { - *x = SocketOptionTimeout{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketOptionTimeout) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketOptionTimeout) ProtoMessage() {} - -func (x *SocketOptionTimeout) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketOptionTimeout.ProtoReflect.Descriptor instead. -func (*SocketOptionTimeout) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{17} -} - -func (x *SocketOptionTimeout) GetDuration() *durationpb.Duration { - if x != nil { - return x.Duration - } - return nil -} - -// For use with SocketOption's additional field. This is primarily used for -// SO_LINGER. -type SocketOptionLinger struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // active maps to `struct linger.l_onoff` - Active bool `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"` - // duration maps to `struct linger.l_linger` - Duration *durationpb.Duration `protobuf:"bytes,2,opt,name=duration,proto3" json:"duration,omitempty"` -} - -func (x *SocketOptionLinger) Reset() { - *x = SocketOptionLinger{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketOptionLinger) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketOptionLinger) ProtoMessage() {} - -func (x *SocketOptionLinger) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketOptionLinger.ProtoReflect.Descriptor instead. -func (*SocketOptionLinger) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{18} -} - -func (x *SocketOptionLinger) GetActive() bool { - if x != nil { - return x.Active - } - return false -} - -func (x *SocketOptionLinger) GetDuration() *durationpb.Duration { - if x != nil { - return x.Duration - } - return nil -} - -// For use with SocketOption's additional field. Tcp info for -// SOL_TCP and TCP_INFO. -type SocketOptionTcpInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TcpiState uint32 `protobuf:"varint,1,opt,name=tcpi_state,json=tcpiState,proto3" json:"tcpi_state,omitempty"` - TcpiCaState uint32 `protobuf:"varint,2,opt,name=tcpi_ca_state,json=tcpiCaState,proto3" json:"tcpi_ca_state,omitempty"` - TcpiRetransmits uint32 `protobuf:"varint,3,opt,name=tcpi_retransmits,json=tcpiRetransmits,proto3" json:"tcpi_retransmits,omitempty"` - TcpiProbes uint32 `protobuf:"varint,4,opt,name=tcpi_probes,json=tcpiProbes,proto3" json:"tcpi_probes,omitempty"` - TcpiBackoff uint32 `protobuf:"varint,5,opt,name=tcpi_backoff,json=tcpiBackoff,proto3" json:"tcpi_backoff,omitempty"` - TcpiOptions uint32 `protobuf:"varint,6,opt,name=tcpi_options,json=tcpiOptions,proto3" json:"tcpi_options,omitempty"` - TcpiSndWscale uint32 `protobuf:"varint,7,opt,name=tcpi_snd_wscale,json=tcpiSndWscale,proto3" json:"tcpi_snd_wscale,omitempty"` - TcpiRcvWscale uint32 `protobuf:"varint,8,opt,name=tcpi_rcv_wscale,json=tcpiRcvWscale,proto3" json:"tcpi_rcv_wscale,omitempty"` - TcpiRto uint32 `protobuf:"varint,9,opt,name=tcpi_rto,json=tcpiRto,proto3" json:"tcpi_rto,omitempty"` - TcpiAto uint32 `protobuf:"varint,10,opt,name=tcpi_ato,json=tcpiAto,proto3" json:"tcpi_ato,omitempty"` - TcpiSndMss uint32 `protobuf:"varint,11,opt,name=tcpi_snd_mss,json=tcpiSndMss,proto3" json:"tcpi_snd_mss,omitempty"` - TcpiRcvMss uint32 `protobuf:"varint,12,opt,name=tcpi_rcv_mss,json=tcpiRcvMss,proto3" json:"tcpi_rcv_mss,omitempty"` - TcpiUnacked uint32 `protobuf:"varint,13,opt,name=tcpi_unacked,json=tcpiUnacked,proto3" json:"tcpi_unacked,omitempty"` - TcpiSacked uint32 `protobuf:"varint,14,opt,name=tcpi_sacked,json=tcpiSacked,proto3" json:"tcpi_sacked,omitempty"` - TcpiLost uint32 `protobuf:"varint,15,opt,name=tcpi_lost,json=tcpiLost,proto3" json:"tcpi_lost,omitempty"` - TcpiRetrans uint32 `protobuf:"varint,16,opt,name=tcpi_retrans,json=tcpiRetrans,proto3" json:"tcpi_retrans,omitempty"` - TcpiFackets uint32 `protobuf:"varint,17,opt,name=tcpi_fackets,json=tcpiFackets,proto3" json:"tcpi_fackets,omitempty"` - TcpiLastDataSent uint32 `protobuf:"varint,18,opt,name=tcpi_last_data_sent,json=tcpiLastDataSent,proto3" json:"tcpi_last_data_sent,omitempty"` - TcpiLastAckSent uint32 `protobuf:"varint,19,opt,name=tcpi_last_ack_sent,json=tcpiLastAckSent,proto3" json:"tcpi_last_ack_sent,omitempty"` - TcpiLastDataRecv uint32 `protobuf:"varint,20,opt,name=tcpi_last_data_recv,json=tcpiLastDataRecv,proto3" json:"tcpi_last_data_recv,omitempty"` - TcpiLastAckRecv uint32 `protobuf:"varint,21,opt,name=tcpi_last_ack_recv,json=tcpiLastAckRecv,proto3" json:"tcpi_last_ack_recv,omitempty"` - TcpiPmtu uint32 `protobuf:"varint,22,opt,name=tcpi_pmtu,json=tcpiPmtu,proto3" json:"tcpi_pmtu,omitempty"` - TcpiRcvSsthresh uint32 `protobuf:"varint,23,opt,name=tcpi_rcv_ssthresh,json=tcpiRcvSsthresh,proto3" json:"tcpi_rcv_ssthresh,omitempty"` - TcpiRtt uint32 `protobuf:"varint,24,opt,name=tcpi_rtt,json=tcpiRtt,proto3" json:"tcpi_rtt,omitempty"` - TcpiRttvar uint32 `protobuf:"varint,25,opt,name=tcpi_rttvar,json=tcpiRttvar,proto3" json:"tcpi_rttvar,omitempty"` - TcpiSndSsthresh uint32 `protobuf:"varint,26,opt,name=tcpi_snd_ssthresh,json=tcpiSndSsthresh,proto3" json:"tcpi_snd_ssthresh,omitempty"` - TcpiSndCwnd uint32 `protobuf:"varint,27,opt,name=tcpi_snd_cwnd,json=tcpiSndCwnd,proto3" json:"tcpi_snd_cwnd,omitempty"` - TcpiAdvmss uint32 `protobuf:"varint,28,opt,name=tcpi_advmss,json=tcpiAdvmss,proto3" json:"tcpi_advmss,omitempty"` - TcpiReordering uint32 `protobuf:"varint,29,opt,name=tcpi_reordering,json=tcpiReordering,proto3" json:"tcpi_reordering,omitempty"` -} - -func (x *SocketOptionTcpInfo) Reset() { - *x = SocketOptionTcpInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketOptionTcpInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketOptionTcpInfo) ProtoMessage() {} - -func (x *SocketOptionTcpInfo) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketOptionTcpInfo.ProtoReflect.Descriptor instead. -func (*SocketOptionTcpInfo) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{19} -} - -func (x *SocketOptionTcpInfo) GetTcpiState() uint32 { - if x != nil { - return x.TcpiState - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiCaState() uint32 { - if x != nil { - return x.TcpiCaState - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRetransmits() uint32 { - if x != nil { - return x.TcpiRetransmits - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiProbes() uint32 { - if x != nil { - return x.TcpiProbes - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiBackoff() uint32 { - if x != nil { - return x.TcpiBackoff - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiOptions() uint32 { - if x != nil { - return x.TcpiOptions - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiSndWscale() uint32 { - if x != nil { - return x.TcpiSndWscale - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRcvWscale() uint32 { - if x != nil { - return x.TcpiRcvWscale - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRto() uint32 { - if x != nil { - return x.TcpiRto - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiAto() uint32 { - if x != nil { - return x.TcpiAto - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiSndMss() uint32 { - if x != nil { - return x.TcpiSndMss - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRcvMss() uint32 { - if x != nil { - return x.TcpiRcvMss - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiUnacked() uint32 { - if x != nil { - return x.TcpiUnacked - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiSacked() uint32 { - if x != nil { - return x.TcpiSacked - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiLost() uint32 { - if x != nil { - return x.TcpiLost - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRetrans() uint32 { - if x != nil { - return x.TcpiRetrans - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiFackets() uint32 { - if x != nil { - return x.TcpiFackets - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiLastDataSent() uint32 { - if x != nil { - return x.TcpiLastDataSent - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiLastAckSent() uint32 { - if x != nil { - return x.TcpiLastAckSent - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiLastDataRecv() uint32 { - if x != nil { - return x.TcpiLastDataRecv - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiLastAckRecv() uint32 { - if x != nil { - return x.TcpiLastAckRecv - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiPmtu() uint32 { - if x != nil { - return x.TcpiPmtu - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRcvSsthresh() uint32 { - if x != nil { - return x.TcpiRcvSsthresh - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRtt() uint32 { - if x != nil { - return x.TcpiRtt - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiRttvar() uint32 { - if x != nil { - return x.TcpiRttvar - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiSndSsthresh() uint32 { - if x != nil { - return x.TcpiSndSsthresh - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiSndCwnd() uint32 { - if x != nil { - return x.TcpiSndCwnd - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiAdvmss() uint32 { - if x != nil { - return x.TcpiAdvmss - } - return 0 -} - -func (x *SocketOptionTcpInfo) GetTcpiReordering() uint32 { - if x != nil { - return x.TcpiReordering - } - return 0 -} - -type GetTopChannelsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // start_channel_id indicates that only channels at or above this id should be - // included in the results. - // To request the first page, this should be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result WorkloadID. - StartChannelId int64 `protobuf:"varint,1,opt,name=start_channel_id,json=startChannelId,proto3" json:"start_channel_id,omitempty"` - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - MaxResults int64 `protobuf:"varint,2,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"` -} - -func (x *GetTopChannelsRequest) Reset() { - *x = GetTopChannelsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTopChannelsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTopChannelsRequest) ProtoMessage() {} - -func (x *GetTopChannelsRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTopChannelsRequest.ProtoReflect.Descriptor instead. -func (*GetTopChannelsRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{20} -} - -func (x *GetTopChannelsRequest) GetStartChannelId() int64 { - if x != nil { - return x.StartChannelId - } - return 0 -} - -func (x *GetTopChannelsRequest) GetMaxResults() int64 { - if x != nil { - return x.MaxResults - } - return 0 -} - -type GetTopChannelsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // list of channels that the connection detail service knows about. Sorted in - // ascending channel_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - Channel []*Channel `protobuf:"bytes,1,rep,name=channel,proto3" json:"channel,omitempty"` - // If set, indicates that the list of channels is the final list. Requesting - // more channels can only return more if they are created after this RPC - // completes. - End bool `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *GetTopChannelsResponse) Reset() { - *x = GetTopChannelsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetTopChannelsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetTopChannelsResponse) ProtoMessage() {} - -func (x *GetTopChannelsResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetTopChannelsResponse.ProtoReflect.Descriptor instead. -func (*GetTopChannelsResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{21} -} - -func (x *GetTopChannelsResponse) GetChannel() []*Channel { - if x != nil { - return x.Channel - } - return nil -} - -func (x *GetTopChannelsResponse) GetEnd() bool { - if x != nil { - return x.End - } - return false -} - -type GetServersRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // start_server_id indicates that only servers at or above this id should be - // included in the results. - // To request the first page, this must be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result WorkloadID. - StartServerId int64 `protobuf:"varint,1,opt,name=start_server_id,json=startServerId,proto3" json:"start_server_id,omitempty"` - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - MaxResults int64 `protobuf:"varint,2,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"` -} - -func (x *GetServersRequest) Reset() { - *x = GetServersRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServersRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServersRequest) ProtoMessage() {} - -func (x *GetServersRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServersRequest.ProtoReflect.Descriptor instead. -func (*GetServersRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{22} -} - -func (x *GetServersRequest) GetStartServerId() int64 { - if x != nil { - return x.StartServerId - } - return 0 -} - -func (x *GetServersRequest) GetMaxResults() int64 { - if x != nil { - return x.MaxResults - } - return 0 -} - -type GetServersResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // list of servers that the connection detail service knows about. Sorted in - // ascending server_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - Server []*Server `protobuf:"bytes,1,rep,name=server,proto3" json:"server,omitempty"` - // If set, indicates that the list of servers is the final list. Requesting - // more servers will only return more if they are created after this RPC - // completes. - End bool `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *GetServersResponse) Reset() { - *x = GetServersResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServersResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServersResponse) ProtoMessage() {} - -func (x *GetServersResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServersResponse.ProtoReflect.Descriptor instead. -func (*GetServersResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{23} -} - -func (x *GetServersResponse) GetServer() []*Server { - if x != nil { - return x.Server - } - return nil -} - -func (x *GetServersResponse) GetEnd() bool { - if x != nil { - return x.End - } - return false -} - -type GetServerRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // server_id is the identifier of the specific server to get. - ServerId int64 `protobuf:"varint,1,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"` -} - -func (x *GetServerRequest) Reset() { - *x = GetServerRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServerRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServerRequest) ProtoMessage() {} - -func (x *GetServerRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServerRequest.ProtoReflect.Descriptor instead. -func (*GetServerRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{24} -} - -func (x *GetServerRequest) GetServerId() int64 { - if x != nil { - return x.ServerId - } - return 0 -} - -type GetServerResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Server that corresponds to the requested server_id. This field - // should be set. - Server *Server `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` -} - -func (x *GetServerResponse) Reset() { - *x = GetServerResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServerResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServerResponse) ProtoMessage() {} - -func (x *GetServerResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServerResponse.ProtoReflect.Descriptor instead. -func (*GetServerResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{25} -} - -func (x *GetServerResponse) GetServer() *Server { - if x != nil { - return x.Server - } - return nil -} - -type GetServerSocketsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServerId int64 `protobuf:"varint,1,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"` - // start_socket_id indicates that only sockets at or above this id should be - // included in the results. - // To request the first page, this must be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result WorkloadID. - StartSocketId int64 `protobuf:"varint,2,opt,name=start_socket_id,json=startSocketId,proto3" json:"start_socket_id,omitempty"` - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - MaxResults int64 `protobuf:"varint,3,opt,name=max_results,json=maxResults,proto3" json:"max_results,omitempty"` -} - -func (x *GetServerSocketsRequest) Reset() { - *x = GetServerSocketsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServerSocketsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServerSocketsRequest) ProtoMessage() {} - -func (x *GetServerSocketsRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServerSocketsRequest.ProtoReflect.Descriptor instead. -func (*GetServerSocketsRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{26} -} - -func (x *GetServerSocketsRequest) GetServerId() int64 { - if x != nil { - return x.ServerId - } - return 0 -} - -func (x *GetServerSocketsRequest) GetStartSocketId() int64 { - if x != nil { - return x.StartSocketId - } - return 0 -} - -func (x *GetServerSocketsRequest) GetMaxResults() int64 { - if x != nil { - return x.MaxResults - } - return 0 -} - -type GetServerSocketsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // list of socket refs that the connection detail service knows about. Sorted in - // ascending socket_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - SocketRef []*SocketRef `protobuf:"bytes,1,rep,name=socket_ref,json=socketRef,proto3" json:"socket_ref,omitempty"` - // If set, indicates that the list of sockets is the final list. Requesting - // more sockets will only return more if they are created after this RPC - // completes. - End bool `protobuf:"varint,2,opt,name=end,proto3" json:"end,omitempty"` -} - -func (x *GetServerSocketsResponse) Reset() { - *x = GetServerSocketsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetServerSocketsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetServerSocketsResponse) ProtoMessage() {} - -func (x *GetServerSocketsResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetServerSocketsResponse.ProtoReflect.Descriptor instead. -func (*GetServerSocketsResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{27} -} - -func (x *GetServerSocketsResponse) GetSocketRef() []*SocketRef { - if x != nil { - return x.SocketRef - } - return nil -} - -func (x *GetServerSocketsResponse) GetEnd() bool { - if x != nil { - return x.End - } - return false -} - -type GetChannelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // channel_id is the identifier of the specific channel to get. - ChannelId int64 `protobuf:"varint,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` -} - -func (x *GetChannelRequest) Reset() { - *x = GetChannelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetChannelRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChannelRequest) ProtoMessage() {} - -func (x *GetChannelRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetChannelRequest.ProtoReflect.Descriptor instead. -func (*GetChannelRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{28} -} - -func (x *GetChannelRequest) GetChannelId() int64 { - if x != nil { - return x.ChannelId - } - return 0 -} - -type GetChannelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Channel that corresponds to the requested channel_id. This field - // should be set. - Channel *Channel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"` -} - -func (x *GetChannelResponse) Reset() { - *x = GetChannelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetChannelResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetChannelResponse) ProtoMessage() {} - -func (x *GetChannelResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetChannelResponse.ProtoReflect.Descriptor instead. -func (*GetChannelResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{29} -} - -func (x *GetChannelResponse) GetChannel() *Channel { - if x != nil { - return x.Channel - } - return nil -} - -type GetSubchannelRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // subchannel_id is the identifier of the specific subchannel to get. - SubchannelId int64 `protobuf:"varint,1,opt,name=subchannel_id,json=subchannelId,proto3" json:"subchannel_id,omitempty"` -} - -func (x *GetSubchannelRequest) Reset() { - *x = GetSubchannelRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSubchannelRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSubchannelRequest) ProtoMessage() {} - -func (x *GetSubchannelRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSubchannelRequest.ProtoReflect.Descriptor instead. -func (*GetSubchannelRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{30} -} - -func (x *GetSubchannelRequest) GetSubchannelId() int64 { - if x != nil { - return x.SubchannelId - } - return 0 -} - -type GetSubchannelResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Subchannel that corresponds to the requested subchannel_id. This - // field should be set. - Subchannel *Subchannel `protobuf:"bytes,1,opt,name=subchannel,proto3" json:"subchannel,omitempty"` -} - -func (x *GetSubchannelResponse) Reset() { - *x = GetSubchannelResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSubchannelResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSubchannelResponse) ProtoMessage() {} - -func (x *GetSubchannelResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSubchannelResponse.ProtoReflect.Descriptor instead. -func (*GetSubchannelResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{31} -} - -func (x *GetSubchannelResponse) GetSubchannel() *Subchannel { - if x != nil { - return x.Subchannel - } - return nil -} - -type GetSocketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // socket_id is the identifier of the specific socket to get. - SocketId int64 `protobuf:"varint,1,opt,name=socket_id,json=socketId,proto3" json:"socket_id,omitempty"` - // If true, the response will contain only high level information - // that is inexpensive to obtain. Fields thay may be omitted are - // documented. - Summary bool `protobuf:"varint,2,opt,name=summary,proto3" json:"summary,omitempty"` -} - -func (x *GetSocketRequest) Reset() { - *x = GetSocketRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSocketRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSocketRequest) ProtoMessage() {} - -func (x *GetSocketRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSocketRequest.ProtoReflect.Descriptor instead. -func (*GetSocketRequest) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{32} -} - -func (x *GetSocketRequest) GetSocketId() int64 { - if x != nil { - return x.SocketId - } - return 0 -} - -func (x *GetSocketRequest) GetSummary() bool { - if x != nil { - return x.Summary - } - return false -} - -type GetSocketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Socket that corresponds to the requested socket_id. This field - // should be set. - Socket *Socket `protobuf:"bytes,1,opt,name=socket,proto3" json:"socket,omitempty"` -} - -func (x *GetSocketResponse) Reset() { - *x = GetSocketResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetSocketResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetSocketResponse) ProtoMessage() {} - -func (x *GetSocketResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetSocketResponse.ProtoReflect.Descriptor instead. -func (*GetSocketResponse) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{33} -} - -func (x *GetSocketResponse) GetSocket() *Socket { - if x != nil { - return x.Socket - } - return nil -} - -type Address_TcpIpAddress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16 - // bytes in length. - IpAddress []byte `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - // 0-64k, or -1 if not appropriate. - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` -} - -func (x *Address_TcpIpAddress) Reset() { - *x = Address_TcpIpAddress{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address_TcpIpAddress) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address_TcpIpAddress) ProtoMessage() {} - -func (x *Address_TcpIpAddress) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address_TcpIpAddress.ProtoReflect.Descriptor instead. -func (*Address_TcpIpAddress) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{14, 0} -} - -func (x *Address_TcpIpAddress) GetIpAddress() []byte { - if x != nil { - return x.IpAddress - } - return nil -} - -func (x *Address_TcpIpAddress) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -// A Unix Domain Socket address. -type Address_UdsAddress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` -} - -func (x *Address_UdsAddress) Reset() { - *x = Address_UdsAddress{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address_UdsAddress) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address_UdsAddress) ProtoMessage() {} - -func (x *Address_UdsAddress) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address_UdsAddress.ProtoReflect.Descriptor instead. -func (*Address_UdsAddress) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{14, 1} -} - -func (x *Address_UdsAddress) GetFilename() string { - if x != nil { - return x.Filename - } - return "" -} - -// An address type not included above. -type Address_OtherAddress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The human readable version of the value. This value should be set. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The actual address message. - Value *anypb.Any `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Address_OtherAddress) Reset() { - *x = Address_OtherAddress{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address_OtherAddress) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address_OtherAddress) ProtoMessage() {} - -func (x *Address_OtherAddress) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address_OtherAddress.ProtoReflect.Descriptor instead. -func (*Address_OtherAddress) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{14, 2} -} - -func (x *Address_OtherAddress) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Address_OtherAddress) GetValue() *anypb.Any { - if x != nil { - return x.Value - } - return nil -} - -type Security_Tls struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to CipherSuite: - // *Security_Tls_StandardName - // *Security_Tls_OtherName - CipherSuite isSecurity_Tls_CipherSuite `protobuf_oneof:"cipher_suite"` - // the certificate used by this endpoint. - LocalCertificate []byte `protobuf:"bytes,3,opt,name=local_certificate,json=localCertificate,proto3" json:"local_certificate,omitempty"` - // the certificate used by the remote endpoint. - RemoteCertificate []byte `protobuf:"bytes,4,opt,name=remote_certificate,json=remoteCertificate,proto3" json:"remote_certificate,omitempty"` -} - -func (x *Security_Tls) Reset() { - *x = Security_Tls{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Security_Tls) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Security_Tls) ProtoMessage() {} - -func (x *Security_Tls) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Security_Tls.ProtoReflect.Descriptor instead. -func (*Security_Tls) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{15, 0} -} - -func (m *Security_Tls) GetCipherSuite() isSecurity_Tls_CipherSuite { - if m != nil { - return m.CipherSuite - } - return nil -} - -func (x *Security_Tls) GetStandardName() string { - if x, ok := x.GetCipherSuite().(*Security_Tls_StandardName); ok { - return x.StandardName - } - return "" -} - -func (x *Security_Tls) GetOtherName() string { - if x, ok := x.GetCipherSuite().(*Security_Tls_OtherName); ok { - return x.OtherName - } - return "" -} - -func (x *Security_Tls) GetLocalCertificate() []byte { - if x != nil { - return x.LocalCertificate - } - return nil -} - -func (x *Security_Tls) GetRemoteCertificate() []byte { - if x != nil { - return x.RemoteCertificate - } - return nil -} - -type isSecurity_Tls_CipherSuite interface { - isSecurity_Tls_CipherSuite() -} - -type Security_Tls_StandardName struct { - // The cipher suite name in the RFC 4346 format: - // https://tools.ietf.org/html/rfc4346#appendix-C - StandardName string `protobuf:"bytes,1,opt,name=standard_name,json=standardName,proto3,oneof"` -} - -type Security_Tls_OtherName struct { - // Some other way to describe the cipher suite if - // the RFC 4346 name is not available. - OtherName string `protobuf:"bytes,2,opt,name=other_name,json=otherName,proto3,oneof"` -} - -func (*Security_Tls_StandardName) isSecurity_Tls_CipherSuite() {} - -func (*Security_Tls_OtherName) isSecurity_Tls_CipherSuite() {} - -type Security_OtherSecurity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The human readable version of the value. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The actual security details message. - Value *anypb.Any `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Security_OtherSecurity) Reset() { - *x = Security_OtherSecurity{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Security_OtherSecurity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Security_OtherSecurity) ProtoMessage() {} - -func (x *Security_OtherSecurity) ProtoReflect() protoreflect.Message { - mi := &file_grpc_channelz_v1_channelz_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Security_OtherSecurity.ProtoReflect.Descriptor instead. -func (*Security_OtherSecurity) Descriptor() ([]byte, []int) { - return file_grpc_channelz_v1_channelz_proto_rawDescGZIP(), []int{15, 1} -} - -func (x *Security_OtherSecurity) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Security_OtherSecurity) GetValue() *anypb.Any { - if x != nil { - return x.Value - } - return nil -} - -var File_grpc_channelz_v1_channelz_proto protoreflect.FileDescriptor - -var file_grpc_channelz_v1_channelz_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x10, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, - 0x2e, 0x76, 0x31, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0xaf, 0x02, 0x0a, 0x07, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2e, 0x0a, 0x03, 0x72, - 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x31, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, - 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, - 0x66, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x46, 0x0a, - 0x0e, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, - 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x66, 0x22, 0xb5, 0x02, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x12, 0x31, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x52, 0x03, - 0x72, 0x65, 0x66, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x46, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x52, 0x0d, - 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x3a, 0x0a, - 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x09, - 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x22, 0xc2, 0x01, 0x0a, 0x18, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x46, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x5e, - 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x44, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0e, - 0x0a, 0x0a, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x09, - 0x0a, 0x05, 0x52, 0x45, 0x41, 0x44, 0x59, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x04, - 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x05, 0x22, 0xe9, - 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x61, 0x74, 0x61, 0x12, 0x40, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x69, 0x74, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x34, 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, - 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, - 0x59, 0x0a, 0x1b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x98, 0x03, 0x0a, 0x11, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, - 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x48, 0x0a, 0x0e, 0x73, 0x75, 0x62, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, - 0x48, 0x00, 0x52, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, - 0x66, 0x22, 0x45, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, - 0x0a, 0x43, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x54, - 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x54, - 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x5f, 0x72, 0x65, 0x66, 0x22, 0xc2, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x67, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x67, - 0x65, 0x64, 0x12, 0x49, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3b, 0x0a, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x63, 0x0a, 0x0a, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, - 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, - 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, - 0x6c, 0x0a, 0x0d, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x66, - 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, - 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, 0x04, 0x08, 0x04, 0x10, - 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x60, 0x0a, - 0x09, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, - 0x06, 0x10, 0x07, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, - 0x60, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x09, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x4a, - 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x08, 0x10, - 0x09, 0x22, 0xab, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x03, - 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x30, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x40, 0x0a, - 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x66, 0x52, 0x0c, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x22, - 0x8e, 0x02, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x12, 0x34, - 0x0a, 0x05, 0x74, 0x72, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x65, 0x52, 0x05, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, - 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, - 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x59, 0x0a, 0x1b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x6c, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x22, 0xa6, 0x02, 0x0a, 0x06, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, - 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x05, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x12, 0x31, 0x0a, - 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x12, 0x36, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x83, 0x07, 0x0a, 0x0a, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x5f, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x12, 0x25, - 0x0a, 0x0e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x46, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6b, 0x65, 0x65, 0x70, 0x5f, - 0x61, 0x6c, 0x69, 0x76, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0e, 0x6b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x73, 0x53, 0x65, 0x6e, - 0x74, 0x12, 0x68, 0x0a, 0x23, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1f, 0x6c, 0x61, 0x73, 0x74, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x6a, 0x0a, 0x24, 0x6c, - 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x59, 0x0a, 0x1b, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x18, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x61, 0x0a, 0x1f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x1c, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x56, 0x0a, 0x19, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x66, - 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x77, 0x69, 0x6e, 0x64, - 0x6f, 0x77, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x46, 0x6c, 0x6f, 0x77, - 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x58, 0x0a, - 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x17, - 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, - 0x6c, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x12, 0x36, 0x0a, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0xb8, 0x03, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x74, - 0x63, 0x70, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x54, 0x63, - 0x70, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x63, - 0x70, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x47, 0x0a, 0x0b, 0x75, 0x64, - 0x73, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x55, 0x64, 0x73, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x75, 0x64, 0x73, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0d, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x1a, 0x41, 0x0a, 0x0c, 0x54, 0x63, 0x70, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x28, 0x0a, 0x0a, 0x55, 0x64, 0x73, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x1a, - 0x4e, 0x0a, 0x0c, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, - 0x09, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x96, 0x03, 0x0a, 0x08, 0x53, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x32, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x2e, 0x54, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x05, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x53, 0x65, 0x63, 0x75, - 0x72, 0x69, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x1a, 0xb9, 0x01, - 0x0a, 0x03, 0x54, 0x6c, 0x73, 0x12, 0x25, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, - 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, - 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0a, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x09, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, - 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x63, 0x69, 0x70, - 0x68, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x1a, 0x4f, 0x0a, 0x0d, 0x4f, 0x74, 0x68, - 0x65, 0x72, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2a, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x22, 0x6e, 0x0a, 0x0c, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, - 0x0a, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0a, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x22, 0x4c, 0x0a, 0x13, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x63, 0x0a, 0x12, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x69, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, - 0x35, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb2, 0x08, 0x0a, 0x13, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x63, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, - 0x0a, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x74, 0x63, 0x70, 0x69, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, - 0x0d, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x63, 0x61, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x43, 0x61, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x63, 0x70, - 0x69, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, - 0x74, 0x63, 0x70, 0x69, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, - 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x73, 0x6e, 0x64, 0x5f, - 0x77, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x63, - 0x70, 0x69, 0x53, 0x6e, 0x64, 0x57, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x74, - 0x63, 0x70, 0x69, 0x5f, 0x72, 0x63, 0x76, 0x5f, 0x77, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x63, 0x70, 0x69, 0x52, 0x63, 0x76, 0x57, 0x73, 0x63, - 0x61, 0x6c, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x74, 0x6f, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x63, 0x70, 0x69, 0x52, 0x74, 0x6f, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x61, 0x74, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x74, 0x63, 0x70, 0x69, 0x41, 0x74, 0x6f, 0x12, 0x20, 0x0a, 0x0c, 0x74, 0x63, 0x70, - 0x69, 0x5f, 0x73, 0x6e, 0x64, 0x5f, 0x6d, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x74, 0x63, 0x70, 0x69, 0x53, 0x6e, 0x64, 0x4d, 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x74, - 0x63, 0x70, 0x69, 0x5f, 0x72, 0x63, 0x76, 0x5f, 0x6d, 0x73, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x52, 0x63, 0x76, 0x4d, 0x73, 0x73, 0x12, 0x21, 0x0a, - 0x0c, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x75, 0x6e, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x55, 0x6e, 0x61, 0x63, 0x6b, 0x65, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x73, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x53, 0x61, 0x63, 0x6b, 0x65, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6c, 0x6f, 0x73, 0x74, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x74, 0x63, 0x70, 0x69, 0x4c, 0x6f, 0x73, 0x74, 0x12, 0x21, - 0x0a, 0x0c, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x52, 0x65, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x66, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x46, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x10, 0x74, 0x63, 0x70, 0x69, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x53, - 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x12, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x61, 0x63, 0x6b, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0f, 0x74, 0x63, 0x70, 0x69, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x53, 0x65, 0x6e, 0x74, - 0x12, 0x2d, 0x0a, 0x13, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x5f, 0x72, 0x65, 0x63, 0x76, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, - 0x63, 0x70, 0x69, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x63, 0x76, 0x12, - 0x2b, 0x0a, 0x12, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x6b, - 0x5f, 0x72, 0x65, 0x63, 0x76, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x63, 0x70, - 0x69, 0x4c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x6b, 0x52, 0x65, 0x63, 0x76, 0x12, 0x1b, 0x0a, 0x09, - 0x74, 0x63, 0x70, 0x69, 0x5f, 0x70, 0x6d, 0x74, 0x75, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x74, 0x63, 0x70, 0x69, 0x50, 0x6d, 0x74, 0x75, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x63, 0x70, - 0x69, 0x5f, 0x72, 0x63, 0x76, 0x5f, 0x73, 0x73, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x18, 0x17, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x63, 0x70, 0x69, 0x52, 0x63, 0x76, 0x53, 0x73, 0x74, - 0x68, 0x72, 0x65, 0x73, 0x68, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x74, - 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x63, 0x70, 0x69, 0x52, 0x74, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x74, 0x74, 0x76, 0x61, 0x72, 0x18, - 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x52, 0x74, 0x74, 0x76, 0x61, - 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x73, 0x6e, 0x64, 0x5f, 0x73, 0x73, - 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x63, - 0x70, 0x69, 0x53, 0x6e, 0x64, 0x53, 0x73, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x12, 0x22, 0x0a, - 0x0d, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x73, 0x6e, 0x64, 0x5f, 0x63, 0x77, 0x6e, 0x64, 0x18, 0x1b, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x53, 0x6e, 0x64, 0x43, 0x77, 0x6e, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x61, 0x64, 0x76, 0x6d, 0x73, 0x73, - 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x63, 0x70, 0x69, 0x41, 0x64, 0x76, 0x6d, - 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x63, 0x70, 0x69, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, - 0x65, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x74, 0x63, 0x70, - 0x69, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x22, 0x62, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x54, 0x6f, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, - 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x10, - 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, - 0x22, 0x5c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, - 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x58, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x2f, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x22, 0x7f, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, - 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x73, 0x22, 0x68, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x0a, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x09, - 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x32, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x22, - 0x49, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x3b, 0x0a, 0x14, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x22, 0x55, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3c, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0x49, - 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x22, 0x45, 0x0a, 0x11, 0x47, 0x65, 0x74, - 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x06, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x06, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x32, 0x9a, 0x05, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x12, 0x63, 0x0a, - 0x0e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, - 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, - 0x6f, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, - 0x12, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x0a, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x23, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x58, 0x0a, - 0x13, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x7a, 0x2e, 0x76, 0x31, 0x42, 0x0d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, - 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x7a, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x7a, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_channelz_v1_channelz_proto_rawDescOnce sync.Once - file_grpc_channelz_v1_channelz_proto_rawDescData = file_grpc_channelz_v1_channelz_proto_rawDesc -) - -func file_grpc_channelz_v1_channelz_proto_rawDescGZIP() []byte { - file_grpc_channelz_v1_channelz_proto_rawDescOnce.Do(func() { - file_grpc_channelz_v1_channelz_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_channelz_v1_channelz_proto_rawDescData) - }) - return file_grpc_channelz_v1_channelz_proto_rawDescData -} - -var file_grpc_channelz_v1_channelz_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_grpc_channelz_v1_channelz_proto_msgTypes = make([]protoimpl.MessageInfo, 39) -var file_grpc_channelz_v1_channelz_proto_goTypes = []interface{}{ - (ChannelConnectivityState_State)(0), // 0: grpc.channelz.v1.ChannelConnectivityState.State - (ChannelTraceEvent_Severity)(0), // 1: grpc.channelz.v1.ChannelTraceEvent.Severity - (*Channel)(nil), // 2: grpc.channelz.v1.Channel - (*Subchannel)(nil), // 3: grpc.channelz.v1.Subchannel - (*ChannelConnectivityState)(nil), // 4: grpc.channelz.v1.ChannelConnectivityState - (*ChannelData)(nil), // 5: grpc.channelz.v1.ChannelData - (*ChannelTraceEvent)(nil), // 6: grpc.channelz.v1.ChannelTraceEvent - (*ChannelTrace)(nil), // 7: grpc.channelz.v1.ChannelTrace - (*ChannelRef)(nil), // 8: grpc.channelz.v1.ChannelRef - (*SubchannelRef)(nil), // 9: grpc.channelz.v1.SubchannelRef - (*SocketRef)(nil), // 10: grpc.channelz.v1.SocketRef - (*ServerRef)(nil), // 11: grpc.channelz.v1.ServerRef - (*Server)(nil), // 12: grpc.channelz.v1.Server - (*ServerData)(nil), // 13: grpc.channelz.v1.ServerData - (*Socket)(nil), // 14: grpc.channelz.v1.Socket - (*SocketData)(nil), // 15: grpc.channelz.v1.SocketData - (*Address)(nil), // 16: grpc.channelz.v1.Address - (*Security)(nil), // 17: grpc.channelz.v1.Security - (*SocketOption)(nil), // 18: grpc.channelz.v1.SocketOption - (*SocketOptionTimeout)(nil), // 19: grpc.channelz.v1.SocketOptionTimeout - (*SocketOptionLinger)(nil), // 20: grpc.channelz.v1.SocketOptionLinger - (*SocketOptionTcpInfo)(nil), // 21: grpc.channelz.v1.SocketOptionTcpInfo - (*GetTopChannelsRequest)(nil), // 22: grpc.channelz.v1.GetTopChannelsRequest - (*GetTopChannelsResponse)(nil), // 23: grpc.channelz.v1.GetTopChannelsResponse - (*GetServersRequest)(nil), // 24: grpc.channelz.v1.GetServersRequest - (*GetServersResponse)(nil), // 25: grpc.channelz.v1.GetServersResponse - (*GetServerRequest)(nil), // 26: grpc.channelz.v1.GetServerRequest - (*GetServerResponse)(nil), // 27: grpc.channelz.v1.GetServerResponse - (*GetServerSocketsRequest)(nil), // 28: grpc.channelz.v1.GetServerSocketsRequest - (*GetServerSocketsResponse)(nil), // 29: grpc.channelz.v1.GetServerSocketsResponse - (*GetChannelRequest)(nil), // 30: grpc.channelz.v1.GetChannelRequest - (*GetChannelResponse)(nil), // 31: grpc.channelz.v1.GetChannelResponse - (*GetSubchannelRequest)(nil), // 32: grpc.channelz.v1.GetSubchannelRequest - (*GetSubchannelResponse)(nil), // 33: grpc.channelz.v1.GetSubchannelResponse - (*GetSocketRequest)(nil), // 34: grpc.channelz.v1.GetSocketRequest - (*GetSocketResponse)(nil), // 35: grpc.channelz.v1.GetSocketResponse - (*Address_TcpIpAddress)(nil), // 36: grpc.channelz.v1.Address.TcpIpAddress - (*Address_UdsAddress)(nil), // 37: grpc.channelz.v1.Address.UdsAddress - (*Address_OtherAddress)(nil), // 38: grpc.channelz.v1.Address.OtherAddress - (*Security_Tls)(nil), // 39: grpc.channelz.v1.Security.Tls - (*Security_OtherSecurity)(nil), // 40: grpc.channelz.v1.Security.OtherSecurity - (*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp - (*wrapperspb.Int64Value)(nil), // 42: google.protobuf.Int64Value - (*anypb.Any)(nil), // 43: google.protobuf.Any - (*durationpb.Duration)(nil), // 44: google.protobuf.Duration -} -var file_grpc_channelz_v1_channelz_proto_depIdxs = []int32{ - 8, // 0: grpc.channelz.v1.Channel.ref:type_name -> grpc.channelz.v1.ChannelRef - 5, // 1: grpc.channelz.v1.Channel.data:type_name -> grpc.channelz.v1.ChannelData - 8, // 2: grpc.channelz.v1.Channel.channel_ref:type_name -> grpc.channelz.v1.ChannelRef - 9, // 3: grpc.channelz.v1.Channel.subchannel_ref:type_name -> grpc.channelz.v1.SubchannelRef - 10, // 4: grpc.channelz.v1.Channel.socket_ref:type_name -> grpc.channelz.v1.SocketRef - 9, // 5: grpc.channelz.v1.Subchannel.ref:type_name -> grpc.channelz.v1.SubchannelRef - 5, // 6: grpc.channelz.v1.Subchannel.data:type_name -> grpc.channelz.v1.ChannelData - 8, // 7: grpc.channelz.v1.Subchannel.channel_ref:type_name -> grpc.channelz.v1.ChannelRef - 9, // 8: grpc.channelz.v1.Subchannel.subchannel_ref:type_name -> grpc.channelz.v1.SubchannelRef - 10, // 9: grpc.channelz.v1.Subchannel.socket_ref:type_name -> grpc.channelz.v1.SocketRef - 0, // 10: grpc.channelz.v1.ChannelConnectivityState.state:type_name -> grpc.channelz.v1.ChannelConnectivityState.State - 4, // 11: grpc.channelz.v1.ChannelData.state:type_name -> grpc.channelz.v1.ChannelConnectivityState - 7, // 12: grpc.channelz.v1.ChannelData.trace:type_name -> grpc.channelz.v1.ChannelTrace - 41, // 13: grpc.channelz.v1.ChannelData.last_call_started_timestamp:type_name -> google.protobuf.Timestamp - 1, // 14: grpc.channelz.v1.ChannelTraceEvent.severity:type_name -> grpc.channelz.v1.ChannelTraceEvent.Severity - 41, // 15: grpc.channelz.v1.ChannelTraceEvent.timestamp:type_name -> google.protobuf.Timestamp - 8, // 16: grpc.channelz.v1.ChannelTraceEvent.channel_ref:type_name -> grpc.channelz.v1.ChannelRef - 9, // 17: grpc.channelz.v1.ChannelTraceEvent.subchannel_ref:type_name -> grpc.channelz.v1.SubchannelRef - 41, // 18: grpc.channelz.v1.ChannelTrace.creation_timestamp:type_name -> google.protobuf.Timestamp - 6, // 19: grpc.channelz.v1.ChannelTrace.events:type_name -> grpc.channelz.v1.ChannelTraceEvent - 11, // 20: grpc.channelz.v1.Server.ref:type_name -> grpc.channelz.v1.ServerRef - 13, // 21: grpc.channelz.v1.Server.data:type_name -> grpc.channelz.v1.ServerData - 10, // 22: grpc.channelz.v1.Server.listen_socket:type_name -> grpc.channelz.v1.SocketRef - 7, // 23: grpc.channelz.v1.ServerData.trace:type_name -> grpc.channelz.v1.ChannelTrace - 41, // 24: grpc.channelz.v1.ServerData.last_call_started_timestamp:type_name -> google.protobuf.Timestamp - 10, // 25: grpc.channelz.v1.Socket.ref:type_name -> grpc.channelz.v1.SocketRef - 15, // 26: grpc.channelz.v1.Socket.data:type_name -> grpc.channelz.v1.SocketData - 16, // 27: grpc.channelz.v1.Socket.local:type_name -> grpc.channelz.v1.Address - 16, // 28: grpc.channelz.v1.Socket.remote:type_name -> grpc.channelz.v1.Address - 17, // 29: grpc.channelz.v1.Socket.security:type_name -> grpc.channelz.v1.Security - 41, // 30: grpc.channelz.v1.SocketData.last_local_stream_created_timestamp:type_name -> google.protobuf.Timestamp - 41, // 31: grpc.channelz.v1.SocketData.last_remote_stream_created_timestamp:type_name -> google.protobuf.Timestamp - 41, // 32: grpc.channelz.v1.SocketData.last_message_sent_timestamp:type_name -> google.protobuf.Timestamp - 41, // 33: grpc.channelz.v1.SocketData.last_message_received_timestamp:type_name -> google.protobuf.Timestamp - 42, // 34: grpc.channelz.v1.SocketData.local_flow_control_window:type_name -> google.protobuf.Int64Value - 42, // 35: grpc.channelz.v1.SocketData.remote_flow_control_window:type_name -> google.protobuf.Int64Value - 18, // 36: grpc.channelz.v1.SocketData.option:type_name -> grpc.channelz.v1.SocketOption - 36, // 37: grpc.channelz.v1.Address.tcpip_address:type_name -> grpc.channelz.v1.Address.TcpIpAddress - 37, // 38: grpc.channelz.v1.Address.uds_address:type_name -> grpc.channelz.v1.Address.UdsAddress - 38, // 39: grpc.channelz.v1.Address.other_address:type_name -> grpc.channelz.v1.Address.OtherAddress - 39, // 40: grpc.channelz.v1.Security.tls:type_name -> grpc.channelz.v1.Security.Tls - 40, // 41: grpc.channelz.v1.Security.other:type_name -> grpc.channelz.v1.Security.OtherSecurity - 43, // 42: grpc.channelz.v1.SocketOption.additional:type_name -> google.protobuf.Any - 44, // 43: grpc.channelz.v1.SocketOptionTimeout.duration:type_name -> google.protobuf.Duration - 44, // 44: grpc.channelz.v1.SocketOptionLinger.duration:type_name -> google.protobuf.Duration - 2, // 45: grpc.channelz.v1.GetTopChannelsResponse.channel:type_name -> grpc.channelz.v1.Channel - 12, // 46: grpc.channelz.v1.GetServersResponse.server:type_name -> grpc.channelz.v1.Server - 12, // 47: grpc.channelz.v1.GetServerResponse.server:type_name -> grpc.channelz.v1.Server - 10, // 48: grpc.channelz.v1.GetServerSocketsResponse.socket_ref:type_name -> grpc.channelz.v1.SocketRef - 2, // 49: grpc.channelz.v1.GetChannelResponse.channel:type_name -> grpc.channelz.v1.Channel - 3, // 50: grpc.channelz.v1.GetSubchannelResponse.subchannel:type_name -> grpc.channelz.v1.Subchannel - 14, // 51: grpc.channelz.v1.GetSocketResponse.socket:type_name -> grpc.channelz.v1.Socket - 43, // 52: grpc.channelz.v1.Address.OtherAddress.value:type_name -> google.protobuf.Any - 43, // 53: grpc.channelz.v1.Security.OtherSecurity.value:type_name -> google.protobuf.Any - 22, // 54: grpc.channelz.v1.Channelz.GetTopChannels:input_type -> grpc.channelz.v1.GetTopChannelsRequest - 24, // 55: grpc.channelz.v1.Channelz.GetServers:input_type -> grpc.channelz.v1.GetServersRequest - 26, // 56: grpc.channelz.v1.Channelz.GetServer:input_type -> grpc.channelz.v1.GetServerRequest - 28, // 57: grpc.channelz.v1.Channelz.GetServerSockets:input_type -> grpc.channelz.v1.GetServerSocketsRequest - 30, // 58: grpc.channelz.v1.Channelz.GetChannel:input_type -> grpc.channelz.v1.GetChannelRequest - 32, // 59: grpc.channelz.v1.Channelz.GetSubchannel:input_type -> grpc.channelz.v1.GetSubchannelRequest - 34, // 60: grpc.channelz.v1.Channelz.GetSocket:input_type -> grpc.channelz.v1.GetSocketRequest - 23, // 61: grpc.channelz.v1.Channelz.GetTopChannels:output_type -> grpc.channelz.v1.GetTopChannelsResponse - 25, // 62: grpc.channelz.v1.Channelz.GetServers:output_type -> grpc.channelz.v1.GetServersResponse - 27, // 63: grpc.channelz.v1.Channelz.GetServer:output_type -> grpc.channelz.v1.GetServerResponse - 29, // 64: grpc.channelz.v1.Channelz.GetServerSockets:output_type -> grpc.channelz.v1.GetServerSocketsResponse - 31, // 65: grpc.channelz.v1.Channelz.GetChannel:output_type -> grpc.channelz.v1.GetChannelResponse - 33, // 66: grpc.channelz.v1.Channelz.GetSubchannel:output_type -> grpc.channelz.v1.GetSubchannelResponse - 35, // 67: grpc.channelz.v1.Channelz.GetSocket:output_type -> grpc.channelz.v1.GetSocketResponse - 61, // [61:68] is the sub-list for method output_type - 54, // [54:61] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name -} - -func init() { file_grpc_channelz_v1_channelz_proto_init() } -func file_grpc_channelz_v1_channelz_proto_init() { - if File_grpc_channelz_v1_channelz_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_channelz_v1_channelz_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Channel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subchannel); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelConnectivityState); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelTraceEvent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelTrace); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubchannelRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerRef); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Server); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Socket); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Security); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketOption); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketOptionTimeout); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketOptionLinger); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketOptionTcpInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTopChannelsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTopChannelsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServersRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServersResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServerRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServerResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServerSocketsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetServerSocketsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChannelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetChannelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubchannelRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSubchannelResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSocketRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetSocketResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address_TcpIpAddress); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address_UdsAddress); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address_OtherAddress); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Security_Tls); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Security_OtherSecurity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_channelz_v1_channelz_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*ChannelTraceEvent_ChannelRef)(nil), - (*ChannelTraceEvent_SubchannelRef)(nil), - } - file_grpc_channelz_v1_channelz_proto_msgTypes[14].OneofWrappers = []interface{}{ - (*Address_TcpipAddress)(nil), - (*Address_UdsAddress_)(nil), - (*Address_OtherAddress_)(nil), - } - file_grpc_channelz_v1_channelz_proto_msgTypes[15].OneofWrappers = []interface{}{ - (*Security_Tls_)(nil), - (*Security_Other)(nil), - } - file_grpc_channelz_v1_channelz_proto_msgTypes[37].OneofWrappers = []interface{}{ - (*Security_Tls_StandardName)(nil), - (*Security_Tls_OtherName)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_channelz_v1_channelz_proto_rawDesc, - NumEnums: 2, - NumMessages: 39, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_channelz_v1_channelz_proto_goTypes, - DependencyIndexes: file_grpc_channelz_v1_channelz_proto_depIdxs, - EnumInfos: file_grpc_channelz_v1_channelz_proto_enumTypes, - MessageInfos: file_grpc_channelz_v1_channelz_proto_msgTypes, - }.Build() - File_grpc_channelz_v1_channelz_proto = out.File - file_grpc_channelz_v1_channelz_proto_rawDesc = nil - file_grpc_channelz_v1_channelz_proto_goTypes = nil - file_grpc_channelz_v1_channelz_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/core/stats.pb.go b/gen/proto/grpc/core/stats.pb.go deleted file mode 100644 index 01c2947..0000000 --- a/gen/proto/grpc/core/stats.pb.go +++ /dev/null @@ -1,410 +0,0 @@ -// Copyright 2017 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/core/stats.proto - -package core - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type Bucket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Start float64 `protobuf:"fixed64,1,opt,name=start,proto3" json:"start,omitempty"` - Count uint64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` -} - -func (x *Bucket) Reset() { - *x = Bucket{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_core_stats_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Bucket) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Bucket) ProtoMessage() {} - -func (x *Bucket) ProtoReflect() protoreflect.Message { - mi := &file_grpc_core_stats_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Bucket.ProtoReflect.Descriptor instead. -func (*Bucket) Descriptor() ([]byte, []int) { - return file_grpc_core_stats_proto_rawDescGZIP(), []int{0} -} - -func (x *Bucket) GetStart() float64 { - if x != nil { - return x.Start - } - return 0 -} - -func (x *Bucket) GetCount() uint64 { - if x != nil { - return x.Count - } - return 0 -} - -type Histogram struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Buckets []*Bucket `protobuf:"bytes,1,rep,name=buckets,proto3" json:"buckets,omitempty"` -} - -func (x *Histogram) Reset() { - *x = Histogram{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_core_stats_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Histogram) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Histogram) ProtoMessage() {} - -func (x *Histogram) ProtoReflect() protoreflect.Message { - mi := &file_grpc_core_stats_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Histogram.ProtoReflect.Descriptor instead. -func (*Histogram) Descriptor() ([]byte, []int) { - return file_grpc_core_stats_proto_rawDescGZIP(), []int{1} -} - -func (x *Histogram) GetBuckets() []*Bucket { - if x != nil { - return x.Buckets - } - return nil -} - -type Metric struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are assignable to Value: - // *Metric_Count - // *Metric_Histogram - Value isMetric_Value `protobuf_oneof:"value"` -} - -func (x *Metric) Reset() { - *x = Metric{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_core_stats_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Metric) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Metric) ProtoMessage() {} - -func (x *Metric) ProtoReflect() protoreflect.Message { - mi := &file_grpc_core_stats_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Metric.ProtoReflect.Descriptor instead. -func (*Metric) Descriptor() ([]byte, []int) { - return file_grpc_core_stats_proto_rawDescGZIP(), []int{2} -} - -func (x *Metric) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (m *Metric) GetValue() isMetric_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *Metric) GetCount() uint64 { - if x, ok := x.GetValue().(*Metric_Count); ok { - return x.Count - } - return 0 -} - -func (x *Metric) GetHistogram() *Histogram { - if x, ok := x.GetValue().(*Metric_Histogram); ok { - return x.Histogram - } - return nil -} - -type isMetric_Value interface { - isMetric_Value() -} - -type Metric_Count struct { - Count uint64 `protobuf:"varint,10,opt,name=count,proto3,oneof"` -} - -type Metric_Histogram struct { - Histogram *Histogram `protobuf:"bytes,11,opt,name=histogram,proto3,oneof"` -} - -func (*Metric_Count) isMetric_Value() {} - -func (*Metric_Histogram) isMetric_Value() {} - -type Stats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Metrics []*Metric `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"` -} - -func (x *Stats) Reset() { - *x = Stats{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_core_stats_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Stats) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Stats) ProtoMessage() {} - -func (x *Stats) ProtoReflect() protoreflect.Message { - mi := &file_grpc_core_stats_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Stats.ProtoReflect.Descriptor instead. -func (*Stats) Descriptor() ([]byte, []int) { - return file_grpc_core_stats_proto_rawDescGZIP(), []int{3} -} - -func (x *Stats) GetMetrics() []*Metric { - if x != nil { - return x.Metrics - } - return nil -} - -var File_grpc_core_stats_proto protoreflect.FileDescriptor - -var file_grpc_core_stats_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x09, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x22, 0x34, 0x0a, 0x06, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x38, 0x0a, 0x09, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x2b, 0x0a, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, - 0x72, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x22, 0x73, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x48, - 0x00, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x48, 0x00, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x07, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x34, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x2b, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x42, 0x2e, 0x5a, - 0x2c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, - 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_core_stats_proto_rawDescOnce sync.Once - file_grpc_core_stats_proto_rawDescData = file_grpc_core_stats_proto_rawDesc -) - -func file_grpc_core_stats_proto_rawDescGZIP() []byte { - file_grpc_core_stats_proto_rawDescOnce.Do(func() { - file_grpc_core_stats_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_core_stats_proto_rawDescData) - }) - return file_grpc_core_stats_proto_rawDescData -} - -var file_grpc_core_stats_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_grpc_core_stats_proto_goTypes = []interface{}{ - (*Bucket)(nil), // 0: grpc.core.Bucket - (*Histogram)(nil), // 1: grpc.core.Histogram - (*Metric)(nil), // 2: grpc.core.Metric - (*Stats)(nil), // 3: grpc.core.Stats -} -var file_grpc_core_stats_proto_depIdxs = []int32{ - 0, // 0: grpc.core.Histogram.buckets:type_name -> grpc.core.Bucket - 1, // 1: grpc.core.Metric.histogram:type_name -> grpc.core.Histogram - 2, // 2: grpc.core.Stats.metrics:type_name -> grpc.core.Metric - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_grpc_core_stats_proto_init() } -func file_grpc_core_stats_proto_init() { - if File_grpc_core_stats_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_core_stats_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Bucket); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_core_stats_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Histogram); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_core_stats_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metric); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_core_stats_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Stats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_core_stats_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*Metric_Count)(nil), - (*Metric_Histogram)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_core_stats_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_core_stats_proto_goTypes, - DependencyIndexes: file_grpc_core_stats_proto_depIdxs, - MessageInfos: file_grpc_core_stats_proto_msgTypes, - }.Build() - File_grpc_core_stats_proto = out.File - file_grpc_core_stats_proto_rawDesc = nil - file_grpc_core_stats_proto_goTypes = nil - file_grpc_core_stats_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/gcp/altscontext.pb.go b/gen/proto/grpc/gcp/altscontext.pb.go deleted file mode 100644 index ae9529b..0000000 --- a/gen/proto/grpc/gcp/altscontext.pb.go +++ /dev/null @@ -1,259 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/altscontext.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/gcp/altscontext.proto - -package grpc_gcp - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type AltsContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The application protocol negotiated for this connection. - ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol,proto3" json:"application_protocol,omitempty"` - // The record protocol negotiated for this connection. - RecordProtocol string `protobuf:"bytes,2,opt,name=record_protocol,json=recordProtocol,proto3" json:"record_protocol,omitempty"` - // The security level of the created secure channel. - SecurityLevel SecurityLevel `protobuf:"varint,3,opt,name=security_level,json=securityLevel,proto3,enum=grpc.gcp.SecurityLevel" json:"security_level,omitempty"` - // The peer service account. - PeerServiceAccount string `protobuf:"bytes,4,opt,name=peer_service_account,json=peerServiceAccount,proto3" json:"peer_service_account,omitempty"` - // The local service account. - LocalServiceAccount string `protobuf:"bytes,5,opt,name=local_service_account,json=localServiceAccount,proto3" json:"local_service_account,omitempty"` - // The RPC protocol versions supported by the peer. - PeerRpcVersions *RpcProtocolVersions `protobuf:"bytes,6,opt,name=peer_rpc_versions,json=peerRpcVersions,proto3" json:"peer_rpc_versions,omitempty"` - // Additional attributes of the peer. - PeerAttributes map[string]string `protobuf:"bytes,7,rep,name=peer_attributes,json=peerAttributes,proto3" json:"peer_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *AltsContext) Reset() { - *x = AltsContext{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_altscontext_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AltsContext) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AltsContext) ProtoMessage() {} - -func (x *AltsContext) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_altscontext_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AltsContext.ProtoReflect.Descriptor instead. -func (*AltsContext) Descriptor() ([]byte, []int) { - return file_grpc_gcp_altscontext_proto_rawDescGZIP(), []int{0} -} - -func (x *AltsContext) GetApplicationProtocol() string { - if x != nil { - return x.ApplicationProtocol - } - return "" -} - -func (x *AltsContext) GetRecordProtocol() string { - if x != nil { - return x.RecordProtocol - } - return "" -} - -func (x *AltsContext) GetSecurityLevel() SecurityLevel { - if x != nil { - return x.SecurityLevel - } - return SecurityLevel_SECURITY_NONE -} - -func (x *AltsContext) GetPeerServiceAccount() string { - if x != nil { - return x.PeerServiceAccount - } - return "" -} - -func (x *AltsContext) GetLocalServiceAccount() string { - if x != nil { - return x.LocalServiceAccount - } - return "" -} - -func (x *AltsContext) GetPeerRpcVersions() *RpcProtocolVersions { - if x != nil { - return x.PeerRpcVersions - } - return nil -} - -func (x *AltsContext) GetPeerAttributes() map[string]string { - if x != nil { - return x.PeerAttributes - } - return nil -} - -var File_grpc_gcp_altscontext_proto protoreflect.FileDescriptor - -var file_grpc_gcp_altscontext_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x63, 0x70, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x1a, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x63, 0x70, - 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xf1, 0x03, 0x0a, 0x0b, 0x41, 0x6c, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x12, 0x31, 0x0a, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, - 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, - 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x3e, 0x0a, 0x0e, - 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x0d, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x30, 0x0a, 0x14, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x65, 0x65, 0x72, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x32, - 0x0a, 0x15, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x49, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x70, 0x65, - 0x65, 0x72, 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x52, 0x0a, - 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, - 0x70, 0x2e, 0x41, 0x6c, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x50, 0x65, - 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0e, 0x70, 0x65, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x50, 0x65, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x42, 0x6c, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x61, 0x6c, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x42, 0x10, 0x41, - 0x6c, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x67, - 0x63, 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_gcp_altscontext_proto_rawDescOnce sync.Once - file_grpc_gcp_altscontext_proto_rawDescData = file_grpc_gcp_altscontext_proto_rawDesc -) - -func file_grpc_gcp_altscontext_proto_rawDescGZIP() []byte { - file_grpc_gcp_altscontext_proto_rawDescOnce.Do(func() { - file_grpc_gcp_altscontext_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_gcp_altscontext_proto_rawDescData) - }) - return file_grpc_gcp_altscontext_proto_rawDescData -} - -var file_grpc_gcp_altscontext_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_grpc_gcp_altscontext_proto_goTypes = []interface{}{ - (*AltsContext)(nil), // 0: grpc.gcp.AltsContext - nil, // 1: grpc.gcp.AltsContext.PeerAttributesEntry - (SecurityLevel)(0), // 2: grpc.gcp.SecurityLevel - (*RpcProtocolVersions)(nil), // 3: grpc.gcp.RpcProtocolVersions -} -var file_grpc_gcp_altscontext_proto_depIdxs = []int32{ - 2, // 0: grpc.gcp.AltsContext.security_level:type_name -> grpc.gcp.SecurityLevel - 3, // 1: grpc.gcp.AltsContext.peer_rpc_versions:type_name -> grpc.gcp.RpcProtocolVersions - 1, // 2: grpc.gcp.AltsContext.peer_attributes:type_name -> grpc.gcp.AltsContext.PeerAttributesEntry - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_grpc_gcp_altscontext_proto_init() } -func file_grpc_gcp_altscontext_proto_init() { - if File_grpc_gcp_altscontext_proto != nil { - return - } - file_grpc_gcp_transport_security_common_proto_init() - if !protoimpl.UnsafeEnabled { - file_grpc_gcp_altscontext_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AltsContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_gcp_altscontext_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_gcp_altscontext_proto_goTypes, - DependencyIndexes: file_grpc_gcp_altscontext_proto_depIdxs, - MessageInfos: file_grpc_gcp_altscontext_proto_msgTypes, - }.Build() - File_grpc_gcp_altscontext_proto = out.File - file_grpc_gcp_altscontext_proto_rawDesc = nil - file_grpc_gcp_altscontext_proto_goTypes = nil - file_grpc_gcp_altscontext_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/gcp/handshaker.pb.go b/gen/proto/grpc/gcp/handshaker.pb.go deleted file mode 100644 index 2755d58..0000000 --- a/gen/proto/grpc/gcp/handshaker.pb.go +++ /dev/null @@ -1,1421 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/handshaker.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/gcp/handshaker.proto - -package grpc_gcp - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type HandshakeProtocol int32 - -const ( - // Default value. - HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED HandshakeProtocol = 0 - // TLS handshake protocol. - HandshakeProtocol_TLS HandshakeProtocol = 1 - // Application Layer Transport Security handshake protocol. - HandshakeProtocol_ALTS HandshakeProtocol = 2 -) - -// Enum value maps for HandshakeProtocol. -var ( - HandshakeProtocol_name = map[int32]string{ - 0: "HANDSHAKE_PROTOCOL_UNSPECIFIED", - 1: "TLS", - 2: "ALTS", - } - HandshakeProtocol_value = map[string]int32{ - "HANDSHAKE_PROTOCOL_UNSPECIFIED": 0, - "TLS": 1, - "ALTS": 2, - } -) - -func (x HandshakeProtocol) Enum() *HandshakeProtocol { - p := new(HandshakeProtocol) - *p = x - return p -} - -func (x HandshakeProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (HandshakeProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_gcp_handshaker_proto_enumTypes[0].Descriptor() -} - -func (HandshakeProtocol) Type() protoreflect.EnumType { - return &file_grpc_gcp_handshaker_proto_enumTypes[0] -} - -func (x HandshakeProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use HandshakeProtocol.Descriptor instead. -func (HandshakeProtocol) EnumDescriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{0} -} - -type NetworkProtocol int32 - -const ( - NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED NetworkProtocol = 0 - NetworkProtocol_TCP NetworkProtocol = 1 - NetworkProtocol_UDP NetworkProtocol = 2 -) - -// Enum value maps for NetworkProtocol. -var ( - NetworkProtocol_name = map[int32]string{ - 0: "NETWORK_PROTOCOL_UNSPECIFIED", - 1: "TCP", - 2: "UDP", - } - NetworkProtocol_value = map[string]int32{ - "NETWORK_PROTOCOL_UNSPECIFIED": 0, - "TCP": 1, - "UDP": 2, - } -) - -func (x NetworkProtocol) Enum() *NetworkProtocol { - p := new(NetworkProtocol) - *p = x - return p -} - -func (x NetworkProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (NetworkProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_gcp_handshaker_proto_enumTypes[1].Descriptor() -} - -func (NetworkProtocol) Type() protoreflect.EnumType { - return &file_grpc_gcp_handshaker_proto_enumTypes[1] -} - -func (x NetworkProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use NetworkProtocol.Descriptor instead. -func (NetworkProtocol) EnumDescriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{1} -} - -type Endpoint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // IP address. It should contain an IPv4 or IPv6 string literal, e.g. - // "192.168.0.1" or "2001:db8::1". - IpAddress string `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - // Port number. - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - // Network protocol (e.g., TCP, UDP) associated with this endpoint. - Protocol NetworkProtocol `protobuf:"varint,3,opt,name=protocol,proto3,enum=grpc.gcp.NetworkProtocol" json:"protocol,omitempty"` -} - -func (x *Endpoint) Reset() { - *x = Endpoint{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Endpoint) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Endpoint) ProtoMessage() {} - -func (x *Endpoint) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Endpoint.ProtoReflect.Descriptor instead. -func (*Endpoint) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{0} -} - -func (x *Endpoint) GetIpAddress() string { - if x != nil { - return x.IpAddress - } - return "" -} - -func (x *Endpoint) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *Endpoint) GetProtocol() NetworkProtocol { - if x != nil { - return x.Protocol - } - return NetworkProtocol_NETWORK_PROTOCOL_UNSPECIFIED -} - -type Identity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to IdentityOneof: - // *Identity_ServiceAccount - // *Identity_Hostname - IdentityOneof isIdentity_IdentityOneof `protobuf_oneof:"identity_oneof"` - // Additional attributes of the identity. - Attributes map[string]string `protobuf:"bytes,3,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Identity) Reset() { - *x = Identity{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Identity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Identity) ProtoMessage() {} - -func (x *Identity) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Identity.ProtoReflect.Descriptor instead. -func (*Identity) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{1} -} - -func (m *Identity) GetIdentityOneof() isIdentity_IdentityOneof { - if m != nil { - return m.IdentityOneof - } - return nil -} - -func (x *Identity) GetServiceAccount() string { - if x, ok := x.GetIdentityOneof().(*Identity_ServiceAccount); ok { - return x.ServiceAccount - } - return "" -} - -func (x *Identity) GetHostname() string { - if x, ok := x.GetIdentityOneof().(*Identity_Hostname); ok { - return x.Hostname - } - return "" -} - -func (x *Identity) GetAttributes() map[string]string { - if x != nil { - return x.Attributes - } - return nil -} - -type isIdentity_IdentityOneof interface { - isIdentity_IdentityOneof() -} - -type Identity_ServiceAccount struct { - // Service account of a connection endpoint. - ServiceAccount string `protobuf:"bytes,1,opt,name=service_account,json=serviceAccount,proto3,oneof"` -} - -type Identity_Hostname struct { - // Hostname of a connection endpoint. - Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3,oneof"` -} - -func (*Identity_ServiceAccount) isIdentity_IdentityOneof() {} - -func (*Identity_Hostname) isIdentity_IdentityOneof() {} - -type StartClientHandshakeReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Handshake security protocol requested by the client. - HandshakeSecurityProtocol HandshakeProtocol `protobuf:"varint,1,opt,name=handshake_security_protocol,json=handshakeSecurityProtocol,proto3,enum=grpc.gcp.HandshakeProtocol" json:"handshake_security_protocol,omitempty"` - // The application protocols supported by the client, e.g., "h2" (for http2), - // "grpc". - ApplicationProtocols []string `protobuf:"bytes,2,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` - // The record protocols supported by the client, e.g., - // "ALTSRP_GCM_AES128". - RecordProtocols []string `protobuf:"bytes,3,rep,name=record_protocols,json=recordProtocols,proto3" json:"record_protocols,omitempty"` - // (Optional) Describes which server identities are acceptable by the client. - // If target identities are provided and none of them matches the peer - // identity of the server, handshake will fail. - TargetIdentities []*Identity `protobuf:"bytes,4,rep,name=target_identities,json=targetIdentities,proto3" json:"target_identities,omitempty"` - // (Optional) Application may specify a local identity. Otherwise, the - // handshaker chooses a default local identity. - LocalIdentity *Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` - // (Optional) Local endpoint information of the connection to the server, - // such as local IP address, port number, and network protocol. - LocalEndpoint *Endpoint `protobuf:"bytes,6,opt,name=local_endpoint,json=localEndpoint,proto3" json:"local_endpoint,omitempty"` - // (Optional) Endpoint information of the remote server, such as IP address, - // port number, and network protocol. - RemoteEndpoint *Endpoint `protobuf:"bytes,7,opt,name=remote_endpoint,json=remoteEndpoint,proto3" json:"remote_endpoint,omitempty"` - // (Optional) If target name is provided, a secure naming check is performed - // to verify that the peer authenticated identity is indeed authorized to run - // the target name. - TargetName string `protobuf:"bytes,8,opt,name=target_name,json=targetName,proto3" json:"target_name,omitempty"` - // (Optional) RPC protocol versions supported by the client. - RpcVersions *RpcProtocolVersions `protobuf:"bytes,9,opt,name=rpc_versions,json=rpcVersions,proto3" json:"rpc_versions,omitempty"` - // (Optional) Maximum frame size supported by the client. - MaxFrameSize uint32 `protobuf:"varint,10,opt,name=max_frame_size,json=maxFrameSize,proto3" json:"max_frame_size,omitempty"` -} - -func (x *StartClientHandshakeReq) Reset() { - *x = StartClientHandshakeReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartClientHandshakeReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartClientHandshakeReq) ProtoMessage() {} - -func (x *StartClientHandshakeReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartClientHandshakeReq.ProtoReflect.Descriptor instead. -func (*StartClientHandshakeReq) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{2} -} - -func (x *StartClientHandshakeReq) GetHandshakeSecurityProtocol() HandshakeProtocol { - if x != nil { - return x.HandshakeSecurityProtocol - } - return HandshakeProtocol_HANDSHAKE_PROTOCOL_UNSPECIFIED -} - -func (x *StartClientHandshakeReq) GetApplicationProtocols() []string { - if x != nil { - return x.ApplicationProtocols - } - return nil -} - -func (x *StartClientHandshakeReq) GetRecordProtocols() []string { - if x != nil { - return x.RecordProtocols - } - return nil -} - -func (x *StartClientHandshakeReq) GetTargetIdentities() []*Identity { - if x != nil { - return x.TargetIdentities - } - return nil -} - -func (x *StartClientHandshakeReq) GetLocalIdentity() *Identity { - if x != nil { - return x.LocalIdentity - } - return nil -} - -func (x *StartClientHandshakeReq) GetLocalEndpoint() *Endpoint { - if x != nil { - return x.LocalEndpoint - } - return nil -} - -func (x *StartClientHandshakeReq) GetRemoteEndpoint() *Endpoint { - if x != nil { - return x.RemoteEndpoint - } - return nil -} - -func (x *StartClientHandshakeReq) GetTargetName() string { - if x != nil { - return x.TargetName - } - return "" -} - -func (x *StartClientHandshakeReq) GetRpcVersions() *RpcProtocolVersions { - if x != nil { - return x.RpcVersions - } - return nil -} - -func (x *StartClientHandshakeReq) GetMaxFrameSize() uint32 { - if x != nil { - return x.MaxFrameSize - } - return 0 -} - -type ServerHandshakeParameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The record protocols supported by the server, e.g., - // "ALTSRP_GCM_AES128". - RecordProtocols []string `protobuf:"bytes,1,rep,name=record_protocols,json=recordProtocols,proto3" json:"record_protocols,omitempty"` - // (Optional) A list of local identities supported by the server, if - // specified. Otherwise, the handshaker chooses a default local identity. - LocalIdentities []*Identity `protobuf:"bytes,2,rep,name=local_identities,json=localIdentities,proto3" json:"local_identities,omitempty"` -} - -func (x *ServerHandshakeParameters) Reset() { - *x = ServerHandshakeParameters{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerHandshakeParameters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerHandshakeParameters) ProtoMessage() {} - -func (x *ServerHandshakeParameters) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerHandshakeParameters.ProtoReflect.Descriptor instead. -func (*ServerHandshakeParameters) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{3} -} - -func (x *ServerHandshakeParameters) GetRecordProtocols() []string { - if x != nil { - return x.RecordProtocols - } - return nil -} - -func (x *ServerHandshakeParameters) GetLocalIdentities() []*Identity { - if x != nil { - return x.LocalIdentities - } - return nil -} - -type StartServerHandshakeReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The application protocols supported by the server, e.g., "h2" (for http2), - // "grpc". - ApplicationProtocols []string `protobuf:"bytes,1,rep,name=application_protocols,json=applicationProtocols,proto3" json:"application_protocols,omitempty"` - // Handshake parameters (record protocols and local identities supported by - // the server) mapped by the handshake protocol. Each handshake security - // protocol (e.g., TLS or ALTS) has its own set of record protocols and local - // identities. Since protobuf does not support enum as key to the map, the key - // to handshake_parameters is the integer value of HandshakeProtocol enum. - HandshakeParameters map[int32]*ServerHandshakeParameters `protobuf:"bytes,2,rep,name=handshake_parameters,json=handshakeParameters,proto3" json:"handshake_parameters,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Bytes in out_frames returned from the peer's HandshakerResp. It is possible - // that the peer's out_frames are split into multiple HandshakReq messages. - InBytes []byte `protobuf:"bytes,3,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` - // (Optional) Local endpoint information of the connection to the client, - // such as local IP address, port number, and network protocol. - LocalEndpoint *Endpoint `protobuf:"bytes,4,opt,name=local_endpoint,json=localEndpoint,proto3" json:"local_endpoint,omitempty"` - // (Optional) Endpoint information of the remote client, such as IP address, - // port number, and network protocol. - RemoteEndpoint *Endpoint `protobuf:"bytes,5,opt,name=remote_endpoint,json=remoteEndpoint,proto3" json:"remote_endpoint,omitempty"` - // (Optional) RPC protocol versions supported by the server. - RpcVersions *RpcProtocolVersions `protobuf:"bytes,6,opt,name=rpc_versions,json=rpcVersions,proto3" json:"rpc_versions,omitempty"` - // (Optional) Maximum frame size supported by the server. - MaxFrameSize uint32 `protobuf:"varint,7,opt,name=max_frame_size,json=maxFrameSize,proto3" json:"max_frame_size,omitempty"` -} - -func (x *StartServerHandshakeReq) Reset() { - *x = StartServerHandshakeReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StartServerHandshakeReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StartServerHandshakeReq) ProtoMessage() {} - -func (x *StartServerHandshakeReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StartServerHandshakeReq.ProtoReflect.Descriptor instead. -func (*StartServerHandshakeReq) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{4} -} - -func (x *StartServerHandshakeReq) GetApplicationProtocols() []string { - if x != nil { - return x.ApplicationProtocols - } - return nil -} - -func (x *StartServerHandshakeReq) GetHandshakeParameters() map[int32]*ServerHandshakeParameters { - if x != nil { - return x.HandshakeParameters - } - return nil -} - -func (x *StartServerHandshakeReq) GetInBytes() []byte { - if x != nil { - return x.InBytes - } - return nil -} - -func (x *StartServerHandshakeReq) GetLocalEndpoint() *Endpoint { - if x != nil { - return x.LocalEndpoint - } - return nil -} - -func (x *StartServerHandshakeReq) GetRemoteEndpoint() *Endpoint { - if x != nil { - return x.RemoteEndpoint - } - return nil -} - -func (x *StartServerHandshakeReq) GetRpcVersions() *RpcProtocolVersions { - if x != nil { - return x.RpcVersions - } - return nil -} - -func (x *StartServerHandshakeReq) GetMaxFrameSize() uint32 { - if x != nil { - return x.MaxFrameSize - } - return 0 -} - -type NextHandshakeMessageReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Bytes in out_frames returned from the peer's HandshakerResp. It is possible - // that the peer's out_frames are split into multiple NextHandshakerMessageReq - // messages. - InBytes []byte `protobuf:"bytes,1,opt,name=in_bytes,json=inBytes,proto3" json:"in_bytes,omitempty"` -} - -func (x *NextHandshakeMessageReq) Reset() { - *x = NextHandshakeMessageReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NextHandshakeMessageReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NextHandshakeMessageReq) ProtoMessage() {} - -func (x *NextHandshakeMessageReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NextHandshakeMessageReq.ProtoReflect.Descriptor instead. -func (*NextHandshakeMessageReq) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{5} -} - -func (x *NextHandshakeMessageReq) GetInBytes() []byte { - if x != nil { - return x.InBytes - } - return nil -} - -type HandshakerReq struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ReqOneof: - // *HandshakerReq_ClientStart - // *HandshakerReq_ServerStart - // *HandshakerReq_Next - ReqOneof isHandshakerReq_ReqOneof `protobuf_oneof:"req_oneof"` -} - -func (x *HandshakerReq) Reset() { - *x = HandshakerReq{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HandshakerReq) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HandshakerReq) ProtoMessage() {} - -func (x *HandshakerReq) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HandshakerReq.ProtoReflect.Descriptor instead. -func (*HandshakerReq) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{6} -} - -func (m *HandshakerReq) GetReqOneof() isHandshakerReq_ReqOneof { - if m != nil { - return m.ReqOneof - } - return nil -} - -func (x *HandshakerReq) GetClientStart() *StartClientHandshakeReq { - if x, ok := x.GetReqOneof().(*HandshakerReq_ClientStart); ok { - return x.ClientStart - } - return nil -} - -func (x *HandshakerReq) GetServerStart() *StartServerHandshakeReq { - if x, ok := x.GetReqOneof().(*HandshakerReq_ServerStart); ok { - return x.ServerStart - } - return nil -} - -func (x *HandshakerReq) GetNext() *NextHandshakeMessageReq { - if x, ok := x.GetReqOneof().(*HandshakerReq_Next); ok { - return x.Next - } - return nil -} - -type isHandshakerReq_ReqOneof interface { - isHandshakerReq_ReqOneof() -} - -type HandshakerReq_ClientStart struct { - // The start client handshake request message. - ClientStart *StartClientHandshakeReq `protobuf:"bytes,1,opt,name=client_start,json=clientStart,proto3,oneof"` -} - -type HandshakerReq_ServerStart struct { - // The start server handshake request message. - ServerStart *StartServerHandshakeReq `protobuf:"bytes,2,opt,name=server_start,json=serverStart,proto3,oneof"` -} - -type HandshakerReq_Next struct { - // The next handshake request message. - Next *NextHandshakeMessageReq `protobuf:"bytes,3,opt,name=next,proto3,oneof"` -} - -func (*HandshakerReq_ClientStart) isHandshakerReq_ReqOneof() {} - -func (*HandshakerReq_ServerStart) isHandshakerReq_ReqOneof() {} - -func (*HandshakerReq_Next) isHandshakerReq_ReqOneof() {} - -type HandshakerResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The application protocol negotiated for this connection. - ApplicationProtocol string `protobuf:"bytes,1,opt,name=application_protocol,json=applicationProtocol,proto3" json:"application_protocol,omitempty"` - // The record protocol negotiated for this connection. - RecordProtocol string `protobuf:"bytes,2,opt,name=record_protocol,json=recordProtocol,proto3" json:"record_protocol,omitempty"` - // Cryptographic key data. The key data may be more than the key length - // required for the record protocol, thus the client of the handshaker - // service needs to truncate the key data into the right key length. - KeyData []byte `protobuf:"bytes,3,opt,name=key_data,json=keyData,proto3" json:"key_data,omitempty"` - // The authenticated identity of the peer. - PeerIdentity *Identity `protobuf:"bytes,4,opt,name=peer_identity,json=peerIdentity,proto3" json:"peer_identity,omitempty"` - // The local identity used in the handshake. - LocalIdentity *Identity `protobuf:"bytes,5,opt,name=local_identity,json=localIdentity,proto3" json:"local_identity,omitempty"` - // Indicate whether the handshaker service client should keep the channel - // between the handshaker service open, e.g., in order to handle - // post-handshake messages in the future. - KeepChannelOpen bool `protobuf:"varint,6,opt,name=keep_channel_open,json=keepChannelOpen,proto3" json:"keep_channel_open,omitempty"` - // The RPC protocol versions supported by the peer. - PeerRpcVersions *RpcProtocolVersions `protobuf:"bytes,7,opt,name=peer_rpc_versions,json=peerRpcVersions,proto3" json:"peer_rpc_versions,omitempty"` - // The maximum frame size of the peer. - MaxFrameSize uint32 `protobuf:"varint,8,opt,name=max_frame_size,json=maxFrameSize,proto3" json:"max_frame_size,omitempty"` -} - -func (x *HandshakerResult) Reset() { - *x = HandshakerResult{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HandshakerResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HandshakerResult) ProtoMessage() {} - -func (x *HandshakerResult) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HandshakerResult.ProtoReflect.Descriptor instead. -func (*HandshakerResult) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{7} -} - -func (x *HandshakerResult) GetApplicationProtocol() string { - if x != nil { - return x.ApplicationProtocol - } - return "" -} - -func (x *HandshakerResult) GetRecordProtocol() string { - if x != nil { - return x.RecordProtocol - } - return "" -} - -func (x *HandshakerResult) GetKeyData() []byte { - if x != nil { - return x.KeyData - } - return nil -} - -func (x *HandshakerResult) GetPeerIdentity() *Identity { - if x != nil { - return x.PeerIdentity - } - return nil -} - -func (x *HandshakerResult) GetLocalIdentity() *Identity { - if x != nil { - return x.LocalIdentity - } - return nil -} - -func (x *HandshakerResult) GetKeepChannelOpen() bool { - if x != nil { - return x.KeepChannelOpen - } - return false -} - -func (x *HandshakerResult) GetPeerRpcVersions() *RpcProtocolVersions { - if x != nil { - return x.PeerRpcVersions - } - return nil -} - -func (x *HandshakerResult) GetMaxFrameSize() uint32 { - if x != nil { - return x.MaxFrameSize - } - return 0 -} - -type HandshakerStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The status code. This could be the gRPC status code. - Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - // The status details. - Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"` -} - -func (x *HandshakerStatus) Reset() { - *x = HandshakerStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HandshakerStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HandshakerStatus) ProtoMessage() {} - -func (x *HandshakerStatus) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HandshakerStatus.ProtoReflect.Descriptor instead. -func (*HandshakerStatus) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{8} -} - -func (x *HandshakerStatus) GetCode() uint32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *HandshakerStatus) GetDetails() string { - if x != nil { - return x.Details - } - return "" -} - -type HandshakerResp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Frames to be given to the peer for the NextHandshakeMessageReq. May be - // empty if no out_frames have to be sent to the peer or if in_bytes in the - // HandshakerReq are incomplete. All the non-empty out frames must be sent to - // the peer even if the handshaker status is not OK as these frames may - // contain the alert frames. - OutFrames []byte `protobuf:"bytes,1,opt,name=out_frames,json=outFrames,proto3" json:"out_frames,omitempty"` - // Number of bytes in the in_bytes consumed by the handshaker. It is possible - // that part of in_bytes in HandshakerReq was unrelated to the handshake - // process. - BytesConsumed uint32 `protobuf:"varint,2,opt,name=bytes_consumed,json=bytesConsumed,proto3" json:"bytes_consumed,omitempty"` - // This is set iff the handshake was successful. out_frames may still be set - // to frames that needs to be forwarded to the peer. - Result *HandshakerResult `protobuf:"bytes,3,opt,name=result,proto3" json:"result,omitempty"` - // Status of the handshaker. - Status *HandshakerStatus `protobuf:"bytes,4,opt,name=status,proto3" json:"status,omitempty"` -} - -func (x *HandshakerResp) Reset() { - *x = HandshakerResp{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HandshakerResp) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HandshakerResp) ProtoMessage() {} - -func (x *HandshakerResp) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_handshaker_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HandshakerResp.ProtoReflect.Descriptor instead. -func (*HandshakerResp) Descriptor() ([]byte, []int) { - return file_grpc_gcp_handshaker_proto_rawDescGZIP(), []int{9} -} - -func (x *HandshakerResp) GetOutFrames() []byte { - if x != nil { - return x.OutFrames - } - return nil -} - -func (x *HandshakerResp) GetBytesConsumed() uint32 { - if x != nil { - return x.BytesConsumed - } - return 0 -} - -func (x *HandshakerResp) GetResult() *HandshakerResult { - if x != nil { - return x.Result - } - return nil -} - -func (x *HandshakerResp) GetStatus() *HandshakerStatus { - if x != nil { - return x.Status - } - return nil -} - -var File_grpc_gcp_handshaker_proto protoreflect.FileDescriptor - -var file_grpc_gcp_handshaker_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x63, 0x70, 0x2f, 0x68, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x67, 0x63, 0x70, 0x1a, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x63, 0x70, 0x2f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x74, 0x0a, 0x08, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0xe8, 0x01, 0x0a, 0x08, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x29, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, - 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x10, - 0x0a, 0x0e, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x22, 0xd3, 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x1b, - 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, - 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x19, - 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, - 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x33, 0x0a, 0x15, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x29, - 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x11, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x3b, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0e, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x40, - 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x72, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x69, - 0x7a, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, - 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x85, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, - 0x3d, 0x0a, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa5, - 0x04, 0x0a, 0x17, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, - 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x15, 0x61, 0x70, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x61, 0x70, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, - 0x6d, 0x0a, 0x14, 0x68, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x5f, 0x70, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, - 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x68, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0b, 0x72, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, - 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6b, 0x0a, 0x18, 0x48, 0x61, 0x6e, - 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, - 0x70, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, - 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x34, 0x0a, 0x17, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x61, - 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x6e, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x07, 0x69, 0x6e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe5, 0x01, 0x0a, - 0x0d, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x46, - 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x46, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x37, - 0x0a, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x4e, 0x65, 0x78, 0x74, 0x48, 0x61, 0x6e, 0x64, - 0x73, 0x68, 0x61, 0x6b, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x04, 0x6e, 0x65, 0x78, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x6f, - 0x6e, 0x65, 0x6f, 0x66, 0x22, 0x9a, 0x03, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, - 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x14, 0x61, 0x70, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, - 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x37, 0x0a, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, - 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0c, 0x70, 0x65, 0x65, - 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0e, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x6b, 0x65, 0x65, 0x70, 0x5f, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6f, 0x70, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0f, 0x6b, 0x65, 0x65, 0x70, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4f, 0x70, 0x65, 0x6e, - 0x12, 0x49, 0x0a, 0x11, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0f, 0x70, 0x65, 0x65, 0x72, - 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x6d, - 0x61, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x69, 0x7a, - 0x65, 0x22, 0x40, 0x0a, 0x10, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x22, 0xbe, 0x01, 0x0a, 0x0e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x72, - 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6f, 0x75, 0x74, 0x46, - 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x63, - 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x12, 0x32, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x32, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, - 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x2a, 0x4a, 0x0a, 0x11, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x22, 0x0a, 0x1e, 0x48, 0x41, 0x4e, - 0x44, 0x53, 0x48, 0x41, 0x4b, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, - 0x03, 0x54, 0x4c, 0x53, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x4c, 0x54, 0x53, 0x10, 0x02, - 0x2a, 0x45, 0x0a, 0x0f, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x20, 0x0a, 0x1c, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x02, 0x32, 0x5b, 0x0a, 0x11, 0x48, 0x61, 0x6e, 0x64, 0x73, - 0x68, 0x61, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x0b, - 0x44, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x12, 0x17, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x48, 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x22, 0x00, - 0x28, 0x01, 0x30, 0x01, 0x42, 0x6b, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x61, 0x6c, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x42, 0x0f, 0x48, - 0x61, 0x6e, 0x64, 0x73, 0x68, 0x61, 0x6b, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x63, - 0x70, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_gcp_handshaker_proto_rawDescOnce sync.Once - file_grpc_gcp_handshaker_proto_rawDescData = file_grpc_gcp_handshaker_proto_rawDesc -) - -func file_grpc_gcp_handshaker_proto_rawDescGZIP() []byte { - file_grpc_gcp_handshaker_proto_rawDescOnce.Do(func() { - file_grpc_gcp_handshaker_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_gcp_handshaker_proto_rawDescData) - }) - return file_grpc_gcp_handshaker_proto_rawDescData -} - -var file_grpc_gcp_handshaker_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_grpc_gcp_handshaker_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_grpc_gcp_handshaker_proto_goTypes = []interface{}{ - (HandshakeProtocol)(0), // 0: grpc.gcp.HandshakeProtocol - (NetworkProtocol)(0), // 1: grpc.gcp.NetworkProtocol - (*Endpoint)(nil), // 2: grpc.gcp.Endpoint - (*Identity)(nil), // 3: grpc.gcp.Identity - (*StartClientHandshakeReq)(nil), // 4: grpc.gcp.StartClientHandshakeReq - (*ServerHandshakeParameters)(nil), // 5: grpc.gcp.ServerHandshakeParameters - (*StartServerHandshakeReq)(nil), // 6: grpc.gcp.StartServerHandshakeReq - (*NextHandshakeMessageReq)(nil), // 7: grpc.gcp.NextHandshakeMessageReq - (*HandshakerReq)(nil), // 8: grpc.gcp.HandshakerReq - (*HandshakerResult)(nil), // 9: grpc.gcp.HandshakerResult - (*HandshakerStatus)(nil), // 10: grpc.gcp.HandshakerStatus - (*HandshakerResp)(nil), // 11: grpc.gcp.HandshakerResp - nil, // 12: grpc.gcp.Identity.AttributesEntry - nil, // 13: grpc.gcp.StartServerHandshakeReq.HandshakeParametersEntry - (*RpcProtocolVersions)(nil), // 14: grpc.gcp.RpcProtocolVersions -} -var file_grpc_gcp_handshaker_proto_depIdxs = []int32{ - 1, // 0: grpc.gcp.Endpoint.protocol:type_name -> grpc.gcp.NetworkProtocol - 12, // 1: grpc.gcp.Identity.attributes:type_name -> grpc.gcp.Identity.AttributesEntry - 0, // 2: grpc.gcp.StartClientHandshakeReq.handshake_security_protocol:type_name -> grpc.gcp.HandshakeProtocol - 3, // 3: grpc.gcp.StartClientHandshakeReq.target_identities:type_name -> grpc.gcp.Identity - 3, // 4: grpc.gcp.StartClientHandshakeReq.local_identity:type_name -> grpc.gcp.Identity - 2, // 5: grpc.gcp.StartClientHandshakeReq.local_endpoint:type_name -> grpc.gcp.Endpoint - 2, // 6: grpc.gcp.StartClientHandshakeReq.remote_endpoint:type_name -> grpc.gcp.Endpoint - 14, // 7: grpc.gcp.StartClientHandshakeReq.rpc_versions:type_name -> grpc.gcp.RpcProtocolVersions - 3, // 8: grpc.gcp.ServerHandshakeParameters.local_identities:type_name -> grpc.gcp.Identity - 13, // 9: grpc.gcp.StartServerHandshakeReq.handshake_parameters:type_name -> grpc.gcp.StartServerHandshakeReq.HandshakeParametersEntry - 2, // 10: grpc.gcp.StartServerHandshakeReq.local_endpoint:type_name -> grpc.gcp.Endpoint - 2, // 11: grpc.gcp.StartServerHandshakeReq.remote_endpoint:type_name -> grpc.gcp.Endpoint - 14, // 12: grpc.gcp.StartServerHandshakeReq.rpc_versions:type_name -> grpc.gcp.RpcProtocolVersions - 4, // 13: grpc.gcp.HandshakerReq.client_start:type_name -> grpc.gcp.StartClientHandshakeReq - 6, // 14: grpc.gcp.HandshakerReq.server_start:type_name -> grpc.gcp.StartServerHandshakeReq - 7, // 15: grpc.gcp.HandshakerReq.next:type_name -> grpc.gcp.NextHandshakeMessageReq - 3, // 16: grpc.gcp.HandshakerResult.peer_identity:type_name -> grpc.gcp.Identity - 3, // 17: grpc.gcp.HandshakerResult.local_identity:type_name -> grpc.gcp.Identity - 14, // 18: grpc.gcp.HandshakerResult.peer_rpc_versions:type_name -> grpc.gcp.RpcProtocolVersions - 9, // 19: grpc.gcp.HandshakerResp.result:type_name -> grpc.gcp.HandshakerResult - 10, // 20: grpc.gcp.HandshakerResp.status:type_name -> grpc.gcp.HandshakerStatus - 5, // 21: grpc.gcp.StartServerHandshakeReq.HandshakeParametersEntry.value:type_name -> grpc.gcp.ServerHandshakeParameters - 8, // 22: grpc.gcp.HandshakerService.DoHandshake:input_type -> grpc.gcp.HandshakerReq - 11, // 23: grpc.gcp.HandshakerService.DoHandshake:output_type -> grpc.gcp.HandshakerResp - 23, // [23:24] is the sub-list for method output_type - 22, // [22:23] is the sub-list for method input_type - 22, // [22:22] is the sub-list for extension type_name - 22, // [22:22] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name -} - -func init() { file_grpc_gcp_handshaker_proto_init() } -func file_grpc_gcp_handshaker_proto_init() { - if File_grpc_gcp_handshaker_proto != nil { - return - } - file_grpc_gcp_transport_security_common_proto_init() - if !protoimpl.UnsafeEnabled { - file_grpc_gcp_handshaker_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Endpoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Identity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartClientHandshakeReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerHandshakeParameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StartServerHandshakeReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NextHandshakeMessageReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HandshakerReq); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HandshakerResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HandshakerStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_handshaker_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HandshakerResp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_gcp_handshaker_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*Identity_ServiceAccount)(nil), - (*Identity_Hostname)(nil), - } - file_grpc_gcp_handshaker_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*HandshakerReq_ClientStart)(nil), - (*HandshakerReq_ServerStart)(nil), - (*HandshakerReq_Next)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_gcp_handshaker_proto_rawDesc, - NumEnums: 2, - NumMessages: 12, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_gcp_handshaker_proto_goTypes, - DependencyIndexes: file_grpc_gcp_handshaker_proto_depIdxs, - EnumInfos: file_grpc_gcp_handshaker_proto_enumTypes, - MessageInfos: file_grpc_gcp_handshaker_proto_msgTypes, - }.Build() - File_grpc_gcp_handshaker_proto = out.File - file_grpc_gcp_handshaker_proto_rawDesc = nil - file_grpc_gcp_handshaker_proto_goTypes = nil - file_grpc_gcp_handshaker_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/gcp/transport_security_common.pb.go b/gen/proto/grpc/gcp/transport_security_common.pb.go deleted file mode 100644 index 859f3fe..0000000 --- a/gen/proto/grpc/gcp/transport_security_common.pb.go +++ /dev/null @@ -1,321 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/transport_security_common.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/gcp/transport_security_common.proto - -package grpc_gcp - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The security level of the created channel. The list is sorted in increasing -// level of security. This order must always be maintained. -type SecurityLevel int32 - -const ( - SecurityLevel_SECURITY_NONE SecurityLevel = 0 - SecurityLevel_INTEGRITY_ONLY SecurityLevel = 1 - SecurityLevel_INTEGRITY_AND_PRIVACY SecurityLevel = 2 -) - -// Enum value maps for SecurityLevel. -var ( - SecurityLevel_name = map[int32]string{ - 0: "SECURITY_NONE", - 1: "INTEGRITY_ONLY", - 2: "INTEGRITY_AND_PRIVACY", - } - SecurityLevel_value = map[string]int32{ - "SECURITY_NONE": 0, - "INTEGRITY_ONLY": 1, - "INTEGRITY_AND_PRIVACY": 2, - } -) - -func (x SecurityLevel) Enum() *SecurityLevel { - p := new(SecurityLevel) - *p = x - return p -} - -func (x SecurityLevel) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SecurityLevel) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_gcp_transport_security_common_proto_enumTypes[0].Descriptor() -} - -func (SecurityLevel) Type() protoreflect.EnumType { - return &file_grpc_gcp_transport_security_common_proto_enumTypes[0] -} - -func (x SecurityLevel) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SecurityLevel.Descriptor instead. -func (SecurityLevel) EnumDescriptor() ([]byte, []int) { - return file_grpc_gcp_transport_security_common_proto_rawDescGZIP(), []int{0} -} - -// Max and min supported RPC protocol versions. -type RpcProtocolVersions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Maximum supported RPC version. - MaxRpcVersion *RpcProtocolVersions_Version `protobuf:"bytes,1,opt,name=max_rpc_version,json=maxRpcVersion,proto3" json:"max_rpc_version,omitempty"` - // Minimum supported RPC version. - MinRpcVersion *RpcProtocolVersions_Version `protobuf:"bytes,2,opt,name=min_rpc_version,json=minRpcVersion,proto3" json:"min_rpc_version,omitempty"` -} - -func (x *RpcProtocolVersions) Reset() { - *x = RpcProtocolVersions{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_transport_security_common_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RpcProtocolVersions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RpcProtocolVersions) ProtoMessage() {} - -func (x *RpcProtocolVersions) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_transport_security_common_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RpcProtocolVersions.ProtoReflect.Descriptor instead. -func (*RpcProtocolVersions) Descriptor() ([]byte, []int) { - return file_grpc_gcp_transport_security_common_proto_rawDescGZIP(), []int{0} -} - -func (x *RpcProtocolVersions) GetMaxRpcVersion() *RpcProtocolVersions_Version { - if x != nil { - return x.MaxRpcVersion - } - return nil -} - -func (x *RpcProtocolVersions) GetMinRpcVersion() *RpcProtocolVersions_Version { - if x != nil { - return x.MinRpcVersion - } - return nil -} - -// RPC version contains a major version and a minor version. -type RpcProtocolVersions_Version struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Major uint32 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"` - Minor uint32 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"` -} - -func (x *RpcProtocolVersions_Version) Reset() { - *x = RpcProtocolVersions_Version{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_gcp_transport_security_common_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RpcProtocolVersions_Version) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RpcProtocolVersions_Version) ProtoMessage() {} - -func (x *RpcProtocolVersions_Version) ProtoReflect() protoreflect.Message { - mi := &file_grpc_gcp_transport_security_common_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RpcProtocolVersions_Version.ProtoReflect.Descriptor instead. -func (*RpcProtocolVersions_Version) Descriptor() ([]byte, []int) { - return file_grpc_gcp_transport_security_common_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *RpcProtocolVersions_Version) GetMajor() uint32 { - if x != nil { - return x.Major - } - return 0 -} - -func (x *RpcProtocolVersions_Version) GetMinor() uint32 { - if x != nil { - return x.Minor - } - return 0 -} - -var File_grpc_gcp_transport_security_common_proto protoreflect.FileDescriptor - -var file_grpc_gcp_transport_security_common_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x67, 0x63, 0x70, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x67, 0x63, 0x70, 0x22, 0xea, 0x01, 0x0a, 0x13, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x0f, - 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, - 0x2e, 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x61, - 0x78, 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0f, 0x6d, - 0x69, 0x6e, 0x5f, 0x72, 0x70, 0x63, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x67, 0x63, 0x70, 0x2e, - 0x52, 0x70, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6d, 0x69, 0x6e, - 0x52, 0x70, 0x63, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x35, 0x0a, 0x07, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, - 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, - 0x72, 0x2a, 0x51, 0x0a, 0x0d, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x49, - 0x54, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, - 0x43, 0x59, 0x10, 0x02, 0x42, 0x78, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x61, 0x6c, 0x74, 0x73, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x42, 0x1c, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x73, 0x2f, 0x61, 0x6c, 0x74, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x67, 0x63, 0x70, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_gcp_transport_security_common_proto_rawDescOnce sync.Once - file_grpc_gcp_transport_security_common_proto_rawDescData = file_grpc_gcp_transport_security_common_proto_rawDesc -) - -func file_grpc_gcp_transport_security_common_proto_rawDescGZIP() []byte { - file_grpc_gcp_transport_security_common_proto_rawDescOnce.Do(func() { - file_grpc_gcp_transport_security_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_gcp_transport_security_common_proto_rawDescData) - }) - return file_grpc_gcp_transport_security_common_proto_rawDescData -} - -var file_grpc_gcp_transport_security_common_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_grpc_gcp_transport_security_common_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_grpc_gcp_transport_security_common_proto_goTypes = []interface{}{ - (SecurityLevel)(0), // 0: grpc.gcp.SecurityLevel - (*RpcProtocolVersions)(nil), // 1: grpc.gcp.RpcProtocolVersions - (*RpcProtocolVersions_Version)(nil), // 2: grpc.gcp.RpcProtocolVersions.Version -} -var file_grpc_gcp_transport_security_common_proto_depIdxs = []int32{ - 2, // 0: grpc.gcp.RpcProtocolVersions.max_rpc_version:type_name -> grpc.gcp.RpcProtocolVersions.Version - 2, // 1: grpc.gcp.RpcProtocolVersions.min_rpc_version:type_name -> grpc.gcp.RpcProtocolVersions.Version - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_grpc_gcp_transport_security_common_proto_init() } -func file_grpc_gcp_transport_security_common_proto_init() { - if File_grpc_gcp_transport_security_common_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_gcp_transport_security_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcProtocolVersions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_gcp_transport_security_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RpcProtocolVersions_Version); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_gcp_transport_security_common_proto_rawDesc, - NumEnums: 1, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_gcp_transport_security_common_proto_goTypes, - DependencyIndexes: file_grpc_gcp_transport_security_common_proto_depIdxs, - EnumInfos: file_grpc_gcp_transport_security_common_proto_enumTypes, - MessageInfos: file_grpc_gcp_transport_security_common_proto_msgTypes, - }.Build() - File_grpc_gcp_transport_security_common_proto = out.File - file_grpc_gcp_transport_security_common_proto_rawDesc = nil - file_grpc_gcp_transport_security_common_proto_goTypes = nil - file_grpc_gcp_transport_security_common_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/health/v1/health.pb.go b/gen/proto/grpc/health/v1/health.pb.go deleted file mode 100644 index 7c7af97..0000000 --- a/gen/proto/grpc/health/v1/health.pb.go +++ /dev/null @@ -1,308 +0,0 @@ -// Copyright 2015 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/health/v1/health.proto - -package grpc_health_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type HealthCheckResponse_ServingStatus int32 - -const ( - HealthCheckResponse_UNKNOWN HealthCheckResponse_ServingStatus = 0 - HealthCheckResponse_SERVING HealthCheckResponse_ServingStatus = 1 - HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2 - HealthCheckResponse_SERVICE_UNKNOWN HealthCheckResponse_ServingStatus = 3 // Used only by the Watch method. -) - -// Enum value maps for HealthCheckResponse_ServingStatus. -var ( - HealthCheckResponse_ServingStatus_name = map[int32]string{ - 0: "UNKNOWN", - 1: "SERVING", - 2: "NOT_SERVING", - 3: "SERVICE_UNKNOWN", - } - HealthCheckResponse_ServingStatus_value = map[string]int32{ - "UNKNOWN": 0, - "SERVING": 1, - "NOT_SERVING": 2, - "SERVICE_UNKNOWN": 3, - } -) - -func (x HealthCheckResponse_ServingStatus) Enum() *HealthCheckResponse_ServingStatus { - p := new(HealthCheckResponse_ServingStatus) - *p = x - return p -} - -func (x HealthCheckResponse_ServingStatus) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (HealthCheckResponse_ServingStatus) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_health_v1_health_proto_enumTypes[0].Descriptor() -} - -func (HealthCheckResponse_ServingStatus) Type() protoreflect.EnumType { - return &file_grpc_health_v1_health_proto_enumTypes[0] -} - -func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead. -func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { - return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{1, 0} -} - -type HealthCheckRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` -} - -func (x *HealthCheckRequest) Reset() { - *x = HealthCheckRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_health_v1_health_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HealthCheckRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HealthCheckRequest) ProtoMessage() {} - -func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_health_v1_health_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead. -func (*HealthCheckRequest) Descriptor() ([]byte, []int) { - return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{0} -} - -func (x *HealthCheckRequest) GetService() string { - if x != nil { - return x.Service - } - return "" -} - -type HealthCheckResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` -} - -func (x *HealthCheckResponse) Reset() { - *x = HealthCheckResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_health_v1_health_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HealthCheckResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HealthCheckResponse) ProtoMessage() {} - -func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_health_v1_health_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead. -func (*HealthCheckResponse) Descriptor() ([]byte, []int) { - return file_grpc_health_v1_health_proto_rawDescGZIP(), []int{1} -} - -func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus { - if x != nil { - return x.Status - } - return HealthCheckResponse_UNKNOWN -} - -var File_grpc_health_v1_health_proto protoreflect.FileDescriptor - -var file_grpc_health_v1_health_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31, - 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a, - 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0xb1, 0x01, - 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x4f, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, - 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x03, 0x32, 0xae, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x05, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x05, 0x57, 0x61, 0x74, 0x63, 0x68, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x42, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x5f, 0x76, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_health_v1_health_proto_rawDescOnce sync.Once - file_grpc_health_v1_health_proto_rawDescData = file_grpc_health_v1_health_proto_rawDesc -) - -func file_grpc_health_v1_health_proto_rawDescGZIP() []byte { - file_grpc_health_v1_health_proto_rawDescOnce.Do(func() { - file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_health_v1_health_proto_rawDescData) - }) - return file_grpc_health_v1_health_proto_rawDescData -} - -var file_grpc_health_v1_health_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_grpc_health_v1_health_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_grpc_health_v1_health_proto_goTypes = []interface{}{ - (HealthCheckResponse_ServingStatus)(0), // 0: grpc.health.v1.HealthCheckResponse.ServingStatus - (*HealthCheckRequest)(nil), // 1: grpc.health.v1.HealthCheckRequest - (*HealthCheckResponse)(nil), // 2: grpc.health.v1.HealthCheckResponse -} -var file_grpc_health_v1_health_proto_depIdxs = []int32{ - 0, // 0: grpc.health.v1.HealthCheckResponse.status:type_name -> grpc.health.v1.HealthCheckResponse.ServingStatus - 1, // 1: grpc.health.v1.Health.Check:input_type -> grpc.health.v1.HealthCheckRequest - 1, // 2: grpc.health.v1.Health.Watch:input_type -> grpc.health.v1.HealthCheckRequest - 2, // 3: grpc.health.v1.Health.Check:output_type -> grpc.health.v1.HealthCheckResponse - 2, // 4: grpc.health.v1.Health.Watch:output_type -> grpc.health.v1.HealthCheckResponse - 3, // [3:5] is the sub-list for method output_type - 1, // [1:3] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_grpc_health_v1_health_proto_init() } -func file_grpc_health_v1_health_proto_init() { - if File_grpc_health_v1_health_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_health_v1_health_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HealthCheckRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_health_v1_health_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HealthCheckResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_health_v1_health_proto_rawDesc, - NumEnums: 1, - NumMessages: 2, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_health_v1_health_proto_goTypes, - DependencyIndexes: file_grpc_health_v1_health_proto_depIdxs, - EnumInfos: file_grpc_health_v1_health_proto_enumTypes, - MessageInfos: file_grpc_health_v1_health_proto_msgTypes, - }.Build() - File_grpc_health_v1_health_proto = out.File - file_grpc_health_v1_health_proto_rawDesc = nil - file_grpc_health_v1_health_proto_goTypes = nil - file_grpc_health_v1_health_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/lb/v1/load_balancer.pb.go b/gen/proto/grpc/lb/v1/load_balancer.pb.go deleted file mode 100644 index df8274c..0000000 --- a/gen/proto/grpc/lb/v1/load_balancer.pb.go +++ /dev/null @@ -1,955 +0,0 @@ -// Copyright 2015 The gRPC Authors -// -// 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. - -// This file defines the GRPCLB LoadBalancing protocol. -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/lb/v1/load_balancer.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/lb/v1/load_balancer.proto - -package grpc_lb_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type LoadBalanceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to LoadBalanceRequestType: - // *LoadBalanceRequest_InitialRequest - // *LoadBalanceRequest_ClientStats - LoadBalanceRequestType isLoadBalanceRequest_LoadBalanceRequestType `protobuf_oneof:"load_balance_request_type"` -} - -func (x *LoadBalanceRequest) Reset() { - *x = LoadBalanceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalanceRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalanceRequest) ProtoMessage() {} - -func (x *LoadBalanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalanceRequest.ProtoReflect.Descriptor instead. -func (*LoadBalanceRequest) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{0} -} - -func (m *LoadBalanceRequest) GetLoadBalanceRequestType() isLoadBalanceRequest_LoadBalanceRequestType { - if m != nil { - return m.LoadBalanceRequestType - } - return nil -} - -func (x *LoadBalanceRequest) GetInitialRequest() *InitialLoadBalanceRequest { - if x, ok := x.GetLoadBalanceRequestType().(*LoadBalanceRequest_InitialRequest); ok { - return x.InitialRequest - } - return nil -} - -func (x *LoadBalanceRequest) GetClientStats() *ClientStats { - if x, ok := x.GetLoadBalanceRequestType().(*LoadBalanceRequest_ClientStats); ok { - return x.ClientStats - } - return nil -} - -type isLoadBalanceRequest_LoadBalanceRequestType interface { - isLoadBalanceRequest_LoadBalanceRequestType() -} - -type LoadBalanceRequest_InitialRequest struct { - // This message should be sent on the first request to the load balancer. - InitialRequest *InitialLoadBalanceRequest `protobuf:"bytes,1,opt,name=initial_request,json=initialRequest,proto3,oneof"` -} - -type LoadBalanceRequest_ClientStats struct { - // The client stats should be periodically reported to the load balancer - // based on the duration defined in the InitialLoadBalanceResponse. - ClientStats *ClientStats `protobuf:"bytes,2,opt,name=client_stats,json=clientStats,proto3,oneof"` -} - -func (*LoadBalanceRequest_InitialRequest) isLoadBalanceRequest_LoadBalanceRequestType() {} - -func (*LoadBalanceRequest_ClientStats) isLoadBalanceRequest_LoadBalanceRequestType() {} - -type InitialLoadBalanceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the load balanced service (e.g., service.googleapis.com). Its - // length should be less than 256 bytes. - // The name might include a port number. How to handle the port number is up - // to the balancer. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *InitialLoadBalanceRequest) Reset() { - *x = InitialLoadBalanceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitialLoadBalanceRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitialLoadBalanceRequest) ProtoMessage() {} - -func (x *InitialLoadBalanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitialLoadBalanceRequest.ProtoReflect.Descriptor instead. -func (*InitialLoadBalanceRequest) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{1} -} - -func (x *InitialLoadBalanceRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Contains the number of calls finished for a particular load balance token. -type ClientStatsPerToken struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // See Server.load_balance_token. - LoadBalanceToken string `protobuf:"bytes,1,opt,name=load_balance_token,json=loadBalanceToken,proto3" json:"load_balance_token,omitempty"` - // The total number of RPCs that finished associated with the token. - NumCalls int64 `protobuf:"varint,2,opt,name=num_calls,json=numCalls,proto3" json:"num_calls,omitempty"` -} - -func (x *ClientStatsPerToken) Reset() { - *x = ClientStatsPerToken{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientStatsPerToken) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientStatsPerToken) ProtoMessage() {} - -func (x *ClientStatsPerToken) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientStatsPerToken.ProtoReflect.Descriptor instead. -func (*ClientStatsPerToken) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{2} -} - -func (x *ClientStatsPerToken) GetLoadBalanceToken() string { - if x != nil { - return x.LoadBalanceToken - } - return "" -} - -func (x *ClientStatsPerToken) GetNumCalls() int64 { - if x != nil { - return x.NumCalls - } - return 0 -} - -// Contains client level statistics that are useful to load balancing. Each -// count except the timestamp should be reset to zero after reporting the stats. -type ClientStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The timestamp of generating the report. - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // The total number of RPCs that started. - NumCallsStarted int64 `protobuf:"varint,2,opt,name=num_calls_started,json=numCallsStarted,proto3" json:"num_calls_started,omitempty"` - // The total number of RPCs that finished. - NumCallsFinished int64 `protobuf:"varint,3,opt,name=num_calls_finished,json=numCallsFinished,proto3" json:"num_calls_finished,omitempty"` - // The total number of RPCs that failed to reach a server except dropped RPCs. - NumCallsFinishedWithClientFailedToSend int64 `protobuf:"varint,6,opt,name=num_calls_finished_with_client_failed_to_send,json=numCallsFinishedWithClientFailedToSend,proto3" json:"num_calls_finished_with_client_failed_to_send,omitempty"` - // The total number of RPCs that finished and are known to have been received - // by a server. - NumCallsFinishedKnownReceived int64 `protobuf:"varint,7,opt,name=num_calls_finished_known_received,json=numCallsFinishedKnownReceived,proto3" json:"num_calls_finished_known_received,omitempty"` - // The list of dropped calls. - CallsFinishedWithDrop []*ClientStatsPerToken `protobuf:"bytes,8,rep,name=calls_finished_with_drop,json=callsFinishedWithDrop,proto3" json:"calls_finished_with_drop,omitempty"` -} - -func (x *ClientStats) Reset() { - *x = ClientStats{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientStats) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientStats) ProtoMessage() {} - -func (x *ClientStats) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientStats.ProtoReflect.Descriptor instead. -func (*ClientStats) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{3} -} - -func (x *ClientStats) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *ClientStats) GetNumCallsStarted() int64 { - if x != nil { - return x.NumCallsStarted - } - return 0 -} - -func (x *ClientStats) GetNumCallsFinished() int64 { - if x != nil { - return x.NumCallsFinished - } - return 0 -} - -func (x *ClientStats) GetNumCallsFinishedWithClientFailedToSend() int64 { - if x != nil { - return x.NumCallsFinishedWithClientFailedToSend - } - return 0 -} - -func (x *ClientStats) GetNumCallsFinishedKnownReceived() int64 { - if x != nil { - return x.NumCallsFinishedKnownReceived - } - return 0 -} - -func (x *ClientStats) GetCallsFinishedWithDrop() []*ClientStatsPerToken { - if x != nil { - return x.CallsFinishedWithDrop - } - return nil -} - -type LoadBalanceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to LoadBalanceResponseType: - // *LoadBalanceResponse_InitialResponse - // *LoadBalanceResponse_ServerList - // *LoadBalanceResponse_FallbackResponse - LoadBalanceResponseType isLoadBalanceResponse_LoadBalanceResponseType `protobuf_oneof:"load_balance_response_type"` -} - -func (x *LoadBalanceResponse) Reset() { - *x = LoadBalanceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalanceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalanceResponse) ProtoMessage() {} - -func (x *LoadBalanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalanceResponse.ProtoReflect.Descriptor instead. -func (*LoadBalanceResponse) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{4} -} - -func (m *LoadBalanceResponse) GetLoadBalanceResponseType() isLoadBalanceResponse_LoadBalanceResponseType { - if m != nil { - return m.LoadBalanceResponseType - } - return nil -} - -func (x *LoadBalanceResponse) GetInitialResponse() *InitialLoadBalanceResponse { - if x, ok := x.GetLoadBalanceResponseType().(*LoadBalanceResponse_InitialResponse); ok { - return x.InitialResponse - } - return nil -} - -func (x *LoadBalanceResponse) GetServerList() *ServerList { - if x, ok := x.GetLoadBalanceResponseType().(*LoadBalanceResponse_ServerList); ok { - return x.ServerList - } - return nil -} - -func (x *LoadBalanceResponse) GetFallbackResponse() *FallbackResponse { - if x, ok := x.GetLoadBalanceResponseType().(*LoadBalanceResponse_FallbackResponse); ok { - return x.FallbackResponse - } - return nil -} - -type isLoadBalanceResponse_LoadBalanceResponseType interface { - isLoadBalanceResponse_LoadBalanceResponseType() -} - -type LoadBalanceResponse_InitialResponse struct { - // This message should be sent on the first response to the client. - InitialResponse *InitialLoadBalanceResponse `protobuf:"bytes,1,opt,name=initial_response,json=initialResponse,proto3,oneof"` -} - -type LoadBalanceResponse_ServerList struct { - // Contains the list of servers selected by the load balancer. The client - // should send requests to these servers in the specified order. - ServerList *ServerList `protobuf:"bytes,2,opt,name=server_list,json=serverList,proto3,oneof"` -} - -type LoadBalanceResponse_FallbackResponse struct { - // If this field is set, then the client should eagerly enter fallback - // mode (even if there are existing, healthy connections to backends). - FallbackResponse *FallbackResponse `protobuf:"bytes,3,opt,name=fallback_response,json=fallbackResponse,proto3,oneof"` -} - -func (*LoadBalanceResponse_InitialResponse) isLoadBalanceResponse_LoadBalanceResponseType() {} - -func (*LoadBalanceResponse_ServerList) isLoadBalanceResponse_LoadBalanceResponseType() {} - -func (*LoadBalanceResponse_FallbackResponse) isLoadBalanceResponse_LoadBalanceResponseType() {} - -type FallbackResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *FallbackResponse) Reset() { - *x = FallbackResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FallbackResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FallbackResponse) ProtoMessage() {} - -func (x *FallbackResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FallbackResponse.ProtoReflect.Descriptor instead. -func (*FallbackResponse) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{5} -} - -type InitialLoadBalanceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This interval defines how often the client should send the client stats - // to the load balancer. Stats should only be reported when the duration is - // positive. - ClientStatsReportInterval *durationpb.Duration `protobuf:"bytes,2,opt,name=client_stats_report_interval,json=clientStatsReportInterval,proto3" json:"client_stats_report_interval,omitempty"` -} - -func (x *InitialLoadBalanceResponse) Reset() { - *x = InitialLoadBalanceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitialLoadBalanceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitialLoadBalanceResponse) ProtoMessage() {} - -func (x *InitialLoadBalanceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitialLoadBalanceResponse.ProtoReflect.Descriptor instead. -func (*InitialLoadBalanceResponse) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{6} -} - -func (x *InitialLoadBalanceResponse) GetClientStatsReportInterval() *durationpb.Duration { - if x != nil { - return x.ClientStatsReportInterval - } - return nil -} - -type ServerList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Contains a list of servers selected by the load balancer. The list will - // be updated when server resolutions change or as needed to balance load - // across more servers. The client should consume the server list in order - // unless instructed otherwise via the client_config. - Servers []*Server `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"` -} - -func (x *ServerList) Reset() { - *x = ServerList{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerList) ProtoMessage() {} - -func (x *ServerList) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerList.ProtoReflect.Descriptor instead. -func (*ServerList) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{7} -} - -func (x *ServerList) GetServers() []*Server { - if x != nil { - return x.Servers - } - return nil -} - -// Contains server information. When the drop field is not true, use the other -// fields. -type Server struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A resolved address for the server, serialized in network-byte-order. It may - // either be an IPv4 or IPv6 address. - IpAddress []byte `protobuf:"bytes,1,opt,name=ip_address,json=ipAddress,proto3" json:"ip_address,omitempty"` - // A resolved port number for the server. - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - // An opaque but printable token for load reporting. The client must include - // the token of the picked server into the initial metadata when it starts a - // call to that server. The token is used by the server to verify the request - // and to allow the server to report load to the gRPC LB system. The token is - // also used in client stats for reporting dropped calls. - // - // Its length can be variable but must be less than 50 bytes. - LoadBalanceToken string `protobuf:"bytes,3,opt,name=load_balance_token,json=loadBalanceToken,proto3" json:"load_balance_token,omitempty"` - // Indicates whether this particular request should be dropped by the client. - // If the request is dropped, there will be a corresponding entry in - // ClientStats.calls_finished_with_drop. - Drop bool `protobuf:"varint,4,opt,name=drop,proto3" json:"drop,omitempty"` -} - -func (x *Server) Reset() { - *x = Server{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Server) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Server) ProtoMessage() {} - -func (x *Server) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_balancer_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Server.ProtoReflect.Descriptor instead. -func (*Server) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_balancer_proto_rawDescGZIP(), []int{8} -} - -func (x *Server) GetIpAddress() []byte { - if x != nil { - return x.IpAddress - } - return nil -} - -func (x *Server) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *Server) GetLoadBalanceToken() string { - if x != nil { - return x.LoadBalanceToken - } - return "" -} - -func (x *Server) GetDrop() bool { - if x != nil { - return x.Drop - } - return false -} - -var File_grpc_lb_v1_load_balancer_proto protoreflect.FileDescriptor - -var file_grpc_lb_v1_load_balancer_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0a, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc1, 0x01, - 0x0a, 0x12, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0c, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x42, 0x1b, 0x0a, 0x19, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x2f, 0x0a, 0x19, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x60, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x50, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x6e, 0x75, 0x6d, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x22, 0xb0, 0x03, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2a, - 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x75, - 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x12, 0x5d, 0x0a, 0x2d, 0x6e, 0x75, 0x6d, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x65, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x26, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, - 0x64, 0x57, 0x69, 0x74, 0x68, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x65, - 0x64, 0x54, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x21, 0x6e, 0x75, 0x6d, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x1d, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x12, 0x58, 0x0a, 0x18, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x18, 0x08, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x15, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, - 0x68, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x04, 0x08, 0x04, 0x10, - 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x90, 0x02, 0x0a, 0x13, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x53, 0x0a, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6c, - 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x4b, 0x0a, 0x11, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x10, 0x66, 0x61, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x1c, 0x0a, 0x1a, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x46, 0x61, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, - 0x0a, 0x1a, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x1c, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x40, - 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x07, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x22, 0x83, 0x01, 0x0a, 0x06, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x69, - 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x09, 0x69, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x2c, - 0x0a, 0x12, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x72, 0x6f, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x72, 0x6f, 0x70, - 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x32, 0x62, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x0b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x57, 0x0a, 0x0d, 0x69, 0x6f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x42, 0x11, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, - 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x62, - 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_lb_v1_load_balancer_proto_rawDescOnce sync.Once - file_grpc_lb_v1_load_balancer_proto_rawDescData = file_grpc_lb_v1_load_balancer_proto_rawDesc -) - -func file_grpc_lb_v1_load_balancer_proto_rawDescGZIP() []byte { - file_grpc_lb_v1_load_balancer_proto_rawDescOnce.Do(func() { - file_grpc_lb_v1_load_balancer_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_lb_v1_load_balancer_proto_rawDescData) - }) - return file_grpc_lb_v1_load_balancer_proto_rawDescData -} - -var file_grpc_lb_v1_load_balancer_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_grpc_lb_v1_load_balancer_proto_goTypes = []interface{}{ - (*LoadBalanceRequest)(nil), // 0: grpc.lb.v1.LoadBalanceRequest - (*InitialLoadBalanceRequest)(nil), // 1: grpc.lb.v1.InitialLoadBalanceRequest - (*ClientStatsPerToken)(nil), // 2: grpc.lb.v1.ClientStatsPerToken - (*ClientStats)(nil), // 3: grpc.lb.v1.ClientStats - (*LoadBalanceResponse)(nil), // 4: grpc.lb.v1.LoadBalanceResponse - (*FallbackResponse)(nil), // 5: grpc.lb.v1.FallbackResponse - (*InitialLoadBalanceResponse)(nil), // 6: grpc.lb.v1.InitialLoadBalanceResponse - (*ServerList)(nil), // 7: grpc.lb.v1.ServerList - (*Server)(nil), // 8: grpc.lb.v1.Server - (*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 10: google.protobuf.Duration -} -var file_grpc_lb_v1_load_balancer_proto_depIdxs = []int32{ - 1, // 0: grpc.lb.v1.LoadBalanceRequest.initial_request:type_name -> grpc.lb.v1.InitialLoadBalanceRequest - 3, // 1: grpc.lb.v1.LoadBalanceRequest.client_stats:type_name -> grpc.lb.v1.ClientStats - 9, // 2: grpc.lb.v1.ClientStats.timestamp:type_name -> google.protobuf.Timestamp - 2, // 3: grpc.lb.v1.ClientStats.calls_finished_with_drop:type_name -> grpc.lb.v1.ClientStatsPerToken - 6, // 4: grpc.lb.v1.LoadBalanceResponse.initial_response:type_name -> grpc.lb.v1.InitialLoadBalanceResponse - 7, // 5: grpc.lb.v1.LoadBalanceResponse.server_list:type_name -> grpc.lb.v1.ServerList - 5, // 6: grpc.lb.v1.LoadBalanceResponse.fallback_response:type_name -> grpc.lb.v1.FallbackResponse - 10, // 7: grpc.lb.v1.InitialLoadBalanceResponse.client_stats_report_interval:type_name -> google.protobuf.Duration - 8, // 8: grpc.lb.v1.ServerList.servers:type_name -> grpc.lb.v1.Server - 0, // 9: grpc.lb.v1.LoadBalancer.BalanceLoad:input_type -> grpc.lb.v1.LoadBalanceRequest - 4, // 10: grpc.lb.v1.LoadBalancer.BalanceLoad:output_type -> grpc.lb.v1.LoadBalanceResponse - 10, // [10:11] is the sub-list for method output_type - 9, // [9:10] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_grpc_lb_v1_load_balancer_proto_init() } -func file_grpc_lb_v1_load_balancer_proto_init() { - if File_grpc_lb_v1_load_balancer_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_lb_v1_load_balancer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalanceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialLoadBalanceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStatsPerToken); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalanceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FallbackResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialLoadBalanceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Server); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*LoadBalanceRequest_InitialRequest)(nil), - (*LoadBalanceRequest_ClientStats)(nil), - } - file_grpc_lb_v1_load_balancer_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*LoadBalanceResponse_InitialResponse)(nil), - (*LoadBalanceResponse_ServerList)(nil), - (*LoadBalanceResponse_FallbackResponse)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_lb_v1_load_balancer_proto_rawDesc, - NumEnums: 0, - NumMessages: 9, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_lb_v1_load_balancer_proto_goTypes, - DependencyIndexes: file_grpc_lb_v1_load_balancer_proto_depIdxs, - MessageInfos: file_grpc_lb_v1_load_balancer_proto_msgTypes, - }.Build() - File_grpc_lb_v1_load_balancer_proto = out.File - file_grpc_lb_v1_load_balancer_proto_rawDesc = nil - file_grpc_lb_v1_load_balancer_proto_goTypes = nil - file_grpc_lb_v1_load_balancer_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/lb/v1/load_reporter.pb.go b/gen/proto/grpc/lb/v1/load_reporter.pb.go deleted file mode 100644 index 6ca0e01..0000000 --- a/gen/proto/grpc/lb/v1/load_reporter.pb.go +++ /dev/null @@ -1,1112 +0,0 @@ -// Copyright 2018 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/lb/v1/load_reporter.proto - -package lb - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type InitialLoadReportResponse_ImplementationIdentifier int32 - -const ( - InitialLoadReportResponse_IMPL_UNSPECIFIED InitialLoadReportResponse_ImplementationIdentifier = 0 - InitialLoadReportResponse_CPP InitialLoadReportResponse_ImplementationIdentifier = 1 // Standard Google C++ implementation. - InitialLoadReportResponse_JAVA InitialLoadReportResponse_ImplementationIdentifier = 2 // Standard Google Java implementation. - InitialLoadReportResponse_GO InitialLoadReportResponse_ImplementationIdentifier = 3 // Standard Google Go implementation. -) - -// Enum value maps for InitialLoadReportResponse_ImplementationIdentifier. -var ( - InitialLoadReportResponse_ImplementationIdentifier_name = map[int32]string{ - 0: "IMPL_UNSPECIFIED", - 1: "CPP", - 2: "JAVA", - 3: "GO", - } - InitialLoadReportResponse_ImplementationIdentifier_value = map[string]int32{ - "IMPL_UNSPECIFIED": 0, - "CPP": 1, - "JAVA": 2, - "GO": 3, - } -) - -func (x InitialLoadReportResponse_ImplementationIdentifier) Enum() *InitialLoadReportResponse_ImplementationIdentifier { - p := new(InitialLoadReportResponse_ImplementationIdentifier) - *p = x - return p -} - -func (x InitialLoadReportResponse_ImplementationIdentifier) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (InitialLoadReportResponse_ImplementationIdentifier) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_lb_v1_load_reporter_proto_enumTypes[0].Descriptor() -} - -func (InitialLoadReportResponse_ImplementationIdentifier) Type() protoreflect.EnumType { - return &file_grpc_lb_v1_load_reporter_proto_enumTypes[0] -} - -func (x InitialLoadReportResponse_ImplementationIdentifier) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use InitialLoadReportResponse_ImplementationIdentifier.Descriptor instead. -func (InitialLoadReportResponse_ImplementationIdentifier) EnumDescriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{3, 0} -} - -type LoadReportRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This message should be sent on the first request to the gRPC server. - InitialRequest *InitialLoadReportRequest `protobuf:"bytes,1,opt,name=initial_request,json=initialRequest,proto3" json:"initial_request,omitempty"` -} - -func (x *LoadReportRequest) Reset() { - *x = LoadReportRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadReportRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadReportRequest) ProtoMessage() {} - -func (x *LoadReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadReportRequest.ProtoReflect.Descriptor instead. -func (*LoadReportRequest) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{0} -} - -func (x *LoadReportRequest) GetInitialRequest() *InitialLoadReportRequest { - if x != nil { - return x.InitialRequest - } - return nil -} - -type InitialLoadReportRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The hostname this load reporter client is requesting load for. - LoadBalancedHostname string `protobuf:"bytes,1,opt,name=load_balanced_hostname,json=loadBalancedHostname,proto3" json:"load_balanced_hostname,omitempty"` - // Additional information to disambiguate orphaned load: load that should have - // gone to this load reporter client, but was not able to be sent since the - // load reporter client has disconnected. load_key is sent in orphaned load - // reports; see Load.load_key. - LoadKey []byte `protobuf:"bytes,2,opt,name=load_key,json=loadKey,proto3" json:"load_key,omitempty"` - // This interval defines how often the server should send load reports to - // the load balancer. - LoadReportInterval *durationpb.Duration `protobuf:"bytes,3,opt,name=load_report_interval,json=loadReportInterval,proto3" json:"load_report_interval,omitempty"` -} - -func (x *InitialLoadReportRequest) Reset() { - *x = InitialLoadReportRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitialLoadReportRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitialLoadReportRequest) ProtoMessage() {} - -func (x *InitialLoadReportRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitialLoadReportRequest.ProtoReflect.Descriptor instead. -func (*InitialLoadReportRequest) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{1} -} - -func (x *InitialLoadReportRequest) GetLoadBalancedHostname() string { - if x != nil { - return x.LoadBalancedHostname - } - return "" -} - -func (x *InitialLoadReportRequest) GetLoadKey() []byte { - if x != nil { - return x.LoadKey - } - return nil -} - -func (x *InitialLoadReportRequest) GetLoadReportInterval() *durationpb.Duration { - if x != nil { - return x.LoadReportInterval - } - return nil -} - -type LoadReportResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This message should be sent on the first response to the load balancer. - InitialResponse *InitialLoadReportResponse `protobuf:"bytes,1,opt,name=initial_response,json=initialResponse,proto3" json:"initial_response,omitempty"` - // Reports server-wide statistics for load balancing. - // This should be reported with every response. - LoadBalancingFeedback *LoadBalancingFeedback `protobuf:"bytes,2,opt,name=load_balancing_feedback,json=loadBalancingFeedback,proto3" json:"load_balancing_feedback,omitempty"` - // A load report for each tuple. This could be considered to be - // a multimap indexed by . It is not strictly necessary to - // aggregate all entries into one entry per tuple, although it - // is preferred to do so. - Load []*Load `protobuf:"bytes,3,rep,name=load,proto3" json:"load,omitempty"` -} - -func (x *LoadReportResponse) Reset() { - *x = LoadReportResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadReportResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadReportResponse) ProtoMessage() {} - -func (x *LoadReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadReportResponse.ProtoReflect.Descriptor instead. -func (*LoadReportResponse) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{2} -} - -func (x *LoadReportResponse) GetInitialResponse() *InitialLoadReportResponse { - if x != nil { - return x.InitialResponse - } - return nil -} - -func (x *LoadReportResponse) GetLoadBalancingFeedback() *LoadBalancingFeedback { - if x != nil { - return x.LoadBalancingFeedback - } - return nil -} - -func (x *LoadReportResponse) GetLoad() []*Load { - if x != nil { - return x.Load - } - return nil -} - -type InitialLoadReportResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Initial response returns the Load balancer WorkloadID. This must be plain text - // (printable ASCII). - LoadBalancerId string `protobuf:"bytes,1,opt,name=load_balancer_id,json=loadBalancerId,proto3" json:"load_balancer_id,omitempty"` - // Optional identifier of this implementation of the load reporting server. - ImplementationId InitialLoadReportResponse_ImplementationIdentifier `protobuf:"varint,2,opt,name=implementation_id,json=implementationId,proto3,enum=grpc.lb.v1.InitialLoadReportResponse_ImplementationIdentifier" json:"implementation_id,omitempty"` - // Optional server_version should be a value that is modified (and - // monotonically increased) when changes are made to the server - // implementation. - ServerVersion int64 `protobuf:"varint,3,opt,name=server_version,json=serverVersion,proto3" json:"server_version,omitempty"` -} - -func (x *InitialLoadReportResponse) Reset() { - *x = InitialLoadReportResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InitialLoadReportResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InitialLoadReportResponse) ProtoMessage() {} - -func (x *InitialLoadReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InitialLoadReportResponse.ProtoReflect.Descriptor instead. -func (*InitialLoadReportResponse) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{3} -} - -func (x *InitialLoadReportResponse) GetLoadBalancerId() string { - if x != nil { - return x.LoadBalancerId - } - return "" -} - -func (x *InitialLoadReportResponse) GetImplementationId() InitialLoadReportResponse_ImplementationIdentifier { - if x != nil { - return x.ImplementationId - } - return InitialLoadReportResponse_IMPL_UNSPECIFIED -} - -func (x *InitialLoadReportResponse) GetServerVersion() int64 { - if x != nil { - return x.ServerVersion - } - return 0 -} - -type LoadBalancingFeedback struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Reports the current utilization of the server (typical range [0.0 - 1.0]). - ServerUtilization float32 `protobuf:"fixed32,1,opt,name=server_utilization,json=serverUtilization,proto3" json:"server_utilization,omitempty"` - // The total rate of calls handled by this server (including errors). - CallsPerSecond float32 `protobuf:"fixed32,2,opt,name=calls_per_second,json=callsPerSecond,proto3" json:"calls_per_second,omitempty"` - // The total rate of error responses sent by this server. - ErrorsPerSecond float32 `protobuf:"fixed32,3,opt,name=errors_per_second,json=errorsPerSecond,proto3" json:"errors_per_second,omitempty"` -} - -func (x *LoadBalancingFeedback) Reset() { - *x = LoadBalancingFeedback{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancingFeedback) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancingFeedback) ProtoMessage() {} - -func (x *LoadBalancingFeedback) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancingFeedback.ProtoReflect.Descriptor instead. -func (*LoadBalancingFeedback) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{4} -} - -func (x *LoadBalancingFeedback) GetServerUtilization() float32 { - if x != nil { - return x.ServerUtilization - } - return 0 -} - -func (x *LoadBalancingFeedback) GetCallsPerSecond() float32 { - if x != nil { - return x.CallsPerSecond - } - return 0 -} - -func (x *LoadBalancingFeedback) GetErrorsPerSecond() float32 { - if x != nil { - return x.ErrorsPerSecond - } - return 0 -} - -type Load struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The (plain text) tag used by the calls covered by this load report. The - // tag is that part of the load balancer token after removing the load - // balancer id. Empty is equivalent to non-existent tag. - LoadBalanceTag string `protobuf:"bytes,1,opt,name=load_balance_tag,json=loadBalanceTag,proto3" json:"load_balance_tag,omitempty"` - // The user identity authenticated by the calls covered by this load - // report. Empty is equivalent to no known user_id. - UserId string `protobuf:"bytes,3,opt,name=user_id,json=userId,proto3" json:"user_id,omitempty"` - // IP address of the client that sent these requests, serialized in - // network-byte-order. It may either be an IPv4 or IPv6 address. - ClientIpAddress []byte `protobuf:"bytes,15,opt,name=client_ip_address,json=clientIpAddress,proto3" json:"client_ip_address,omitempty"` - // The number of calls started (since the last report) with the given tag and - // user_id. - NumCallsStarted int64 `protobuf:"varint,4,opt,name=num_calls_started,json=numCallsStarted,proto3" json:"num_calls_started,omitempty"` - // Indicates whether this load report is an in-progress load report in which - // num_calls_in_progress is the only valid entry. If in_progress_report is not - // set, num_calls_in_progress will be ignored. If in_progress_report is set, - // fields other than num_calls_in_progress and orphaned_load will be ignored. - // TODO(juanlishen): A Load is either an in_progress_report or not. We should - // make this explicit in hierarchy. From the log, I see in_progress_report_ - // has a random num_calls_in_progress_ when not set, which might lead to bug - // when the balancer process the load report. - // - // Types that are assignable to InProgressReport: - // *Load_NumCallsInProgress - InProgressReport isLoad_InProgressReport `protobuf_oneof:"in_progress_report"` - // The following values are counts or totals of call statistics that finished - // with the given tag and user_id. - NumCallsFinishedWithoutError int64 `protobuf:"varint,6,opt,name=num_calls_finished_without_error,json=numCallsFinishedWithoutError,proto3" json:"num_calls_finished_without_error,omitempty"` // Calls with status OK. - NumCallsFinishedWithError int64 `protobuf:"varint,7,opt,name=num_calls_finished_with_error,json=numCallsFinishedWithError,proto3" json:"num_calls_finished_with_error,omitempty"` // Calls with status non-OK. - // Calls that finished with a status that maps to HTTP 5XX (see - // googleapis/google/rpc/code.proto). Note that this is a subset of - // num_calls_finished_with_error. - NumCallsFinishedWithServerError int64 `protobuf:"varint,16,opt,name=num_calls_finished_with_server_error,json=numCallsFinishedWithServerError,proto3" json:"num_calls_finished_with_server_error,omitempty"` - // Totals are from calls that with _and_ without error. - TotalBytesSent int64 `protobuf:"varint,8,opt,name=total_bytes_sent,json=totalBytesSent,proto3" json:"total_bytes_sent,omitempty"` - TotalBytesReceived int64 `protobuf:"varint,9,opt,name=total_bytes_received,json=totalBytesReceived,proto3" json:"total_bytes_received,omitempty"` - TotalLatency *durationpb.Duration `protobuf:"bytes,10,opt,name=total_latency,json=totalLatency,proto3" json:"total_latency,omitempty"` - // Optional metrics reported for the call(s). Requires that metric_name is - // unique. - MetricData []*CallMetricData `protobuf:"bytes,11,rep,name=metric_data,json=metricData,proto3" json:"metric_data,omitempty"` - // The following two fields are used for reporting orphaned load: load that - // could not be reported to the originating balancer either since the balancer - // is no longer connected or because the frontend sent an invalid token. These - // fields must not be set with normal (unorphaned) load reports. - // - // Types that are assignable to OrphanedLoad: - // *Load_LoadKey - // *Load_LoadKeyUnknown - // *Load_OrphanedLoadIdentifier - OrphanedLoad isLoad_OrphanedLoad `protobuf_oneof:"orphaned_load"` -} - -func (x *Load) Reset() { - *x = Load{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Load) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Load) ProtoMessage() {} - -func (x *Load) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Load.ProtoReflect.Descriptor instead. -func (*Load) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{5} -} - -func (x *Load) GetLoadBalanceTag() string { - if x != nil { - return x.LoadBalanceTag - } - return "" -} - -func (x *Load) GetUserId() string { - if x != nil { - return x.UserId - } - return "" -} - -func (x *Load) GetClientIpAddress() []byte { - if x != nil { - return x.ClientIpAddress - } - return nil -} - -func (x *Load) GetNumCallsStarted() int64 { - if x != nil { - return x.NumCallsStarted - } - return 0 -} - -func (m *Load) GetInProgressReport() isLoad_InProgressReport { - if m != nil { - return m.InProgressReport - } - return nil -} - -func (x *Load) GetNumCallsInProgress() int64 { - if x, ok := x.GetInProgressReport().(*Load_NumCallsInProgress); ok { - return x.NumCallsInProgress - } - return 0 -} - -func (x *Load) GetNumCallsFinishedWithoutError() int64 { - if x != nil { - return x.NumCallsFinishedWithoutError - } - return 0 -} - -func (x *Load) GetNumCallsFinishedWithError() int64 { - if x != nil { - return x.NumCallsFinishedWithError - } - return 0 -} - -func (x *Load) GetNumCallsFinishedWithServerError() int64 { - if x != nil { - return x.NumCallsFinishedWithServerError - } - return 0 -} - -func (x *Load) GetTotalBytesSent() int64 { - if x != nil { - return x.TotalBytesSent - } - return 0 -} - -func (x *Load) GetTotalBytesReceived() int64 { - if x != nil { - return x.TotalBytesReceived - } - return 0 -} - -func (x *Load) GetTotalLatency() *durationpb.Duration { - if x != nil { - return x.TotalLatency - } - return nil -} - -func (x *Load) GetMetricData() []*CallMetricData { - if x != nil { - return x.MetricData - } - return nil -} - -func (m *Load) GetOrphanedLoad() isLoad_OrphanedLoad { - if m != nil { - return m.OrphanedLoad - } - return nil -} - -// Deprecated: Do not use. -func (x *Load) GetLoadKey() []byte { - if x, ok := x.GetOrphanedLoad().(*Load_LoadKey); ok { - return x.LoadKey - } - return nil -} - -func (x *Load) GetLoadKeyUnknown() bool { - if x, ok := x.GetOrphanedLoad().(*Load_LoadKeyUnknown); ok { - return x.LoadKeyUnknown - } - return false -} - -func (x *Load) GetOrphanedLoadIdentifier() *OrphanedLoadIdentifier { - if x, ok := x.GetOrphanedLoad().(*Load_OrphanedLoadIdentifier); ok { - return x.OrphanedLoadIdentifier - } - return nil -} - -type isLoad_InProgressReport interface { - isLoad_InProgressReport() -} - -type Load_NumCallsInProgress struct { - // The number of calls in progress (instantaneously) per load balancer id. - NumCallsInProgress int64 `protobuf:"varint,5,opt,name=num_calls_in_progress,json=numCallsInProgress,proto3,oneof"` -} - -func (*Load_NumCallsInProgress) isLoad_InProgressReport() {} - -type isLoad_OrphanedLoad interface { - isLoad_OrphanedLoad() -} - -type Load_LoadKey struct { - // Load_key is the load_key from the initial_request from the originating - // balancer. - // - // Deprecated: Do not use. - LoadKey []byte `protobuf:"bytes,12,opt,name=load_key,json=loadKey,proto3,oneof"` -} - -type Load_LoadKeyUnknown struct { - // If true then this load report is for calls that had an invalid token; the - // user is probably abusing the gRPC protocol. - // TODO(yankaiz): Rename load_key_unknown. - LoadKeyUnknown bool `protobuf:"varint,13,opt,name=load_key_unknown,json=loadKeyUnknown,proto3,oneof"` -} - -type Load_OrphanedLoadIdentifier struct { - // load_key and balancer_id are included in order to identify orphaned load - // from different origins. - OrphanedLoadIdentifier *OrphanedLoadIdentifier `protobuf:"bytes,14,opt,name=orphaned_load_identifier,json=orphanedLoadIdentifier,proto3,oneof"` -} - -func (*Load_LoadKey) isLoad_OrphanedLoad() {} - -func (*Load_LoadKeyUnknown) isLoad_OrphanedLoad() {} - -func (*Load_OrphanedLoadIdentifier) isLoad_OrphanedLoad() {} - -type CallMetricData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - NumCallsFinishedWithMetric int64 `protobuf:"varint,2,opt,name=num_calls_finished_with_metric,json=numCallsFinishedWithMetric,proto3" json:"num_calls_finished_with_metric,omitempty"` - // Sum of metric values across all calls that finished with this metric. - TotalMetricValue float64 `protobuf:"fixed64,3,opt,name=total_metric_value,json=totalMetricValue,proto3" json:"total_metric_value,omitempty"` -} - -func (x *CallMetricData) Reset() { - *x = CallMetricData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CallMetricData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CallMetricData) ProtoMessage() {} - -func (x *CallMetricData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CallMetricData.ProtoReflect.Descriptor instead. -func (*CallMetricData) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{6} -} - -func (x *CallMetricData) GetMetricName() string { - if x != nil { - return x.MetricName - } - return "" -} - -func (x *CallMetricData) GetNumCallsFinishedWithMetric() int64 { - if x != nil { - return x.NumCallsFinishedWithMetric - } - return 0 -} - -func (x *CallMetricData) GetTotalMetricValue() float64 { - if x != nil { - return x.TotalMetricValue - } - return 0 -} - -type OrphanedLoadIdentifier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The load_key from the initial_request from the originating balancer. - LoadKey []byte `protobuf:"bytes,1,opt,name=load_key,json=loadKey,proto3" json:"load_key,omitempty"` - // The unique WorkloadID generated by LoadReporter to identify balancers. Here it - // distinguishes orphaned load with a same load_key. - LoadBalancerId string `protobuf:"bytes,2,opt,name=load_balancer_id,json=loadBalancerId,proto3" json:"load_balancer_id,omitempty"` -} - -func (x *OrphanedLoadIdentifier) Reset() { - *x = OrphanedLoadIdentifier{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OrphanedLoadIdentifier) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OrphanedLoadIdentifier) ProtoMessage() {} - -func (x *OrphanedLoadIdentifier) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lb_v1_load_reporter_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OrphanedLoadIdentifier.ProtoReflect.Descriptor instead. -func (*OrphanedLoadIdentifier) Descriptor() ([]byte, []int) { - return file_grpc_lb_v1_load_reporter_proto_rawDescGZIP(), []int{7} -} - -func (x *OrphanedLoadIdentifier) GetLoadKey() []byte { - if x != nil { - return x.LoadKey - } - return nil -} - -func (x *OrphanedLoadIdentifier) GetLoadBalancerId() string { - if x != nil { - return x.LoadBalancerId - } - return "" -} - -var File_grpc_lb_v1_load_reporter_proto protoreflect.FileDescriptor - -var file_grpc_lb_v1_load_reporter_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x62, 0x2f, 0x76, 0x31, 0x2f, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0a, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x62, 0x0a, 0x11, - 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, - 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0xb8, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, - 0x16, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x5f, 0x68, - 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x64, 0x48, 0x6f, 0x73, 0x74, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x4b, - 0x0a, 0x14, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x12, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xe7, 0x01, 0x0a, 0x12, - 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x50, 0x0a, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x17, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, - 0x24, 0x0a, 0x04, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, - 0x04, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xa6, 0x02, 0x0a, 0x19, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x64, 0x12, 0x6b, 0x0a, - 0x11, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x4c, 0x6f, 0x61, - 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x10, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x4b, 0x0a, 0x18, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x14, 0x0a, - 0x10, 0x49, 0x4d, 0x50, 0x4c, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x43, 0x50, 0x50, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, - 0x4a, 0x41, 0x56, 0x41, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x4f, 0x10, 0x03, 0x22, 0x9c, - 0x01, 0x0a, 0x15, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x46, 0x65, 0x65, 0x64, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x2d, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x74, 0x69, 0x6c, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x61, 0x6c, 0x6c, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0f, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x22, 0xe2, 0x06, - 0x0a, 0x04, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x61, 0x67, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x70, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x12, 0x33, 0x0a, 0x15, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x69, - 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x00, 0x52, 0x12, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x49, 0x6e, 0x50, 0x72, - 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x46, 0x0a, 0x20, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x1c, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, - 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x40, - 0x0a, 0x1d, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, - 0x73, 0x68, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x19, 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, - 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x57, 0x69, 0x74, 0x68, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x4d, 0x0a, 0x24, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, - 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1f, - 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x57, 0x69, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x28, 0x0a, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x73, - 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0d, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x3b, 0x0a, 0x0b, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, - 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x02, 0x18, 0x01, 0x48, 0x01, - 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x5e, 0x0a, 0x18, 0x6f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x65, - 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, - 0x62, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x70, 0x68, 0x61, 0x6e, 0x65, 0x64, 0x4c, 0x6f, 0x61, - 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x01, 0x52, 0x16, 0x6f, - 0x72, 0x70, 0x68, 0x61, 0x6e, 0x65, 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x14, 0x0a, 0x12, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, - 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x6f, - 0x72, 0x70, 0x68, 0x61, 0x6e, 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x22, 0xa3, 0x01, 0x0a, 0x0e, 0x43, 0x61, 0x6c, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x1e, 0x6e, 0x75, 0x6d, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x1a, - 0x6e, 0x75, 0x6d, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x65, 0x64, - 0x57, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x4d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5d, 0x0a, 0x16, 0x4f, 0x72, 0x70, 0x68, - 0x61, 0x6e, 0x65, 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x6f, 0x61, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x28, 0x0a, - 0x10, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x64, 0x32, 0x61, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x12, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x62, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_lb_v1_load_reporter_proto_rawDescOnce sync.Once - file_grpc_lb_v1_load_reporter_proto_rawDescData = file_grpc_lb_v1_load_reporter_proto_rawDesc -) - -func file_grpc_lb_v1_load_reporter_proto_rawDescGZIP() []byte { - file_grpc_lb_v1_load_reporter_proto_rawDescOnce.Do(func() { - file_grpc_lb_v1_load_reporter_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_lb_v1_load_reporter_proto_rawDescData) - }) - return file_grpc_lb_v1_load_reporter_proto_rawDescData -} - -var file_grpc_lb_v1_load_reporter_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_grpc_lb_v1_load_reporter_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_grpc_lb_v1_load_reporter_proto_goTypes = []interface{}{ - (InitialLoadReportResponse_ImplementationIdentifier)(0), // 0: grpc.lb.v1.InitialLoadReportResponse.ImplementationIdentifier - (*LoadReportRequest)(nil), // 1: grpc.lb.v1.LoadReportRequest - (*InitialLoadReportRequest)(nil), // 2: grpc.lb.v1.InitialLoadReportRequest - (*LoadReportResponse)(nil), // 3: grpc.lb.v1.LoadReportResponse - (*InitialLoadReportResponse)(nil), // 4: grpc.lb.v1.InitialLoadReportResponse - (*LoadBalancingFeedback)(nil), // 5: grpc.lb.v1.LoadBalancingFeedback - (*Load)(nil), // 6: grpc.lb.v1.Load - (*CallMetricData)(nil), // 7: grpc.lb.v1.CallMetricData - (*OrphanedLoadIdentifier)(nil), // 8: grpc.lb.v1.OrphanedLoadIdentifier - (*durationpb.Duration)(nil), // 9: google.protobuf.Duration -} -var file_grpc_lb_v1_load_reporter_proto_depIdxs = []int32{ - 2, // 0: grpc.lb.v1.LoadReportRequest.initial_request:type_name -> grpc.lb.v1.InitialLoadReportRequest - 9, // 1: grpc.lb.v1.InitialLoadReportRequest.load_report_interval:type_name -> google.protobuf.Duration - 4, // 2: grpc.lb.v1.LoadReportResponse.initial_response:type_name -> grpc.lb.v1.InitialLoadReportResponse - 5, // 3: grpc.lb.v1.LoadReportResponse.load_balancing_feedback:type_name -> grpc.lb.v1.LoadBalancingFeedback - 6, // 4: grpc.lb.v1.LoadReportResponse.load:type_name -> grpc.lb.v1.Load - 0, // 5: grpc.lb.v1.InitialLoadReportResponse.implementation_id:type_name -> grpc.lb.v1.InitialLoadReportResponse.ImplementationIdentifier - 9, // 6: grpc.lb.v1.Load.total_latency:type_name -> google.protobuf.Duration - 7, // 7: grpc.lb.v1.Load.metric_data:type_name -> grpc.lb.v1.CallMetricData - 8, // 8: grpc.lb.v1.Load.orphaned_load_identifier:type_name -> grpc.lb.v1.OrphanedLoadIdentifier - 1, // 9: grpc.lb.v1.LoadReporter.ReportLoad:input_type -> grpc.lb.v1.LoadReportRequest - 3, // 10: grpc.lb.v1.LoadReporter.ReportLoad:output_type -> grpc.lb.v1.LoadReportResponse - 10, // [10:11] is the sub-list for method output_type - 9, // [9:10] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_grpc_lb_v1_load_reporter_proto_init() } -func file_grpc_lb_v1_load_reporter_proto_init() { - if File_grpc_lb_v1_load_reporter_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_lb_v1_load_reporter_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadReportRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialLoadReportRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadReportResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InitialLoadReportResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancingFeedback); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Load); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CallMetricData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OrphanedLoadIdentifier); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_lb_v1_load_reporter_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*Load_NumCallsInProgress)(nil), - (*Load_LoadKey)(nil), - (*Load_LoadKeyUnknown)(nil), - (*Load_OrphanedLoadIdentifier)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_lb_v1_load_reporter_proto_rawDesc, - NumEnums: 1, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_lb_v1_load_reporter_proto_goTypes, - DependencyIndexes: file_grpc_lb_v1_load_reporter_proto_depIdxs, - EnumInfos: file_grpc_lb_v1_load_reporter_proto_enumTypes, - MessageInfos: file_grpc_lb_v1_load_reporter_proto_msgTypes, - }.Build() - File_grpc_lb_v1_load_reporter_proto = out.File - file_grpc_lb_v1_load_reporter_proto_rawDesc = nil - file_grpc_lb_v1_load_reporter_proto_goTypes = nil - file_grpc_lb_v1_load_reporter_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/lookup/v1/rls.pb.go b/gen/proto/grpc/lookup/v1/rls.pb.go deleted file mode 100644 index f7b66e8..0000000 --- a/gen/proto/grpc/lookup/v1/rls.pb.go +++ /dev/null @@ -1,357 +0,0 @@ -// Copyright 2020 The gRPC Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/lookup/v1/rls.proto - -package grpc_lookup_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Possible reasons for making a request. -type RouteLookupRequest_Reason int32 - -const ( - RouteLookupRequest_REASON_UNKNOWN RouteLookupRequest_Reason = 0 // Unused - RouteLookupRequest_REASON_MISS RouteLookupRequest_Reason = 1 // No data available in local cache - RouteLookupRequest_REASON_STALE RouteLookupRequest_Reason = 2 // Data in local cache is stale -) - -// Enum value maps for RouteLookupRequest_Reason. -var ( - RouteLookupRequest_Reason_name = map[int32]string{ - 0: "REASON_UNKNOWN", - 1: "REASON_MISS", - 2: "REASON_STALE", - } - RouteLookupRequest_Reason_value = map[string]int32{ - "REASON_UNKNOWN": 0, - "REASON_MISS": 1, - "REASON_STALE": 2, - } -) - -func (x RouteLookupRequest_Reason) Enum() *RouteLookupRequest_Reason { - p := new(RouteLookupRequest_Reason) - *p = x - return p -} - -func (x RouteLookupRequest_Reason) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RouteLookupRequest_Reason) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_lookup_v1_rls_proto_enumTypes[0].Descriptor() -} - -func (RouteLookupRequest_Reason) Type() protoreflect.EnumType { - return &file_grpc_lookup_v1_rls_proto_enumTypes[0] -} - -func (x RouteLookupRequest_Reason) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RouteLookupRequest_Reason.Descriptor instead. -func (RouteLookupRequest_Reason) EnumDescriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_proto_rawDescGZIP(), []int{0, 0} -} - -type RouteLookupRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Target type allows the client to specify what kind of target format it - // would like from RLS to allow it to find the regional server, e.g. "grpc". - TargetType string `protobuf:"bytes,3,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"` - // Reason for making this request. - Reason RouteLookupRequest_Reason `protobuf:"varint,5,opt,name=reason,proto3,enum=grpc.lookup.v1.RouteLookupRequest_Reason" json:"reason,omitempty"` - // For REASON_STALE, the header_data from the stale response, if any. - StaleHeaderData string `protobuf:"bytes,6,opt,name=stale_header_data,json=staleHeaderData,proto3" json:"stale_header_data,omitempty"` - // Map of key values extracted via key builders for the gRPC or HTTP request. - KeyMap map[string]string `protobuf:"bytes,4,rep,name=key_map,json=keyMap,proto3" json:"key_map,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *RouteLookupRequest) Reset() { - *x = RouteLookupRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RouteLookupRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RouteLookupRequest) ProtoMessage() {} - -func (x *RouteLookupRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RouteLookupRequest.ProtoReflect.Descriptor instead. -func (*RouteLookupRequest) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_proto_rawDescGZIP(), []int{0} -} - -func (x *RouteLookupRequest) GetTargetType() string { - if x != nil { - return x.TargetType - } - return "" -} - -func (x *RouteLookupRequest) GetReason() RouteLookupRequest_Reason { - if x != nil { - return x.Reason - } - return RouteLookupRequest_REASON_UNKNOWN -} - -func (x *RouteLookupRequest) GetStaleHeaderData() string { - if x != nil { - return x.StaleHeaderData - } - return "" -} - -func (x *RouteLookupRequest) GetKeyMap() map[string]string { - if x != nil { - return x.KeyMap - } - return nil -} - -type RouteLookupResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Prioritized list (best one first) of addressable entities to use - // for routing, using syntax requested by the request target_type. - // The targets will be tried in order until a healthy one is found. - Targets []string `protobuf:"bytes,3,rep,name=targets,proto3" json:"targets,omitempty"` - // Optional header value to pass along to AFE in the X-Google-RLS-Data header. - // Cached with "target" and sent with all requests that match the request key. - // Allows the RLS to pass its work product to the eventual target. - HeaderData string `protobuf:"bytes,2,opt,name=header_data,json=headerData,proto3" json:"header_data,omitempty"` -} - -func (x *RouteLookupResponse) Reset() { - *x = RouteLookupResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RouteLookupResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RouteLookupResponse) ProtoMessage() {} - -func (x *RouteLookupResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RouteLookupResponse.ProtoReflect.Descriptor instead. -func (*RouteLookupResponse) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_proto_rawDescGZIP(), []int{1} -} - -func (x *RouteLookupResponse) GetTargets() []string { - if x != nil { - return x.Targets - } - return nil -} - -func (x *RouteLookupResponse) GetHeaderData() string { - if x != nil { - return x.HeaderData - } - return "" -} - -var File_grpc_lookup_v1_rls_proto protoreflect.FileDescriptor - -var file_grpc_lookup_v1_rls_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6c, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x22, 0x83, 0x03, 0x0a, 0x12, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x06, 0x72, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x47, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x1a, 0x39, 0x0a, 0x0b, 0x4b, 0x65, - 0x79, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4d, 0x49, - 0x53, 0x53, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x53, - 0x54, 0x41, 0x4c, 0x45, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, - 0x10, 0x03, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x22, 0x5e, 0x0a, 0x13, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x32, 0x6e, 0x0a, 0x12, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0x4d, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x08, 0x52, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x76, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_lookup_v1_rls_proto_rawDescOnce sync.Once - file_grpc_lookup_v1_rls_proto_rawDescData = file_grpc_lookup_v1_rls_proto_rawDesc -) - -func file_grpc_lookup_v1_rls_proto_rawDescGZIP() []byte { - file_grpc_lookup_v1_rls_proto_rawDescOnce.Do(func() { - file_grpc_lookup_v1_rls_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_lookup_v1_rls_proto_rawDescData) - }) - return file_grpc_lookup_v1_rls_proto_rawDescData -} - -var file_grpc_lookup_v1_rls_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_grpc_lookup_v1_rls_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_grpc_lookup_v1_rls_proto_goTypes = []interface{}{ - (RouteLookupRequest_Reason)(0), // 0: grpc.lookup.v1.RouteLookupRequest.Reason - (*RouteLookupRequest)(nil), // 1: grpc.lookup.v1.RouteLookupRequest - (*RouteLookupResponse)(nil), // 2: grpc.lookup.v1.RouteLookupResponse - nil, // 3: grpc.lookup.v1.RouteLookupRequest.KeyMapEntry -} -var file_grpc_lookup_v1_rls_proto_depIdxs = []int32{ - 0, // 0: grpc.lookup.v1.RouteLookupRequest.reason:type_name -> grpc.lookup.v1.RouteLookupRequest.Reason - 3, // 1: grpc.lookup.v1.RouteLookupRequest.key_map:type_name -> grpc.lookup.v1.RouteLookupRequest.KeyMapEntry - 1, // 2: grpc.lookup.v1.RouteLookupService.RouteLookup:input_type -> grpc.lookup.v1.RouteLookupRequest - 2, // 3: grpc.lookup.v1.RouteLookupService.RouteLookup:output_type -> grpc.lookup.v1.RouteLookupResponse - 3, // [3:4] is the sub-list for method output_type - 2, // [2:3] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_grpc_lookup_v1_rls_proto_init() } -func file_grpc_lookup_v1_rls_proto_init() { - if File_grpc_lookup_v1_rls_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_lookup_v1_rls_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteLookupRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteLookupResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_lookup_v1_rls_proto_rawDesc, - NumEnums: 1, - NumMessages: 3, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_lookup_v1_rls_proto_goTypes, - DependencyIndexes: file_grpc_lookup_v1_rls_proto_depIdxs, - EnumInfos: file_grpc_lookup_v1_rls_proto_enumTypes, - MessageInfos: file_grpc_lookup_v1_rls_proto_msgTypes, - }.Build() - File_grpc_lookup_v1_rls_proto = out.File - file_grpc_lookup_v1_rls_proto_rawDesc = nil - file_grpc_lookup_v1_rls_proto_goTypes = nil - file_grpc_lookup_v1_rls_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/lookup/v1/rls_config.pb.go b/gen/proto/grpc/lookup/v1/rls_config.pb.go deleted file mode 100644 index a59bb87..0000000 --- a/gen/proto/grpc/lookup/v1/rls_config.pb.go +++ /dev/null @@ -1,935 +0,0 @@ -// Copyright 2020 The gRPC Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/lookup/v1/rls_config.proto - -package grpc_lookup_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Extract a key based on a given name (e.g. header name or query parameter -// name). The name must match one of the names listed in the "name" field. If -// the "required_match" field is true, one of the specified names must be -// present for the keybuilder to match. -type NameMatcher struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name that will be used in the RLS key_map to refer to this value. - // If required_match is true, you may omit this field or set it to an empty - // string, in which case the matcher will require a match, but won't update - // the key_map. - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - // Ordered list of names (headers or query parameter names) that can supply - // this value; the first one with a non-empty value is used. - Names []string `protobuf:"bytes,2,rep,name=names,proto3" json:"names,omitempty"` - // If true, make this extraction required; the key builder will not match - // if no value is found. - RequiredMatch bool `protobuf:"varint,3,opt,name=required_match,json=requiredMatch,proto3" json:"required_match,omitempty"` -} - -func (x *NameMatcher) Reset() { - *x = NameMatcher{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NameMatcher) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NameMatcher) ProtoMessage() {} - -func (x *NameMatcher) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NameMatcher.ProtoReflect.Descriptor instead. -func (*NameMatcher) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{0} -} - -func (x *NameMatcher) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *NameMatcher) GetNames() []string { - if x != nil { - return x.Names - } - return nil -} - -func (x *NameMatcher) GetRequiredMatch() bool { - if x != nil { - return x.RequiredMatch - } - return false -} - -// A GrpcKeyBuilder applies to a given gRPC service, name, and headers. -type GrpcKeyBuilder struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Names []*GrpcKeyBuilder_Name `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` - ExtraKeys *GrpcKeyBuilder_ExtraKeys `protobuf:"bytes,3,opt,name=extra_keys,json=extraKeys,proto3" json:"extra_keys,omitempty"` - // Extract keys from all listed headers. - // For gRPC, it is an error to specify "required_match" on the NameMatcher - // protos. - Headers []*NameMatcher `protobuf:"bytes,2,rep,name=headers,proto3" json:"headers,omitempty"` - // You can optionally set one or more specific key/value pairs to be added to - // the key_map. This can be useful to identify which builder built the key, - // for example if you are suppressing the actual method, but need to - // separately cache and request all the matched methods. - ConstantKeys map[string]string `protobuf:"bytes,4,rep,name=constant_keys,json=constantKeys,proto3" json:"constant_keys,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *GrpcKeyBuilder) Reset() { - *x = GrpcKeyBuilder{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcKeyBuilder) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcKeyBuilder) ProtoMessage() {} - -func (x *GrpcKeyBuilder) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcKeyBuilder.ProtoReflect.Descriptor instead. -func (*GrpcKeyBuilder) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{1} -} - -func (x *GrpcKeyBuilder) GetNames() []*GrpcKeyBuilder_Name { - if x != nil { - return x.Names - } - return nil -} - -func (x *GrpcKeyBuilder) GetExtraKeys() *GrpcKeyBuilder_ExtraKeys { - if x != nil { - return x.ExtraKeys - } - return nil -} - -func (x *GrpcKeyBuilder) GetHeaders() []*NameMatcher { - if x != nil { - return x.Headers - } - return nil -} - -func (x *GrpcKeyBuilder) GetConstantKeys() map[string]string { - if x != nil { - return x.ConstantKeys - } - return nil -} - -// An HttpKeyBuilder applies to a given HTTP URL and headers. -// -// Path and host patterns use the matching syntax from gRPC transcoding to -// extract named key/value pairs from the path and host components of the URL: -// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto -// -// It is invalid to specify the same key name in multiple places in a pattern. -// -// For a service where the project id can be expressed either as a subdomain or -// in the path, separate HttpKeyBuilders must be used: -// host_pattern: 'example.com' path_pattern: '/{id}/{object}/**' -// host_pattern: '{id}.example.com' path_pattern: '/{object}/**' -// If the host is exactly 'example.com', the first path segment will be used as -// the id and the second segment as the object. If the host has a subdomain, the -// subdomain will be used as the id and the first segment as the object. If -// neither pattern matches, no keys will be extracted. -type HttpKeyBuilder struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // host_pattern is an ordered list of host template patterns for the desired - // value. If any host_pattern values are specified, then at least one must - // match, and the last one wins and sets any specified variables. A host - // consists of labels separated by dots. Each label is matched against the - // label in the pattern as follows: - // - "*": Matches any single label. - // - "**": Matches zero or more labels (first or last part of host only). - // - "{=...}": One or more label capture, where "..." can be any - // template that does not include a capture. - // - "{}": A single label capture. Identical to {=*}. - // - // Examples: - // - "example.com": Only applies to the exact host example.com. - // - "*.example.com": Matches subdomains of example.com. - // - "**.example.com": matches example.com, and all levels of subdomains. - // - "{project}.example.com": Extracts the third level subdomain. - // - "{project=**}.example.com": Extracts the third level+ subdomains. - // - "{project=**}": Extracts the entire host. - HostPatterns []string `protobuf:"bytes,1,rep,name=host_patterns,json=hostPatterns,proto3" json:"host_patterns,omitempty"` - // path_pattern is an ordered list of path template patterns for the desired - // value. If any path_pattern values are specified, then at least one must - // match, and the last one wins and sets any specified variables. A path - // consists of segments separated by slashes. Each segment is matched against - // the segment in the pattern as follows: - // - "*": Matches any single segment. - // - "**": Matches zero or more segments (first or last part of path only). - // - "{=...}": One or more segment capture, where "..." can be any - // template that does not include a capture. - // - "{}": A single segment capture. Identical to {=*}. - // A custom method may also be specified by appending ":" and the custom - // method name or "*" to indicate any custom method (including no custom - // method). For example, "/*/projects/{project_id}/**:*" extracts - // `{project_id}` for any version, resource and custom method that includes - // it. By default, any custom method will be matched. - // - // Examples: - // - "/v1/{name=messages/*}": extracts a name like "messages/12345". - // - "/v1/messages/{message_id}": extracts a message_id like "12345". - // - "/v1/users/{user_id}/messages/{message_id}": extracts two key values. - PathPatterns []string `protobuf:"bytes,2,rep,name=path_patterns,json=pathPatterns,proto3" json:"path_patterns,omitempty"` - // List of query parameter names to try to match. - // For example: ["parent", "name", "resource.name"] - // We extract all the specified query_parameters (case-sensitively). If any - // are marked as "required_match" and are not present, this keybuilder fails - // to match. If a given parameter appears multiple times (?foo=a&foo=b) we - // will report it as a comma-separated string (foo=a,b). - QueryParameters []*NameMatcher `protobuf:"bytes,3,rep,name=query_parameters,json=queryParameters,proto3" json:"query_parameters,omitempty"` - // List of headers to try to match. - // We extract all the specified header values (case-insensitively). If any - // are marked as "required_match" and are not present, this keybuilder fails - // to match. If a given header appears multiple times in the request we will - // report it as a comma-separated string, in standard HTTP fashion. - Headers []*NameMatcher `protobuf:"bytes,4,rep,name=headers,proto3" json:"headers,omitempty"` - // You can optionally set one or more specific key/value pairs to be added to - // the key_map. This can be useful to identify which builder built the key, - // for example if you are suppressing a lot of information from the URL, but - // need to separately cache and request URLs with that content. - ConstantKeys map[string]string `protobuf:"bytes,5,rep,name=constant_keys,json=constantKeys,proto3" json:"constant_keys,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *HttpKeyBuilder) Reset() { - *x = HttpKeyBuilder{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HttpKeyBuilder) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HttpKeyBuilder) ProtoMessage() {} - -func (x *HttpKeyBuilder) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HttpKeyBuilder.ProtoReflect.Descriptor instead. -func (*HttpKeyBuilder) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{2} -} - -func (x *HttpKeyBuilder) GetHostPatterns() []string { - if x != nil { - return x.HostPatterns - } - return nil -} - -func (x *HttpKeyBuilder) GetPathPatterns() []string { - if x != nil { - return x.PathPatterns - } - return nil -} - -func (x *HttpKeyBuilder) GetQueryParameters() []*NameMatcher { - if x != nil { - return x.QueryParameters - } - return nil -} - -func (x *HttpKeyBuilder) GetHeaders() []*NameMatcher { - if x != nil { - return x.Headers - } - return nil -} - -func (x *HttpKeyBuilder) GetConstantKeys() map[string]string { - if x != nil { - return x.ConstantKeys - } - return nil -} - -type RouteLookupConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Ordered specifications for constructing keys for HTTP requests. Last - // match wins. If no HttpKeyBuilder matches, an empty key_map will be sent to - // the lookup service; it should likely reply with a global default route - // and raise an alert. - HttpKeybuilders []*HttpKeyBuilder `protobuf:"bytes,1,rep,name=http_keybuilders,json=httpKeybuilders,proto3" json:"http_keybuilders,omitempty"` - // Unordered specifications for constructing keys for gRPC requests. All - // GrpcKeyBuilders on this list must have unique "name" fields so that the - // client is free to prebuild a hash map keyed by name. If no GrpcKeyBuilder - // matches, an empty key_map will be sent to the lookup service; it should - // likely reply with a global default route and raise an alert. - GrpcKeybuilders []*GrpcKeyBuilder `protobuf:"bytes,2,rep,name=grpc_keybuilders,json=grpcKeybuilders,proto3" json:"grpc_keybuilders,omitempty"` - // The name of the lookup service as a gRPC URI. Typically, this will be - // a subdomain of the target, such as "lookup.datastore.googleapis.com". - LookupService string `protobuf:"bytes,3,opt,name=lookup_service,json=lookupService,proto3" json:"lookup_service,omitempty"` - // Configure a timeout value for lookup service requests. - // Defaults to 10 seconds if not specified. - LookupServiceTimeout *durationpb.Duration `protobuf:"bytes,4,opt,name=lookup_service_timeout,json=lookupServiceTimeout,proto3" json:"lookup_service_timeout,omitempty"` - // How long are responses valid for (like HTTP Cache-Control). - // If omitted or zero, the longest valid cache time is used. - // This value is clamped to 5 minutes to avoid unflushable bad responses. - MaxAge *durationpb.Duration `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` - // After a response has been in the client cache for this amount of time - // and is re-requested, start an asynchronous RPC to re-validate it. - // This value should be less than max_age by at least the length of a - // typical RTT to the Route Lookup Service to fully mask the RTT latency. - // If omitted, keys are only re-requested after they have expired. - StaleAge *durationpb.Duration `protobuf:"bytes,6,opt,name=stale_age,json=staleAge,proto3" json:"stale_age,omitempty"` - // Rough indicator of amount of memory to use for the client cache. Some of - // the data structure overhead is not accounted for, so actual memory consumed - // will be somewhat greater than this value. If this field is omitted or set - // to zero, a client default will be used. The value may be capped to a lower - // amount based on client configuration. - CacheSizeBytes int64 `protobuf:"varint,7,opt,name=cache_size_bytes,json=cacheSizeBytes,proto3" json:"cache_size_bytes,omitempty"` - // This is a list of all the possible targets that can be returned by the - // lookup service. If a target not on this list is returned, it will be - // treated the same as an unhealthy target. - ValidTargets []string `protobuf:"bytes,8,rep,name=valid_targets,json=validTargets,proto3" json:"valid_targets,omitempty"` - // This value provides a default target to use if needed. If set, it will be - // used if RLS returns an error, times out, or returns an invalid response. - // Note that requests can be routed only to a subdomain of the original - // target, e.g. "us_east_1.cloudbigtable.googleapis.com". - DefaultTarget string `protobuf:"bytes,9,opt,name=default_target,json=defaultTarget,proto3" json:"default_target,omitempty"` -} - -func (x *RouteLookupConfig) Reset() { - *x = RouteLookupConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RouteLookupConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RouteLookupConfig) ProtoMessage() {} - -func (x *RouteLookupConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RouteLookupConfig.ProtoReflect.Descriptor instead. -func (*RouteLookupConfig) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{3} -} - -func (x *RouteLookupConfig) GetHttpKeybuilders() []*HttpKeyBuilder { - if x != nil { - return x.HttpKeybuilders - } - return nil -} - -func (x *RouteLookupConfig) GetGrpcKeybuilders() []*GrpcKeyBuilder { - if x != nil { - return x.GrpcKeybuilders - } - return nil -} - -func (x *RouteLookupConfig) GetLookupService() string { - if x != nil { - return x.LookupService - } - return "" -} - -func (x *RouteLookupConfig) GetLookupServiceTimeout() *durationpb.Duration { - if x != nil { - return x.LookupServiceTimeout - } - return nil -} - -func (x *RouteLookupConfig) GetMaxAge() *durationpb.Duration { - if x != nil { - return x.MaxAge - } - return nil -} - -func (x *RouteLookupConfig) GetStaleAge() *durationpb.Duration { - if x != nil { - return x.StaleAge - } - return nil -} - -func (x *RouteLookupConfig) GetCacheSizeBytes() int64 { - if x != nil { - return x.CacheSizeBytes - } - return 0 -} - -func (x *RouteLookupConfig) GetValidTargets() []string { - if x != nil { - return x.ValidTargets - } - return nil -} - -func (x *RouteLookupConfig) GetDefaultTarget() string { - if x != nil { - return x.DefaultTarget - } - return "" -} - -// RouteLookupClusterSpecifier is used in xDS to represent a cluster specifier -// plugin for RLS. -type RouteLookupClusterSpecifier struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The RLS config for this cluster specifier plugin instance. - RouteLookupConfig *RouteLookupConfig `protobuf:"bytes,1,opt,name=route_lookup_config,json=routeLookupConfig,proto3" json:"route_lookup_config,omitempty"` -} - -func (x *RouteLookupClusterSpecifier) Reset() { - *x = RouteLookupClusterSpecifier{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RouteLookupClusterSpecifier) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RouteLookupClusterSpecifier) ProtoMessage() {} - -func (x *RouteLookupClusterSpecifier) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RouteLookupClusterSpecifier.ProtoReflect.Descriptor instead. -func (*RouteLookupClusterSpecifier) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{4} -} - -func (x *RouteLookupClusterSpecifier) GetRouteLookupConfig() *RouteLookupConfig { - if x != nil { - return x.RouteLookupConfig - } - return nil -} - -// To match, one of the given Name fields must match; the service and method -// fields are specified as fixed strings. The service name is required and -// includes the proto package name. The method name may be omitted, in -// which case any method on the given service is matched. -type GrpcKeyBuilder_Name struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` - Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` -} - -func (x *GrpcKeyBuilder_Name) Reset() { - *x = GrpcKeyBuilder_Name{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcKeyBuilder_Name) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcKeyBuilder_Name) ProtoMessage() {} - -func (x *GrpcKeyBuilder_Name) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcKeyBuilder_Name.ProtoReflect.Descriptor instead. -func (*GrpcKeyBuilder_Name) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *GrpcKeyBuilder_Name) GetService() string { - if x != nil { - return x.Service - } - return "" -} - -func (x *GrpcKeyBuilder_Name) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -// If you wish to include the host, service, or method names as keys in the -// generated RouteLookupRequest, specify key names to use in the extra_keys -// submessage. If a key name is empty, no key will be set for that value. -// If this submessage is specified, the normal host/path fields will be left -// unset in the RouteLookupRequest. We are deprecating host/path in the -// RouteLookupRequest, so services should migrate to the ExtraKeys approach. -type GrpcKeyBuilder_ExtraKeys struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - Service string `protobuf:"bytes,2,opt,name=service,proto3" json:"service,omitempty"` - Method string `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` -} - -func (x *GrpcKeyBuilder_ExtraKeys) Reset() { - *x = GrpcKeyBuilder_ExtraKeys{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcKeyBuilder_ExtraKeys) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcKeyBuilder_ExtraKeys) ProtoMessage() {} - -func (x *GrpcKeyBuilder_ExtraKeys) ProtoReflect() protoreflect.Message { - mi := &file_grpc_lookup_v1_rls_config_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcKeyBuilder_ExtraKeys.ProtoReflect.Descriptor instead. -func (*GrpcKeyBuilder_ExtraKeys) Descriptor() ([]byte, []int) { - return file_grpc_lookup_v1_rls_config_proto_rawDescGZIP(), []int{1, 1} -} - -func (x *GrpcKeyBuilder_ExtraKeys) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *GrpcKeyBuilder_ExtraKeys) GetService() string { - if x != nil { - return x.Service - } - return "" -} - -func (x *GrpcKeyBuilder_ExtraKeys) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -var File_grpc_lookup_v1_rls_config_proto protoreflect.FileDescriptor - -var file_grpc_lookup_v1_rls_config_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2f, 0x76, 0x31, - 0x2f, 0x72, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, - 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x5c, 0x0a, 0x0b, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x64, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, - 0xf0, 0x03, 0x0a, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x65, 0x72, 0x12, 0x39, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, - 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x47, 0x0a, - 0x0a, 0x65, 0x78, 0x74, 0x72, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, - 0x72, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x09, 0x65, 0x78, 0x74, - 0x72, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x55, 0x0a, - 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, - 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x1a, 0x38, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x1a, 0x51, - 0x0a, 0x09, 0x45, 0x78, 0x74, 0x72, 0x61, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xf1, 0x02, 0x0a, 0x0e, 0x48, 0x74, 0x74, 0x70, 0x4b, 0x65, 0x79, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x68, 0x6f, - 0x73, 0x74, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0c, 0x70, 0x61, 0x74, 0x68, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, - 0x46, 0x0a, 0x10, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x52, 0x0f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x55, - 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4b, 0x65, 0x79, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x4b, 0x65, - 0x79, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, - 0x74, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa6, 0x04, 0x0a, 0x11, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x49, 0x0a, 0x10, - 0x68, 0x74, 0x74, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x4b, 0x65, 0x79, 0x42, - 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x4b, 0x65, 0x79, 0x62, - 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x12, 0x49, 0x0a, 0x10, 0x67, 0x72, 0x70, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x65, - 0x72, 0x52, 0x0f, 0x67, 0x72, 0x70, 0x63, 0x4b, 0x65, 0x79, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x65, - 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x6f, 0x6f, 0x6b, - 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4f, 0x0a, 0x16, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x14, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x61, - 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x12, 0x36, - 0x0a, 0x09, 0x73, 0x74, 0x61, 0x6c, 0x65, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x74, - 0x61, 0x6c, 0x65, 0x41, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x54, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, - 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4a, 0x04, 0x08, 0x0a, - 0x10, 0x0b, 0x52, 0x1b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x63, - 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x22, - 0x70, 0x0a, 0x1b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x51, - 0x0a, 0x13, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x11, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x53, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x2e, 0x76, 0x31, 0x42, 0x0e, 0x52, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x6c, 0x6f, 0x6f, - 0x6b, 0x75, 0x70, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_lookup_v1_rls_config_proto_rawDescOnce sync.Once - file_grpc_lookup_v1_rls_config_proto_rawDescData = file_grpc_lookup_v1_rls_config_proto_rawDesc -) - -func file_grpc_lookup_v1_rls_config_proto_rawDescGZIP() []byte { - file_grpc_lookup_v1_rls_config_proto_rawDescOnce.Do(func() { - file_grpc_lookup_v1_rls_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_lookup_v1_rls_config_proto_rawDescData) - }) - return file_grpc_lookup_v1_rls_config_proto_rawDescData -} - -var file_grpc_lookup_v1_rls_config_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_grpc_lookup_v1_rls_config_proto_goTypes = []interface{}{ - (*NameMatcher)(nil), // 0: grpc.lookup.v1.NameMatcher - (*GrpcKeyBuilder)(nil), // 1: grpc.lookup.v1.GrpcKeyBuilder - (*HttpKeyBuilder)(nil), // 2: grpc.lookup.v1.HttpKeyBuilder - (*RouteLookupConfig)(nil), // 3: grpc.lookup.v1.RouteLookupConfig - (*RouteLookupClusterSpecifier)(nil), // 4: grpc.lookup.v1.RouteLookupClusterSpecifier - (*GrpcKeyBuilder_Name)(nil), // 5: grpc.lookup.v1.GrpcKeyBuilder.Name - (*GrpcKeyBuilder_ExtraKeys)(nil), // 6: grpc.lookup.v1.GrpcKeyBuilder.ExtraKeys - nil, // 7: grpc.lookup.v1.GrpcKeyBuilder.ConstantKeysEntry - nil, // 8: grpc.lookup.v1.HttpKeyBuilder.ConstantKeysEntry - (*durationpb.Duration)(nil), // 9: google.protobuf.Duration -} -var file_grpc_lookup_v1_rls_config_proto_depIdxs = []int32{ - 5, // 0: grpc.lookup.v1.GrpcKeyBuilder.names:type_name -> grpc.lookup.v1.GrpcKeyBuilder.Name - 6, // 1: grpc.lookup.v1.GrpcKeyBuilder.extra_keys:type_name -> grpc.lookup.v1.GrpcKeyBuilder.ExtraKeys - 0, // 2: grpc.lookup.v1.GrpcKeyBuilder.headers:type_name -> grpc.lookup.v1.NameMatcher - 7, // 3: grpc.lookup.v1.GrpcKeyBuilder.constant_keys:type_name -> grpc.lookup.v1.GrpcKeyBuilder.ConstantKeysEntry - 0, // 4: grpc.lookup.v1.HttpKeyBuilder.query_parameters:type_name -> grpc.lookup.v1.NameMatcher - 0, // 5: grpc.lookup.v1.HttpKeyBuilder.headers:type_name -> grpc.lookup.v1.NameMatcher - 8, // 6: grpc.lookup.v1.HttpKeyBuilder.constant_keys:type_name -> grpc.lookup.v1.HttpKeyBuilder.ConstantKeysEntry - 2, // 7: grpc.lookup.v1.RouteLookupConfig.http_keybuilders:type_name -> grpc.lookup.v1.HttpKeyBuilder - 1, // 8: grpc.lookup.v1.RouteLookupConfig.grpc_keybuilders:type_name -> grpc.lookup.v1.GrpcKeyBuilder - 9, // 9: grpc.lookup.v1.RouteLookupConfig.lookup_service_timeout:type_name -> google.protobuf.Duration - 9, // 10: grpc.lookup.v1.RouteLookupConfig.max_age:type_name -> google.protobuf.Duration - 9, // 11: grpc.lookup.v1.RouteLookupConfig.stale_age:type_name -> google.protobuf.Duration - 3, // 12: grpc.lookup.v1.RouteLookupClusterSpecifier.route_lookup_config:type_name -> grpc.lookup.v1.RouteLookupConfig - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name -} - -func init() { file_grpc_lookup_v1_rls_config_proto_init() } -func file_grpc_lookup_v1_rls_config_proto_init() { - if File_grpc_lookup_v1_rls_config_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_lookup_v1_rls_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NameMatcher); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcKeyBuilder); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpKeyBuilder); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteLookupConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteLookupClusterSpecifier); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcKeyBuilder_Name); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_lookup_v1_rls_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcKeyBuilder_ExtraKeys); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_lookup_v1_rls_config_proto_rawDesc, - NumEnums: 0, - NumMessages: 9, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_lookup_v1_rls_config_proto_goTypes, - DependencyIndexes: file_grpc_lookup_v1_rls_config_proto_depIdxs, - MessageInfos: file_grpc_lookup_v1_rls_config_proto_msgTypes, - }.Build() - File_grpc_lookup_v1_rls_config_proto = out.File - file_grpc_lookup_v1_rls_config_proto_rawDesc = nil - file_grpc_lookup_v1_rls_config_proto_goTypes = nil - file_grpc_lookup_v1_rls_config_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/reflection/v1/reflection.pb.go b/gen/proto/grpc/reflection/v1/reflection.pb.go deleted file mode 100644 index 530a695..0000000 --- a/gen/proto/grpc/reflection/v1/reflection.pb.go +++ /dev/null @@ -1,951 +0,0 @@ -// Copyright 2016 The gRPC Authors -// -// 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. - -// Service exported by server reflection. A more complete description of how -// server reflection works can be found at -// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/reflection/v1/reflection.proto - -package grpc_reflection_v1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The message sent by the client when calling ServerReflectionInfo method. -type ServerReflectionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // To use reflection service, the client should set one of the following - // fields in message_request. The server distinguishes requests by their - // defined field and then handles them using corresponding methods. - // - // Types that are assignable to MessageRequest: - // *ServerReflectionRequest_FileByFilename - // *ServerReflectionRequest_FileContainingSymbol - // *ServerReflectionRequest_FileContainingExtension - // *ServerReflectionRequest_AllExtensionNumbersOfType - // *ServerReflectionRequest_ListServices - MessageRequest isServerReflectionRequest_MessageRequest `protobuf_oneof:"message_request"` -} - -func (x *ServerReflectionRequest) Reset() { - *x = ServerReflectionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerReflectionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerReflectionRequest) ProtoMessage() {} - -func (x *ServerReflectionRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerReflectionRequest.ProtoReflect.Descriptor instead. -func (*ServerReflectionRequest) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{0} -} - -func (x *ServerReflectionRequest) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (m *ServerReflectionRequest) GetMessageRequest() isServerReflectionRequest_MessageRequest { - if m != nil { - return m.MessageRequest - } - return nil -} - -func (x *ServerReflectionRequest) GetFileByFilename() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileByFilename); ok { - return x.FileByFilename - } - return "" -} - -func (x *ServerReflectionRequest) GetFileContainingSymbol() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingSymbol); ok { - return x.FileContainingSymbol - } - return "" -} - -func (x *ServerReflectionRequest) GetFileContainingExtension() *ExtensionRequest { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_FileContainingExtension); ok { - return x.FileContainingExtension - } - return nil -} - -func (x *ServerReflectionRequest) GetAllExtensionNumbersOfType() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_AllExtensionNumbersOfType); ok { - return x.AllExtensionNumbersOfType - } - return "" -} - -func (x *ServerReflectionRequest) GetListServices() string { - if x, ok := x.GetMessageRequest().(*ServerReflectionRequest_ListServices); ok { - return x.ListServices - } - return "" -} - -type isServerReflectionRequest_MessageRequest interface { - isServerReflectionRequest_MessageRequest() -} - -type ServerReflectionRequest_FileByFilename struct { - // Find a proto file by the file name. - FileByFilename string `protobuf:"bytes,3,opt,name=file_by_filename,json=fileByFilename,proto3,oneof"` -} - -type ServerReflectionRequest_FileContainingSymbol struct { - // Find the proto file that declares the given fully-qualified symbol name. - // This field should be a fully-qualified symbol name - // (e.g. .[.] or .). - FileContainingSymbol string `protobuf:"bytes,4,opt,name=file_containing_symbol,json=fileContainingSymbol,proto3,oneof"` -} - -type ServerReflectionRequest_FileContainingExtension struct { - // Find the proto file which defines an extension extending the given - // message type with the given field number. - FileContainingExtension *ExtensionRequest `protobuf:"bytes,5,opt,name=file_containing_extension,json=fileContainingExtension,proto3,oneof"` -} - -type ServerReflectionRequest_AllExtensionNumbersOfType struct { - // Finds the tag numbers used by all known extensions of the given message - // type, and appends them to ExtensionNumberResponse in an undefined order. - // Its corresponding method is best-effort: it's not guaranteed that the - // reflection service will implement this method, and it's not guaranteed - // that this method will provide all extensions. Returns - // StatusCode::UNIMPLEMENTED if it's not implemented. - // This field should be a fully-qualified type name. The format is - // . - AllExtensionNumbersOfType string `protobuf:"bytes,6,opt,name=all_extension_numbers_of_type,json=allExtensionNumbersOfType,proto3,oneof"` -} - -type ServerReflectionRequest_ListServices struct { - // List the full names of registered services. The content will not be - // checked. - ListServices string `protobuf:"bytes,7,opt,name=list_services,json=listServices,proto3,oneof"` -} - -func (*ServerReflectionRequest_FileByFilename) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_FileContainingSymbol) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_FileContainingExtension) isServerReflectionRequest_MessageRequest() {} - -func (*ServerReflectionRequest_AllExtensionNumbersOfType) isServerReflectionRequest_MessageRequest() { -} - -func (*ServerReflectionRequest_ListServices) isServerReflectionRequest_MessageRequest() {} - -// The type name and extension number sent by the client when requesting -// file_containing_extension. -type ExtensionRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Fully-qualified type name. The format should be . - ContainingType string `protobuf:"bytes,1,opt,name=containing_type,json=containingType,proto3" json:"containing_type,omitempty"` - ExtensionNumber int32 `protobuf:"varint,2,opt,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` -} - -func (x *ExtensionRequest) Reset() { - *x = ExtensionRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExtensionRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExtensionRequest) ProtoMessage() {} - -func (x *ExtensionRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExtensionRequest.ProtoReflect.Descriptor instead. -func (*ExtensionRequest) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{1} -} - -func (x *ExtensionRequest) GetContainingType() string { - if x != nil { - return x.ContainingType - } - return "" -} - -func (x *ExtensionRequest) GetExtensionNumber() int32 { - if x != nil { - return x.ExtensionNumber - } - return 0 -} - -// The message sent by the server to answer ServerReflectionInfo method. -type ServerReflectionResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ValidHost string `protobuf:"bytes,1,opt,name=valid_host,json=validHost,proto3" json:"valid_host,omitempty"` - OriginalRequest *ServerReflectionRequest `protobuf:"bytes,2,opt,name=original_request,json=originalRequest,proto3" json:"original_request,omitempty"` - // The server sets one of the following fields according to the message_request - // in the request. - // - // Types that are assignable to MessageResponse: - // *ServerReflectionResponse_FileDescriptorResponse - // *ServerReflectionResponse_AllExtensionNumbersResponse - // *ServerReflectionResponse_ListServicesResponse - // *ServerReflectionResponse_ErrorResponse - MessageResponse isServerReflectionResponse_MessageResponse `protobuf_oneof:"message_response"` -} - -func (x *ServerReflectionResponse) Reset() { - *x = ServerReflectionResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerReflectionResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerReflectionResponse) ProtoMessage() {} - -func (x *ServerReflectionResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerReflectionResponse.ProtoReflect.Descriptor instead. -func (*ServerReflectionResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{2} -} - -func (x *ServerReflectionResponse) GetValidHost() string { - if x != nil { - return x.ValidHost - } - return "" -} - -func (x *ServerReflectionResponse) GetOriginalRequest() *ServerReflectionRequest { - if x != nil { - return x.OriginalRequest - } - return nil -} - -func (m *ServerReflectionResponse) GetMessageResponse() isServerReflectionResponse_MessageResponse { - if m != nil { - return m.MessageResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetFileDescriptorResponse() *FileDescriptorResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_FileDescriptorResponse); ok { - return x.FileDescriptorResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetAllExtensionNumbersResponse() *ExtensionNumberResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_AllExtensionNumbersResponse); ok { - return x.AllExtensionNumbersResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetListServicesResponse() *ListServiceResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ListServicesResponse); ok { - return x.ListServicesResponse - } - return nil -} - -func (x *ServerReflectionResponse) GetErrorResponse() *ErrorResponse { - if x, ok := x.GetMessageResponse().(*ServerReflectionResponse_ErrorResponse); ok { - return x.ErrorResponse - } - return nil -} - -type isServerReflectionResponse_MessageResponse interface { - isServerReflectionResponse_MessageResponse() -} - -type ServerReflectionResponse_FileDescriptorResponse struct { - // This message is used to answer file_by_filename, file_containing_symbol, - // file_containing_extension requests with transitive dependencies. - // As the repeated label is not allowed in oneof fields, we use a - // FileDescriptorResponse message to encapsulate the repeated fields. - // The reflection service is allowed to avoid sending FileDescriptorProtos - // that were previously sent in response to earlier requests in the stream. - FileDescriptorResponse *FileDescriptorResponse `protobuf:"bytes,4,opt,name=file_descriptor_response,json=fileDescriptorResponse,proto3,oneof"` -} - -type ServerReflectionResponse_AllExtensionNumbersResponse struct { - // This message is used to answer all_extension_numbers_of_type requests. - AllExtensionNumbersResponse *ExtensionNumberResponse `protobuf:"bytes,5,opt,name=all_extension_numbers_response,json=allExtensionNumbersResponse,proto3,oneof"` -} - -type ServerReflectionResponse_ListServicesResponse struct { - // This message is used to answer list_services requests. - ListServicesResponse *ListServiceResponse `protobuf:"bytes,6,opt,name=list_services_response,json=listServicesResponse,proto3,oneof"` -} - -type ServerReflectionResponse_ErrorResponse struct { - // This message is used when an error occurs. - ErrorResponse *ErrorResponse `protobuf:"bytes,7,opt,name=error_response,json=errorResponse,proto3,oneof"` -} - -func (*ServerReflectionResponse_FileDescriptorResponse) isServerReflectionResponse_MessageResponse() { -} - -func (*ServerReflectionResponse_AllExtensionNumbersResponse) isServerReflectionResponse_MessageResponse() { -} - -func (*ServerReflectionResponse_ListServicesResponse) isServerReflectionResponse_MessageResponse() {} - -func (*ServerReflectionResponse_ErrorResponse) isServerReflectionResponse_MessageResponse() {} - -// Serialized FileDescriptorProto messages sent by the server answering -// a file_by_filename, file_containing_symbol, or file_containing_extension -// request. -type FileDescriptorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Serialized FileDescriptorProto messages. We avoid taking a dependency on - // descriptor.proto, which uses proto2 only features, by making them opaque - // bytes instead. - FileDescriptorProto [][]byte `protobuf:"bytes,1,rep,name=file_descriptor_proto,json=fileDescriptorProto,proto3" json:"file_descriptor_proto,omitempty"` -} - -func (x *FileDescriptorResponse) Reset() { - *x = FileDescriptorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FileDescriptorResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FileDescriptorResponse) ProtoMessage() {} - -func (x *FileDescriptorResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FileDescriptorResponse.ProtoReflect.Descriptor instead. -func (*FileDescriptorResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{3} -} - -func (x *FileDescriptorResponse) GetFileDescriptorProto() [][]byte { - if x != nil { - return x.FileDescriptorProto - } - return nil -} - -// A list of extension numbers sent by the server answering -// all_extension_numbers_of_type request. -type ExtensionNumberResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Full name of the base type, including the package name. The format - // is . - BaseTypeName string `protobuf:"bytes,1,opt,name=base_type_name,json=baseTypeName,proto3" json:"base_type_name,omitempty"` - ExtensionNumber []int32 `protobuf:"varint,2,rep,packed,name=extension_number,json=extensionNumber,proto3" json:"extension_number,omitempty"` -} - -func (x *ExtensionNumberResponse) Reset() { - *x = ExtensionNumberResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExtensionNumberResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExtensionNumberResponse) ProtoMessage() {} - -func (x *ExtensionNumberResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExtensionNumberResponse.ProtoReflect.Descriptor instead. -func (*ExtensionNumberResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{4} -} - -func (x *ExtensionNumberResponse) GetBaseTypeName() string { - if x != nil { - return x.BaseTypeName - } - return "" -} - -func (x *ExtensionNumberResponse) GetExtensionNumber() []int32 { - if x != nil { - return x.ExtensionNumber - } - return nil -} - -// A list of ServiceResponse sent by the server answering list_services request. -type ListServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The information of each service may be expanded in the future, so we use - // ServiceResponse message to encapsulate it. - Service []*ServiceResponse `protobuf:"bytes,1,rep,name=service,proto3" json:"service,omitempty"` -} - -func (x *ListServiceResponse) Reset() { - *x = ListServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListServiceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListServiceResponse) ProtoMessage() {} - -func (x *ListServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListServiceResponse.ProtoReflect.Descriptor instead. -func (*ListServiceResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{5} -} - -func (x *ListServiceResponse) GetService() []*ServiceResponse { - if x != nil { - return x.Service - } - return nil -} - -// The information of a single service used by ListServiceResponse to answer -// list_services request. -type ServiceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Full name of a registered service, including its package name. The format - // is . - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *ServiceResponse) Reset() { - *x = ServiceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceResponse) ProtoMessage() {} - -func (x *ServiceResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceResponse.ProtoReflect.Descriptor instead. -func (*ServiceResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{6} -} - -func (x *ServiceResponse) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// The error code and error message sent by the server when an error occurs. -type ErrorResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // This field uses the error codes defined in grpc::StatusCode. - ErrorCode int32 `protobuf:"varint,1,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` - ErrorMessage string `protobuf:"bytes,2,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` -} - -func (x *ErrorResponse) Reset() { - *x = ErrorResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ErrorResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ErrorResponse) ProtoMessage() {} - -func (x *ErrorResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_reflection_v1_reflection_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ErrorResponse.ProtoReflect.Descriptor instead. -func (*ErrorResponse) Descriptor() ([]byte, []int) { - return file_grpc_reflection_v1_reflection_proto_rawDescGZIP(), []int{7} -} - -func (x *ErrorResponse) GetErrorCode() int32 { - if x != nil { - return x.ErrorCode - } - return 0 -} - -func (x *ErrorResponse) GetErrorMessage() string { - if x != nil { - return x.ErrorMessage - } - return "" -} - -var File_grpc_reflection_v1_reflection_proto protoreflect.FileDescriptor - -var file_grpc_reflection_v1_reflection_proto_rawDesc = []byte{ - 0x0a, 0x23, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x22, 0xf3, 0x02, 0x0a, 0x17, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x69, 0x6c, - 0x65, 0x5f, 0x62, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x79, 0x46, 0x69, 0x6c, - 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x14, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x62, 0x0a, - 0x19, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x17, 0x66, 0x69, 0x6c, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x42, 0x0a, 0x1d, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x6f, 0x66, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x19, 0x61, 0x6c, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x4f, - 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0d, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, - 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x42, 0x11, 0x0a, 0x0f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x66, 0x0a, 0x10, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, - 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x10, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xae, 0x04, 0x0a, 0x18, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x68, 0x6f, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x48, - 0x6f, 0x73, 0x74, 0x12, 0x56, 0x0a, 0x10, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x6f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x18, 0x66, - 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x16, 0x66, 0x69, 0x6c, - 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x72, 0x0a, 0x1e, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x6c, 0x6c, 0x45, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x48, 0x00, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x0e, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x12, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x16, 0x46, 0x69, 0x6c, 0x65, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0c, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x22, 0x54, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x25, 0x0a, 0x0f, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x53, 0x0a, 0x0d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x32, 0x89, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, - 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x75, 0x0a, 0x14, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x2b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x42, 0x66, 0x0a, 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x72, 0x65, 0x66, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x34, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, - 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_reflection_v1_reflection_proto_rawDescOnce sync.Once - file_grpc_reflection_v1_reflection_proto_rawDescData = file_grpc_reflection_v1_reflection_proto_rawDesc -) - -func file_grpc_reflection_v1_reflection_proto_rawDescGZIP() []byte { - file_grpc_reflection_v1_reflection_proto_rawDescOnce.Do(func() { - file_grpc_reflection_v1_reflection_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_reflection_v1_reflection_proto_rawDescData) - }) - return file_grpc_reflection_v1_reflection_proto_rawDescData -} - -var file_grpc_reflection_v1_reflection_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_grpc_reflection_v1_reflection_proto_goTypes = []interface{}{ - (*ServerReflectionRequest)(nil), // 0: grpc.reflection.v1.ServerReflectionRequest - (*ExtensionRequest)(nil), // 1: grpc.reflection.v1.ExtensionRequest - (*ServerReflectionResponse)(nil), // 2: grpc.reflection.v1.ServerReflectionResponse - (*FileDescriptorResponse)(nil), // 3: grpc.reflection.v1.FileDescriptorResponse - (*ExtensionNumberResponse)(nil), // 4: grpc.reflection.v1.ExtensionNumberResponse - (*ListServiceResponse)(nil), // 5: grpc.reflection.v1.ListServiceResponse - (*ServiceResponse)(nil), // 6: grpc.reflection.v1.ServiceResponse - (*ErrorResponse)(nil), // 7: grpc.reflection.v1.ErrorResponse -} -var file_grpc_reflection_v1_reflection_proto_depIdxs = []int32{ - 1, // 0: grpc.reflection.v1.ServerReflectionRequest.file_containing_extension:type_name -> grpc.reflection.v1.ExtensionRequest - 0, // 1: grpc.reflection.v1.ServerReflectionResponse.original_request:type_name -> grpc.reflection.v1.ServerReflectionRequest - 3, // 2: grpc.reflection.v1.ServerReflectionResponse.file_descriptor_response:type_name -> grpc.reflection.v1.FileDescriptorResponse - 4, // 3: grpc.reflection.v1.ServerReflectionResponse.all_extension_numbers_response:type_name -> grpc.reflection.v1.ExtensionNumberResponse - 5, // 4: grpc.reflection.v1.ServerReflectionResponse.list_services_response:type_name -> grpc.reflection.v1.ListServiceResponse - 7, // 5: grpc.reflection.v1.ServerReflectionResponse.error_response:type_name -> grpc.reflection.v1.ErrorResponse - 6, // 6: grpc.reflection.v1.ListServiceResponse.service:type_name -> grpc.reflection.v1.ServiceResponse - 0, // 7: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:input_type -> grpc.reflection.v1.ServerReflectionRequest - 2, // 8: grpc.reflection.v1.ServerReflection.ServerReflectionInfo:output_type -> grpc.reflection.v1.ServerReflectionResponse - 8, // [8:9] is the sub-list for method output_type - 7, // [7:8] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_grpc_reflection_v1_reflection_proto_init() } -func file_grpc_reflection_v1_reflection_proto_init() { - if File_grpc_reflection_v1_reflection_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_reflection_v1_reflection_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerReflectionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtensionRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerReflectionResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FileDescriptorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExtensionNumberResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ErrorResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_reflection_v1_reflection_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*ServerReflectionRequest_FileByFilename)(nil), - (*ServerReflectionRequest_FileContainingSymbol)(nil), - (*ServerReflectionRequest_FileContainingExtension)(nil), - (*ServerReflectionRequest_AllExtensionNumbersOfType)(nil), - (*ServerReflectionRequest_ListServices)(nil), - } - file_grpc_reflection_v1_reflection_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ServerReflectionResponse_FileDescriptorResponse)(nil), - (*ServerReflectionResponse_AllExtensionNumbersResponse)(nil), - (*ServerReflectionResponse_ListServicesResponse)(nil), - (*ServerReflectionResponse_ErrorResponse)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_reflection_v1_reflection_proto_rawDesc, - NumEnums: 0, - NumMessages: 8, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_reflection_v1_reflection_proto_goTypes, - DependencyIndexes: file_grpc_reflection_v1_reflection_proto_depIdxs, - MessageInfos: file_grpc_reflection_v1_reflection_proto_msgTypes, - }.Build() - File_grpc_reflection_v1_reflection_proto = out.File - file_grpc_reflection_v1_reflection_proto_rawDesc = nil - file_grpc_reflection_v1_reflection_proto_goTypes = nil - file_grpc_reflection_v1_reflection_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/service_config/service_config.pb.go b/gen/proto/grpc/service_config/service_config.pb.go deleted file mode 100644 index 05a3e29..0000000 --- a/gen/proto/grpc/service_config/service_config.pb.go +++ /dev/null @@ -1,3981 +0,0 @@ -// Copyright 2016 The gRPC Authors -// -// 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. - -// A ServiceConfig is supplied when a service is deployed. It mostly contains -// parameters for how clients that connect to the service should behave (for -// example, the load balancing policy to use to pick between service replicas). -// -// The configuration options provided here act as overrides to automatically -// chosen option values. Service owners should be conservative in specifying -// options as the system is likely to choose better values for these options in -// the vast majority of cases. In other words, please specify a configuration -// option only if you really have to, and avoid copy-paste inclusion of configs. -// -// Note that gRPC uses the service config in JSON form, not in protobuf -// form. This proto definition is intended to help document the schema but -// will not actually be used directly by gRPC. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/service_config/service_config.proto - -package testing - -import ( - code "google.golang.org/genproto/googleapis/rpc/code" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - structpb "google.golang.org/protobuf/types/known/structpb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type int32 - -const ( - XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_UNKNOWN XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type = 0 - XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_EDS XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type = 1 - XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_LOGICAL_DNS XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type = 2 -) - -// Enum value maps for XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type. -var ( - XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type_name = map[int32]string{ - 0: "UNKNOWN", - 1: "EDS", - 2: "LOGICAL_DNS", - } - XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type_value = map[string]int32{ - "UNKNOWN": 0, - "EDS": 1, - "LOGICAL_DNS": 2, - } -) - -func (x XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) Enum() *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type { - p := new(XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) - *p = x - return p -} - -func (x XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_service_config_service_config_proto_enumTypes[0].Descriptor() -} - -func (XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) Type() protoreflect.EnumType { - return &file_grpc_service_config_service_config_proto_enumTypes[0] -} - -func (x XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type.Descriptor instead. -func (XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type) EnumDescriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{10, 0, 0} -} - -// Load balancing policy. -// -// Note that load_balancing_policy is deprecated in favor of -// load_balancing_config; the former will be used only if the latter -// is unset. -// -// If no LB policy is configured here, then the default is pick_first. -// If the policy name is set via the client API, that value overrides -// the value specified here. -// -// If the deprecated load_balancing_policy field is used, note that if the -// resolver returns at least one balancer address (as opposed to backend -// addresses), gRPC will use grpclb (see -// https://github.com/grpc/grpc/blob/master/doc/load-balancing.md), -// regardless of what policy is configured here. However, if the resolver -// returns at least one backend address in addition to the balancer -// address(es), the client may fall back to the requested policy if it -// is unable to reach any of the grpclb load balancers. -type ServiceConfig_LoadBalancingPolicy int32 - -const ( - ServiceConfig_UNSPECIFIED ServiceConfig_LoadBalancingPolicy = 0 - ServiceConfig_ROUND_ROBIN ServiceConfig_LoadBalancingPolicy = 1 -) - -// Enum value maps for ServiceConfig_LoadBalancingPolicy. -var ( - ServiceConfig_LoadBalancingPolicy_name = map[int32]string{ - 0: "UNSPECIFIED", - 1: "ROUND_ROBIN", - } - ServiceConfig_LoadBalancingPolicy_value = map[string]int32{ - "UNSPECIFIED": 0, - "ROUND_ROBIN": 1, - } -) - -func (x ServiceConfig_LoadBalancingPolicy) Enum() *ServiceConfig_LoadBalancingPolicy { - p := new(ServiceConfig_LoadBalancingPolicy) - *p = x - return p -} - -func (x ServiceConfig_LoadBalancingPolicy) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceConfig_LoadBalancingPolicy) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_service_config_service_config_proto_enumTypes[1].Descriptor() -} - -func (ServiceConfig_LoadBalancingPolicy) Type() protoreflect.EnumType { - return &file_grpc_service_config_service_config_proto_enumTypes[1] -} - -func (x ServiceConfig_LoadBalancingPolicy) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceConfig_LoadBalancingPolicy.Descriptor instead. -func (ServiceConfig_LoadBalancingPolicy) EnumDescriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{17, 0} -} - -// Configuration for a method. -type MethodConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name []*MethodConfig_Name `protobuf:"bytes,1,rep,name=name,proto3" json:"name,omitempty"` - // Whether RPCs sent to this method should wait until the connection is - // ready by default. If false, the RPC will abort immediately if there is - // a transient failure connecting to the server. Otherwise, gRPC will - // attempt to connect until the deadline is exceeded. - // - // The value specified via the gRPC client API will override the value - // set here. However, note that setting the value in the client API will - // also affect transient errors encountered during name resolution, which - // cannot be caught by the value here, since the service config is - // obtained by the gRPC client via name resolution. - WaitForReady *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=wait_for_ready,json=waitForReady,proto3" json:"wait_for_ready,omitempty"` - // The default timeout in seconds for RPCs sent to this method. This can be - // overridden in code. If no reply is received in the specified amount of - // time, the request is aborted and a DEADLINE_EXCEEDED error status - // is returned to the caller. - // - // The actual deadline used will be the minimum of the value specified here - // and the value set by the application via the gRPC client API. If either - // one is not set, then the other will be used. If neither is set, then the - // request has no deadline. - Timeout *durationpb.Duration `protobuf:"bytes,3,opt,name=timeout,proto3" json:"timeout,omitempty"` - // The maximum allowed payload size for an individual request or object in a - // stream (client->server) in bytes. The size which is measured is the - // serialized payload after per-message compression (but before stream - // compression) in bytes. This applies both to streaming and non-streaming - // requests. - // - // The actual value used is the minimum of the value specified here and the - // value set by the application via the gRPC client API. If either one is - // not set, then the other will be used. If neither is set, then the - // built-in default is used. - // - // If a client attempts to send an object larger than this value, it will not - // be sent and the client will see a ClientError. - // Note that 0 is a valid value, meaning that the request message - // must be empty. - MaxRequestMessageBytes *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=max_request_message_bytes,json=maxRequestMessageBytes,proto3" json:"max_request_message_bytes,omitempty"` - // The maximum allowed payload size for an individual response or object in a - // stream (server->client) in bytes. The size which is measured is the - // serialized payload after per-message compression (but before stream - // compression) in bytes. This applies both to streaming and non-streaming - // requests. - // - // The actual value used is the minimum of the value specified here and the - // value set by the application via the gRPC client API. If either one is - // not set, then the other will be used. If neither is set, then the - // built-in default is used. - // - // If a server attempts to send an object larger than this value, it will not - // be sent, and a ServerError will be sent to the client instead. - // Note that 0 is a valid value, meaning that the response message - // must be empty. - MaxResponseMessageBytes *wrapperspb.UInt32Value `protobuf:"bytes,5,opt,name=max_response_message_bytes,json=maxResponseMessageBytes,proto3" json:"max_response_message_bytes,omitempty"` - // Only one of retry_policy or hedging_policy may be set. If neither is set, - // RPCs will not be retried or hedged. - // - // Types that are assignable to RetryOrHedgingPolicy: - // *MethodConfig_RetryPolicy_ - // *MethodConfig_HedgingPolicy_ - RetryOrHedgingPolicy isMethodConfig_RetryOrHedgingPolicy `protobuf_oneof:"retry_or_hedging_policy"` -} - -func (x *MethodConfig) Reset() { - *x = MethodConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MethodConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MethodConfig) ProtoMessage() {} - -func (x *MethodConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MethodConfig.ProtoReflect.Descriptor instead. -func (*MethodConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{0} -} - -func (x *MethodConfig) GetName() []*MethodConfig_Name { - if x != nil { - return x.Name - } - return nil -} - -func (x *MethodConfig) GetWaitForReady() *wrapperspb.BoolValue { - if x != nil { - return x.WaitForReady - } - return nil -} - -func (x *MethodConfig) GetTimeout() *durationpb.Duration { - if x != nil { - return x.Timeout - } - return nil -} - -func (x *MethodConfig) GetMaxRequestMessageBytes() *wrapperspb.UInt32Value { - if x != nil { - return x.MaxRequestMessageBytes - } - return nil -} - -func (x *MethodConfig) GetMaxResponseMessageBytes() *wrapperspb.UInt32Value { - if x != nil { - return x.MaxResponseMessageBytes - } - return nil -} - -func (m *MethodConfig) GetRetryOrHedgingPolicy() isMethodConfig_RetryOrHedgingPolicy { - if m != nil { - return m.RetryOrHedgingPolicy - } - return nil -} - -func (x *MethodConfig) GetRetryPolicy() *MethodConfig_RetryPolicy { - if x, ok := x.GetRetryOrHedgingPolicy().(*MethodConfig_RetryPolicy_); ok { - return x.RetryPolicy - } - return nil -} - -func (x *MethodConfig) GetHedgingPolicy() *MethodConfig_HedgingPolicy { - if x, ok := x.GetRetryOrHedgingPolicy().(*MethodConfig_HedgingPolicy_); ok { - return x.HedgingPolicy - } - return nil -} - -type isMethodConfig_RetryOrHedgingPolicy interface { - isMethodConfig_RetryOrHedgingPolicy() -} - -type MethodConfig_RetryPolicy_ struct { - RetryPolicy *MethodConfig_RetryPolicy `protobuf:"bytes,6,opt,name=retry_policy,json=retryPolicy,proto3,oneof"` -} - -type MethodConfig_HedgingPolicy_ struct { - HedgingPolicy *MethodConfig_HedgingPolicy `protobuf:"bytes,7,opt,name=hedging_policy,json=hedgingPolicy,proto3,oneof"` -} - -func (*MethodConfig_RetryPolicy_) isMethodConfig_RetryOrHedgingPolicy() {} - -func (*MethodConfig_HedgingPolicy_) isMethodConfig_RetryOrHedgingPolicy() {} - -// Configuration for pick_first LB policy. -type PickFirstConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *PickFirstConfig) Reset() { - *x = PickFirstConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PickFirstConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PickFirstConfig) ProtoMessage() {} - -func (x *PickFirstConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PickFirstConfig.ProtoReflect.Descriptor instead. -func (*PickFirstConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{1} -} - -// Configuration for round_robin LB policy. -type RoundRobinConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *RoundRobinConfig) Reset() { - *x = RoundRobinConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RoundRobinConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RoundRobinConfig) ProtoMessage() {} - -func (x *RoundRobinConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RoundRobinConfig.ProtoReflect.Descriptor instead. -func (*RoundRobinConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{2} -} - -// Configuration for outlier_detection LB policy -type OutlierDetectionLoadBalancingConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The time interval between ejection analysis sweeps. This can result in - // both new ejections as well as addresses being returned to service. Defaults - // to 10000ms or 10s. - Interval *durationpb.Duration `protobuf:"bytes,1,opt,name=interval,proto3" json:"interval,omitempty"` - // The base time that as address is ejected for. The real time is equal to the - // base time multiplied by the number of times the address has been ejected. - // Defaults to 30000ms or 30s. - BaseEjectionTime *durationpb.Duration `protobuf:"bytes,2,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"` - // The maximum time that an address is ejected for. If not specified, the default value (300000ms or 300s) or - // the base_ejection_time value is applied, whatever is larger. - MaxEjectionTime *durationpb.Duration `protobuf:"bytes,3,opt,name=max_ejection_time,json=maxEjectionTime,proto3" json:"max_ejection_time,omitempty"` - // The maximum % of an address list that can be ejected due to outlier - // detection. Defaults to 10% but will eject at least one address regardless of the value. - MaxEjectionPercent *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"` - // If set, success rate ejections will be performed - SuccessRateEjection *OutlierDetectionLoadBalancingConfig_SuccessRateEjection `protobuf:"bytes,5,opt,name=success_rate_ejection,json=successRateEjection,proto3" json:"success_rate_ejection,omitempty"` - // If set, failure rate ejections will be performed - FailurePercentageEjection *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection `protobuf:"bytes,6,opt,name=failure_percentage_ejection,json=failurePercentageEjection,proto3" json:"failure_percentage_ejection,omitempty"` - // The config for the child policy - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,13,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` -} - -func (x *OutlierDetectionLoadBalancingConfig) Reset() { - *x = OutlierDetectionLoadBalancingConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OutlierDetectionLoadBalancingConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OutlierDetectionLoadBalancingConfig) ProtoMessage() {} - -func (x *OutlierDetectionLoadBalancingConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OutlierDetectionLoadBalancingConfig.ProtoReflect.Descriptor instead. -func (*OutlierDetectionLoadBalancingConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{3} -} - -func (x *OutlierDetectionLoadBalancingConfig) GetInterval() *durationpb.Duration { - if x != nil { - return x.Interval - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetBaseEjectionTime() *durationpb.Duration { - if x != nil { - return x.BaseEjectionTime - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetMaxEjectionTime() *durationpb.Duration { - if x != nil { - return x.MaxEjectionTime - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetMaxEjectionPercent() *wrapperspb.UInt32Value { - if x != nil { - return x.MaxEjectionPercent - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetSuccessRateEjection() *OutlierDetectionLoadBalancingConfig_SuccessRateEjection { - if x != nil { - return x.SuccessRateEjection - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetFailurePercentageEjection() *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection { - if x != nil { - return x.FailurePercentageEjection - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -// Configuration for grpclb LB policy. -type GrpcLbConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. What LB policy to use for routing between the backend - // addresses. If unset, defaults to round_robin. - // Currently, the only supported values are round_robin and pick_first. - // Note that this will be used both in balancer mode and in fallback mode. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,1,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` - // Optional. If specified, overrides the name of the service to be sent to - // the balancer. - ServiceName string `protobuf:"bytes,2,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` - // Optional. The timeout in seconds for receiving the server list from the LB - // server. Defaults to 10s. - InitialFallbackTimeout *durationpb.Duration `protobuf:"bytes,3,opt,name=initial_fallback_timeout,json=initialFallbackTimeout,proto3" json:"initial_fallback_timeout,omitempty"` -} - -func (x *GrpcLbConfig) Reset() { - *x = GrpcLbConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GrpcLbConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GrpcLbConfig) ProtoMessage() {} - -func (x *GrpcLbConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GrpcLbConfig.ProtoReflect.Descriptor instead. -func (*GrpcLbConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{4} -} - -func (x *GrpcLbConfig) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -func (x *GrpcLbConfig) GetServiceName() string { - if x != nil { - return x.ServiceName - } - return "" -} - -func (x *GrpcLbConfig) GetInitialFallbackTimeout() *durationpb.Duration { - if x != nil { - return x.InitialFallbackTimeout - } - return nil -} - -// Configuration for priority LB policy. -type PriorityLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Children map[string]*PriorityLoadBalancingPolicyConfig_Child `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // A list of child names in decreasing priority order - // (i.e., first element is the highest priority). - Priorities []string `protobuf:"bytes,2,rep,name=priorities,proto3" json:"priorities,omitempty"` -} - -func (x *PriorityLoadBalancingPolicyConfig) Reset() { - *x = PriorityLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PriorityLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PriorityLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *PriorityLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PriorityLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*PriorityLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{5} -} - -func (x *PriorityLoadBalancingPolicyConfig) GetChildren() map[string]*PriorityLoadBalancingPolicyConfig_Child { - if x != nil { - return x.Children - } - return nil -} - -func (x *PriorityLoadBalancingPolicyConfig) GetPriorities() []string { - if x != nil { - return x.Priorities - } - return nil -} - -// Configuration for weighted_target LB policy. -type WeightedTargetLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Targets map[string]*WeightedTargetLoadBalancingPolicyConfig_Target `protobuf:"bytes,1,rep,name=targets,proto3" json:"targets,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *WeightedTargetLoadBalancingPolicyConfig) Reset() { - *x = WeightedTargetLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WeightedTargetLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WeightedTargetLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *WeightedTargetLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WeightedTargetLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*WeightedTargetLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{6} -} - -func (x *WeightedTargetLoadBalancingPolicyConfig) GetTargets() map[string]*WeightedTargetLoadBalancingPolicyConfig_Target { - if x != nil { - return x.Targets - } - return nil -} - -// Configuration for xds_cluster_manager_experimental LB policy. -type XdsClusterManagerLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Children map[string]*XdsClusterManagerLoadBalancingPolicyConfig_Child `protobuf:"bytes,1,rep,name=children,proto3" json:"children,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig) Reset() { - *x = XdsClusterManagerLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterManagerLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterManagerLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*XdsClusterManagerLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{7} -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig) GetChildren() map[string]*XdsClusterManagerLoadBalancingPolicyConfig_Child { - if x != nil { - return x.Children - } - return nil -} - -// Configuration for the cds LB policy. -type CdsConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` // Required. -} - -func (x *CdsConfig) Reset() { - *x = CdsConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CdsConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CdsConfig) ProtoMessage() {} - -func (x *CdsConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CdsConfig.ProtoReflect.Descriptor instead. -func (*CdsConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{8} -} - -func (x *CdsConfig) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -// Represents an xDS server. -type XdsServer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServerUri string `protobuf:"bytes,1,opt,name=server_uri,proto3" json:"server_uri,omitempty"` // Required. - // A list of channel creds to use. The first supported type will be used. - ChannelCreds []*XdsServer_ChannelCredentials `protobuf:"bytes,2,rep,name=channel_creds,proto3" json:"channel_creds,omitempty"` - // A repeated list of server features. - ServerFeatures []*structpb.Value `protobuf:"bytes,3,rep,name=server_features,proto3" json:"server_features,omitempty"` -} - -func (x *XdsServer) Reset() { - *x = XdsServer{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsServer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsServer) ProtoMessage() {} - -func (x *XdsServer) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsServer.ProtoReflect.Descriptor instead. -func (*XdsServer) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{9} -} - -func (x *XdsServer) GetServerUri() string { - if x != nil { - return x.ServerUri - } - return "" -} - -func (x *XdsServer) GetChannelCreds() []*XdsServer_ChannelCredentials { - if x != nil { - return x.ChannelCreds - } - return nil -} - -func (x *XdsServer) GetServerFeatures() []*structpb.Value { - if x != nil { - return x.ServerFeatures - } - return nil -} - -// Configuration for xds_cluster_resolver LB policy. -type XdsClusterResolverLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Ordered list of discovery mechanisms. - // Must have at least one element. - // Results from each discovery mechanism are concatenated together in - // successive priorities. - DiscoveryMechanisms []*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism `protobuf:"bytes,1,rep,name=discovery_mechanisms,json=discoveryMechanisms,proto3" json:"discovery_mechanisms,omitempty"` - // xDS LB policy. - // This represents the xDS LB policy, which does not necessarily map - // one-to-one to a gRPC LB policy. Currently, the following policies - // are supported: - // - "ROUND_ROBIN" (config is empty) - // - "RING_HASH" (config is a RingHashLoadBalancingConfig) - XdsLbPolicy []*LoadBalancingConfig `protobuf:"bytes,2,rep,name=xds_lb_policy,json=xdsLbPolicy,proto3" json:"xds_lb_policy,omitempty"` -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig) Reset() { - *x = XdsClusterResolverLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterResolverLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterResolverLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*XdsClusterResolverLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{10} -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig) GetDiscoveryMechanisms() []*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism { - if x != nil { - return x.DiscoveryMechanisms - } - return nil -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig) GetXdsLbPolicy() []*LoadBalancingConfig { - if x != nil { - return x.XdsLbPolicy - } - return nil -} - -// Configuration for xds_cluster_impl LB policy. -type XdsClusterImplLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cluster name. Required. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // EDS service name. - // Not set if cluster is not an EDS cluster or if it does not - // specify an EDS service name. - EdsServiceName string `protobuf:"bytes,2,opt,name=eds_service_name,json=edsServiceName,proto3" json:"eds_service_name,omitempty"` - // Server to send load reports to. - // If unset, no load reporting is done. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - // DEPRECATED: Use new lrs_load_reporting_server field instead. - // - // Deprecated: Do not use. - LrsLoadReportingServerName *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=lrs_load_reporting_server_name,json=lrsLoadReportingServerName,proto3" json:"lrs_load_reporting_server_name,omitempty"` - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // Supercedes lrs_load_reporting_server_name field. - LrsLoadReportingServer *XdsServer `protobuf:"bytes,7,opt,name=lrs_load_reporting_server,json=lrsLoadReportingServer,proto3" json:"lrs_load_reporting_server,omitempty"` - // Maximum number of outstanding requests can be made to the upstream cluster. - // Default is 1024. - MaxConcurrentRequests *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=max_concurrent_requests,json=maxConcurrentRequests,proto3" json:"max_concurrent_requests,omitempty"` - DropCategories []*XdsClusterImplLoadBalancingPolicyConfig_DropCategory `protobuf:"bytes,5,rep,name=drop_categories,json=dropCategories,proto3" json:"drop_categories,omitempty"` - // Child policy. - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,6,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) Reset() { - *x = XdsClusterImplLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterImplLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterImplLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*XdsClusterImplLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{11} -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetEdsServiceName() string { - if x != nil { - return x.EdsServiceName - } - return "" -} - -// Deprecated: Do not use. -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetLrsLoadReportingServerName() *wrapperspb.StringValue { - if x != nil { - return x.LrsLoadReportingServerName - } - return nil -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetLrsLoadReportingServer() *XdsServer { - if x != nil { - return x.LrsLoadReportingServer - } - return nil -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetMaxConcurrentRequests() *wrapperspb.UInt32Value { - if x != nil { - return x.MaxConcurrentRequests - } - return nil -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetDropCategories() []*XdsClusterImplLoadBalancingPolicyConfig_DropCategory { - if x != nil { - return x.DropCategories - } - return nil -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -// Configuration for eds LB policy. -type EdsLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cluster name. Required. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - EdsServiceName string `protobuf:"bytes,2,opt,name=eds_service_name,json=edsServiceName,proto3" json:"eds_service_name,omitempty"` - // Server to send load reports to. - // If unset, no load reporting is done. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - LrsLoadReportingServerName *wrapperspb.StringValue `protobuf:"bytes,3,opt,name=lrs_load_reporting_server_name,json=lrsLoadReportingServerName,proto3" json:"lrs_load_reporting_server_name,omitempty"` - // Locality-picking policy. - // This policy's config is expected to be in the format used - // by the weighted_target policy. Note that the config should include - // an empty value for the "targets" field; that empty value will be - // replaced by one that is dynamically generated based on the EDS data. - // Optional; defaults to "weighted_target". - LocalityPickingPolicy []*LoadBalancingConfig `protobuf:"bytes,4,rep,name=locality_picking_policy,json=localityPickingPolicy,proto3" json:"locality_picking_policy,omitempty"` - // Endpoint-picking policy. - // This will be configured as the policy for each child in the - // locality-policy's config. - // Optional; defaults to "round_robin". - EndpointPickingPolicy []*LoadBalancingConfig `protobuf:"bytes,5,rep,name=endpoint_picking_policy,json=endpointPickingPolicy,proto3" json:"endpoint_picking_policy,omitempty"` -} - -func (x *EdsLoadBalancingPolicyConfig) Reset() { - *x = EdsLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EdsLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EdsLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *EdsLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EdsLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*EdsLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{12} -} - -func (x *EdsLoadBalancingPolicyConfig) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *EdsLoadBalancingPolicyConfig) GetEdsServiceName() string { - if x != nil { - return x.EdsServiceName - } - return "" -} - -func (x *EdsLoadBalancingPolicyConfig) GetLrsLoadReportingServerName() *wrapperspb.StringValue { - if x != nil { - return x.LrsLoadReportingServerName - } - return nil -} - -func (x *EdsLoadBalancingPolicyConfig) GetLocalityPickingPolicy() []*LoadBalancingConfig { - if x != nil { - return x.LocalityPickingPolicy - } - return nil -} - -func (x *EdsLoadBalancingPolicyConfig) GetEndpointPickingPolicy() []*LoadBalancingConfig { - if x != nil { - return x.EndpointPickingPolicy - } - return nil -} - -// Configuration for ring_hash LB policy. -type RingHashLoadBalancingConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MinRingSize uint64 `protobuf:"varint,1,opt,name=min_ring_size,json=minRingSize,proto3" json:"min_ring_size,omitempty"` - MaxRingSize uint64 `protobuf:"varint,2,opt,name=max_ring_size,json=maxRingSize,proto3" json:"max_ring_size,omitempty"` -} - -func (x *RingHashLoadBalancingConfig) Reset() { - *x = RingHashLoadBalancingConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RingHashLoadBalancingConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RingHashLoadBalancingConfig) ProtoMessage() {} - -func (x *RingHashLoadBalancingConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RingHashLoadBalancingConfig.ProtoReflect.Descriptor instead. -func (*RingHashLoadBalancingConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{13} -} - -func (x *RingHashLoadBalancingConfig) GetMinRingSize() uint64 { - if x != nil { - return x.MinRingSize - } - return 0 -} - -func (x *RingHashLoadBalancingConfig) GetMaxRingSize() uint64 { - if x != nil { - return x.MaxRingSize - } - return 0 -} - -// Configuration for lrs LB policy. -type LrsLoadBalancingPolicyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cluster name. Required. - ClusterName string `protobuf:"bytes,1,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - EdsServiceName string `protobuf:"bytes,2,opt,name=eds_service_name,json=edsServiceName,proto3" json:"eds_service_name,omitempty"` - // Server to send load reports to. Required. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - LrsLoadReportingServerName string `protobuf:"bytes,3,opt,name=lrs_load_reporting_server_name,json=lrsLoadReportingServerName,proto3" json:"lrs_load_reporting_server_name,omitempty"` - Locality *LrsLoadBalancingPolicyConfig_Locality `protobuf:"bytes,4,opt,name=locality,proto3" json:"locality,omitempty"` - // Endpoint-picking policy. - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,5,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` -} - -func (x *LrsLoadBalancingPolicyConfig) Reset() { - *x = LrsLoadBalancingPolicyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LrsLoadBalancingPolicyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LrsLoadBalancingPolicyConfig) ProtoMessage() {} - -func (x *LrsLoadBalancingPolicyConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LrsLoadBalancingPolicyConfig.ProtoReflect.Descriptor instead. -func (*LrsLoadBalancingPolicyConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{14} -} - -func (x *LrsLoadBalancingPolicyConfig) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - -func (x *LrsLoadBalancingPolicyConfig) GetEdsServiceName() string { - if x != nil { - return x.EdsServiceName - } - return "" -} - -func (x *LrsLoadBalancingPolicyConfig) GetLrsLoadReportingServerName() string { - if x != nil { - return x.LrsLoadReportingServerName - } - return "" -} - -func (x *LrsLoadBalancingPolicyConfig) GetLocality() *LrsLoadBalancingPolicyConfig_Locality { - if x != nil { - return x.Locality - } - return nil -} - -func (x *LrsLoadBalancingPolicyConfig) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -// Configuration for xds LB policy. -type XdsConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of balancer to connect to. - // - // Deprecated: Do not use. - BalancerName string `protobuf:"bytes,1,opt,name=balancer_name,json=balancerName,proto3" json:"balancer_name,omitempty"` - // Optional. What LB policy to use for intra-locality routing. - // If unset, will use whatever algorithm is specified by the balancer. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,2,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` - // Optional. What LB policy to use in fallback mode. If not - // specified, defaults to round_robin. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - FallbackPolicy []*LoadBalancingConfig `protobuf:"bytes,3,rep,name=fallback_policy,json=fallbackPolicy,proto3" json:"fallback_policy,omitempty"` - // Optional. Name to use in EDS query. If not present, defaults to - // the server name from the target URI. - EdsServiceName string `protobuf:"bytes,4,opt,name=eds_service_name,json=edsServiceName,proto3" json:"eds_service_name,omitempty"` - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // If set to the empty string, load reporting will be sent to the same - // server that we obtained CDS data from. - LrsLoadReportingServerName *wrapperspb.StringValue `protobuf:"bytes,5,opt,name=lrs_load_reporting_server_name,json=lrsLoadReportingServerName,proto3" json:"lrs_load_reporting_server_name,omitempty"` -} - -func (x *XdsConfig) Reset() { - *x = XdsConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsConfig) ProtoMessage() {} - -func (x *XdsConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsConfig.ProtoReflect.Descriptor instead. -func (*XdsConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{15} -} - -// Deprecated: Do not use. -func (x *XdsConfig) GetBalancerName() string { - if x != nil { - return x.BalancerName - } - return "" -} - -func (x *XdsConfig) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -func (x *XdsConfig) GetFallbackPolicy() []*LoadBalancingConfig { - if x != nil { - return x.FallbackPolicy - } - return nil -} - -func (x *XdsConfig) GetEdsServiceName() string { - if x != nil { - return x.EdsServiceName - } - return "" -} - -func (x *XdsConfig) GetLrsLoadReportingServerName() *wrapperspb.StringValue { - if x != nil { - return x.LrsLoadReportingServerName - } - return nil -} - -// Selects LB policy and provides corresponding configuration. -// -// In general, all instances of this field should be repeated. Clients will -// iterate through the list in order and stop at the first policy that they -// support. This allows the service config to specify custom policies that may -// not be known to all clients. -// -// - If the config for the first supported policy is invalid, the whole service -// config is invalid. -// - If the list doesn't contain any supported policy, the whole service config -// is invalid. -type LoadBalancingConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Exactly one LB policy may be configured. - // - // Types that are assignable to Policy: - // *LoadBalancingConfig_PickFirst - // *LoadBalancingConfig_RoundRobin - // *LoadBalancingConfig_OutlierDetection - // *LoadBalancingConfig_Grpclb - // *LoadBalancingConfig_PriorityExperimental - // *LoadBalancingConfig_WeightedTargetExperimental - // *LoadBalancingConfig_XdsClusterManagerExperimental - // *LoadBalancingConfig_CdsExperimental - // *LoadBalancingConfig_XdsClusterResolverExperimental - // *LoadBalancingConfig_XdsClusterImplExperimental - // *LoadBalancingConfig_RingHashExperimental - // *LoadBalancingConfig_LrsExperimental - // *LoadBalancingConfig_EdsExperimental - // *LoadBalancingConfig_Xds - // *LoadBalancingConfig_XdsExperimental - Policy isLoadBalancingConfig_Policy `protobuf_oneof:"policy"` -} - -func (x *LoadBalancingConfig) Reset() { - *x = LoadBalancingConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancingConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancingConfig) ProtoMessage() {} - -func (x *LoadBalancingConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancingConfig.ProtoReflect.Descriptor instead. -func (*LoadBalancingConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{16} -} - -func (m *LoadBalancingConfig) GetPolicy() isLoadBalancingConfig_Policy { - if m != nil { - return m.Policy - } - return nil -} - -func (x *LoadBalancingConfig) GetPickFirst() *PickFirstConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_PickFirst); ok { - return x.PickFirst - } - return nil -} - -func (x *LoadBalancingConfig) GetRoundRobin() *RoundRobinConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_RoundRobin); ok { - return x.RoundRobin - } - return nil -} - -func (x *LoadBalancingConfig) GetOutlierDetection() *OutlierDetectionLoadBalancingConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_OutlierDetection); ok { - return x.OutlierDetection - } - return nil -} - -func (x *LoadBalancingConfig) GetGrpclb() *GrpcLbConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_Grpclb); ok { - return x.Grpclb - } - return nil -} - -func (x *LoadBalancingConfig) GetPriorityExperimental() *PriorityLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_PriorityExperimental); ok { - return x.PriorityExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetWeightedTargetExperimental() *WeightedTargetLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_WeightedTargetExperimental); ok { - return x.WeightedTargetExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetXdsClusterManagerExperimental() *XdsClusterManagerLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_XdsClusterManagerExperimental); ok { - return x.XdsClusterManagerExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetCdsExperimental() *CdsConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_CdsExperimental); ok { - return x.CdsExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetXdsClusterResolverExperimental() *XdsClusterResolverLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_XdsClusterResolverExperimental); ok { - return x.XdsClusterResolverExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetXdsClusterImplExperimental() *XdsClusterImplLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_XdsClusterImplExperimental); ok { - return x.XdsClusterImplExperimental - } - return nil -} - -func (x *LoadBalancingConfig) GetRingHashExperimental() *RingHashLoadBalancingConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_RingHashExperimental); ok { - return x.RingHashExperimental - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancingConfig) GetLrsExperimental() *LrsLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_LrsExperimental); ok { - return x.LrsExperimental - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancingConfig) GetEdsExperimental() *EdsLoadBalancingPolicyConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_EdsExperimental); ok { - return x.EdsExperimental - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancingConfig) GetXds() *XdsConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_Xds); ok { - return x.Xds - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancingConfig) GetXdsExperimental() *XdsConfig { - if x, ok := x.GetPolicy().(*LoadBalancingConfig_XdsExperimental); ok { - return x.XdsExperimental - } - return nil -} - -type isLoadBalancingConfig_Policy interface { - isLoadBalancingConfig_Policy() -} - -type LoadBalancingConfig_PickFirst struct { - PickFirst *PickFirstConfig `protobuf:"bytes,4,opt,name=pick_first,proto3,oneof"` -} - -type LoadBalancingConfig_RoundRobin struct { - RoundRobin *RoundRobinConfig `protobuf:"bytes,1,opt,name=round_robin,proto3,oneof"` -} - -type LoadBalancingConfig_OutlierDetection struct { - OutlierDetection *OutlierDetectionLoadBalancingConfig `protobuf:"bytes,15,opt,name=outlier_detection,proto3,oneof"` -} - -type LoadBalancingConfig_Grpclb struct { - // gRPC lookaside load balancing. - // This will eventually be deprecated by the new xDS-based local - // balancing policy. - Grpclb *GrpcLbConfig `protobuf:"bytes,3,opt,name=grpclb,proto3,oneof"` -} - -type LoadBalancingConfig_PriorityExperimental struct { - PriorityExperimental *PriorityLoadBalancingPolicyConfig `protobuf:"bytes,9,opt,name=priority_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_WeightedTargetExperimental struct { - WeightedTargetExperimental *WeightedTargetLoadBalancingPolicyConfig `protobuf:"bytes,10,opt,name=weighted_target_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_XdsClusterManagerExperimental struct { - // xDS-based load balancing. - XdsClusterManagerExperimental *XdsClusterManagerLoadBalancingPolicyConfig `protobuf:"bytes,14,opt,name=xds_cluster_manager_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_CdsExperimental struct { - CdsExperimental *CdsConfig `protobuf:"bytes,6,opt,name=cds_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_XdsClusterResolverExperimental struct { - XdsClusterResolverExperimental *XdsClusterResolverLoadBalancingPolicyConfig `protobuf:"bytes,11,opt,name=xds_cluster_resolver_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_XdsClusterImplExperimental struct { - XdsClusterImplExperimental *XdsClusterImplLoadBalancingPolicyConfig `protobuf:"bytes,12,opt,name=xds_cluster_impl_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_RingHashExperimental struct { - RingHashExperimental *RingHashLoadBalancingConfig `protobuf:"bytes,13,opt,name=ring_hash_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_LrsExperimental struct { - // Deprecated xDS-related policies. - // - // Deprecated: Do not use. - LrsExperimental *LrsLoadBalancingPolicyConfig `protobuf:"bytes,8,opt,name=lrs_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_EdsExperimental struct { - // Deprecated: Do not use. - EdsExperimental *EdsLoadBalancingPolicyConfig `protobuf:"bytes,7,opt,name=eds_experimental,proto3,oneof"` -} - -type LoadBalancingConfig_Xds struct { - // Deprecated: Do not use. - Xds *XdsConfig `protobuf:"bytes,2,opt,name=xds,proto3,oneof"` -} - -type LoadBalancingConfig_XdsExperimental struct { - // Deprecated: Do not use. - XdsExperimental *XdsConfig `protobuf:"bytes,5,opt,name=xds_experimental,proto3,oneof"` -} - -func (*LoadBalancingConfig_PickFirst) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_RoundRobin) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_OutlierDetection) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_Grpclb) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_PriorityExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_WeightedTargetExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_XdsClusterManagerExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_CdsExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_XdsClusterResolverExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_XdsClusterImplExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_RingHashExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_LrsExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_EdsExperimental) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_Xds) isLoadBalancingConfig_Policy() {} - -func (*LoadBalancingConfig_XdsExperimental) isLoadBalancingConfig_Policy() {} - -// A ServiceConfig represents information about a service but is not specific to -// any name resolver. -type ServiceConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Deprecated: Do not use. - LoadBalancingPolicy ServiceConfig_LoadBalancingPolicy `protobuf:"varint,1,opt,name=load_balancing_policy,json=loadBalancingPolicy,proto3,enum=grpc.service_config.ServiceConfig_LoadBalancingPolicy" json:"load_balancing_policy,omitempty"` - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. If none - // are supported, the service config is considered invalid. - LoadBalancingConfig []*LoadBalancingConfig `protobuf:"bytes,4,rep,name=load_balancing_config,json=loadBalancingConfig,proto3" json:"load_balancing_config,omitempty"` - // Per-method configuration. - MethodConfig []*MethodConfig `protobuf:"bytes,2,rep,name=method_config,json=methodConfig,proto3" json:"method_config,omitempty"` - RetryThrottling *ServiceConfig_RetryThrottlingPolicy `protobuf:"bytes,3,opt,name=retry_throttling,json=retryThrottling,proto3" json:"retry_throttling,omitempty"` - HealthCheckConfig *ServiceConfig_HealthCheckConfig `protobuf:"bytes,5,opt,name=health_check_config,json=healthCheckConfig,proto3" json:"health_check_config,omitempty"` -} - -func (x *ServiceConfig) Reset() { - *x = ServiceConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceConfig) ProtoMessage() {} - -func (x *ServiceConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceConfig.ProtoReflect.Descriptor instead. -func (*ServiceConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{17} -} - -// Deprecated: Do not use. -func (x *ServiceConfig) GetLoadBalancingPolicy() ServiceConfig_LoadBalancingPolicy { - if x != nil { - return x.LoadBalancingPolicy - } - return ServiceConfig_UNSPECIFIED -} - -func (x *ServiceConfig) GetLoadBalancingConfig() []*LoadBalancingConfig { - if x != nil { - return x.LoadBalancingConfig - } - return nil -} - -func (x *ServiceConfig) GetMethodConfig() []*MethodConfig { - if x != nil { - return x.MethodConfig - } - return nil -} - -func (x *ServiceConfig) GetRetryThrottling() *ServiceConfig_RetryThrottlingPolicy { - if x != nil { - return x.RetryThrottling - } - return nil -} - -func (x *ServiceConfig) GetHealthCheckConfig() *ServiceConfig_HealthCheckConfig { - if x != nil { - return x.HealthCheckConfig - } - return nil -} - -// The names of the methods to which this configuration applies. -// - MethodConfig without names (empty list) will be skipped. -// - Each name entry must be unique across the entire ServiceConfig. -// - If the 'method' field is empty, this MethodConfig specifies the defaults -// for all methods for the specified service. -// - If the 'service' field is empty, the 'method' field must be empty, and -// this MethodConfig specifies the default for all methods (it's the default -// config). -// -// When determining which MethodConfig to use for a given RPC, the most -// specific match wins. For example, let's say that the service config -// contains the following MethodConfig entries: -// -// method_config { name { } ... } -// method_config { name { service: "MyService" } ... } -// method_config { name { service: "MyService" method: "Foo" } ... } -// -// MyService/Foo will use the third entry, because it exactly matches the -// service and method name. MyService/Bar will use the second entry, because -// it provides the default for all methods of MyService. AnotherService/Baz -// will use the first entry, because it doesn't match the other two. -// -// In JSON representation, value "", value `null`, and not present are the -// same. The following are the same Name: -// - { "service": "s" } -// - { "service": "s", "method": null } -// - { "service": "s", "method": "" } -type MethodConfig_Name struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` // Required. Includes proto package name. - Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` -} - -func (x *MethodConfig_Name) Reset() { - *x = MethodConfig_Name{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MethodConfig_Name) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MethodConfig_Name) ProtoMessage() {} - -func (x *MethodConfig_Name) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MethodConfig_Name.ProtoReflect.Descriptor instead. -func (*MethodConfig_Name) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *MethodConfig_Name) GetService() string { - if x != nil { - return x.Service - } - return "" -} - -func (x *MethodConfig_Name) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -// The retry policy for outgoing RPCs. -type MethodConfig_RetryPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The maximum number of RPC attempts, including the original attempt. - // - // This field is required and must be greater than 1. - // Any value greater than 5 will be treated as if it were 5. - MaxAttempts uint32 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` - // Exponential backoff parameters. The initial retry attempt will occur at - // random(0, initial_backoff). In general, the nth attempt will occur at - // random(0, - // min(initial_backoff*backoff_multiplier**(n-1), max_backoff)). - // Required. Must be greater than zero. - InitialBackoff *durationpb.Duration `protobuf:"bytes,2,opt,name=initial_backoff,json=initialBackoff,proto3" json:"initial_backoff,omitempty"` - // Required. Must be greater than zero. - MaxBackoff *durationpb.Duration `protobuf:"bytes,3,opt,name=max_backoff,json=maxBackoff,proto3" json:"max_backoff,omitempty"` - BackoffMultiplier float32 `protobuf:"fixed32,4,opt,name=backoff_multiplier,json=backoffMultiplier,proto3" json:"backoff_multiplier,omitempty"` // Required. Must be greater than zero. - // The set of status codes which may be retried. - // - // This field is required and must be non-empty. - RetryableStatusCodes []code.Code `protobuf:"varint,5,rep,packed,name=retryable_status_codes,json=retryableStatusCodes,proto3,enum=google.rpc.Code" json:"retryable_status_codes,omitempty"` -} - -func (x *MethodConfig_RetryPolicy) Reset() { - *x = MethodConfig_RetryPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MethodConfig_RetryPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MethodConfig_RetryPolicy) ProtoMessage() {} - -func (x *MethodConfig_RetryPolicy) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MethodConfig_RetryPolicy.ProtoReflect.Descriptor instead. -func (*MethodConfig_RetryPolicy) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *MethodConfig_RetryPolicy) GetMaxAttempts() uint32 { - if x != nil { - return x.MaxAttempts - } - return 0 -} - -func (x *MethodConfig_RetryPolicy) GetInitialBackoff() *durationpb.Duration { - if x != nil { - return x.InitialBackoff - } - return nil -} - -func (x *MethodConfig_RetryPolicy) GetMaxBackoff() *durationpb.Duration { - if x != nil { - return x.MaxBackoff - } - return nil -} - -func (x *MethodConfig_RetryPolicy) GetBackoffMultiplier() float32 { - if x != nil { - return x.BackoffMultiplier - } - return 0 -} - -func (x *MethodConfig_RetryPolicy) GetRetryableStatusCodes() []code.Code { - if x != nil { - return x.RetryableStatusCodes - } - return nil -} - -// The hedging policy for outgoing RPCs. Hedged RPCs may execute more than -// once on the server, so only idempotent methods should specify a hedging -// policy. -type MethodConfig_HedgingPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The hedging policy will send up to max_requests RPCs. - // This number represents the total number of all attempts, including - // the original attempt. - // - // This field is required and must be greater than 1. - // Any value greater than 5 will be treated as if it were 5. - MaxAttempts uint32 `protobuf:"varint,1,opt,name=max_attempts,json=maxAttempts,proto3" json:"max_attempts,omitempty"` - // The first RPC will be sent immediately, but the max_requests-1 subsequent - // hedged RPCs will be sent at intervals of every hedging_delay. Set this - // to 0 to immediately send all max_requests RPCs. - HedgingDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=hedging_delay,json=hedgingDelay,proto3" json:"hedging_delay,omitempty"` - // The set of status codes which indicate other hedged RPCs may still - // succeed. If a non-fatal status code is returned by the server, hedged - // RPCs will continue. Otherwise, outstanding requests will be canceled and - // the error returned to the client application layer. - // - // This field is optional. - NonFatalStatusCodes []code.Code `protobuf:"varint,3,rep,packed,name=non_fatal_status_codes,json=nonFatalStatusCodes,proto3,enum=google.rpc.Code" json:"non_fatal_status_codes,omitempty"` -} - -func (x *MethodConfig_HedgingPolicy) Reset() { - *x = MethodConfig_HedgingPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MethodConfig_HedgingPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MethodConfig_HedgingPolicy) ProtoMessage() {} - -func (x *MethodConfig_HedgingPolicy) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MethodConfig_HedgingPolicy.ProtoReflect.Descriptor instead. -func (*MethodConfig_HedgingPolicy) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{0, 2} -} - -func (x *MethodConfig_HedgingPolicy) GetMaxAttempts() uint32 { - if x != nil { - return x.MaxAttempts - } - return 0 -} - -func (x *MethodConfig_HedgingPolicy) GetHedgingDelay() *durationpb.Duration { - if x != nil { - return x.HedgingDelay - } - return nil -} - -func (x *MethodConfig_HedgingPolicy) GetNonFatalStatusCodes() []code.Code { - if x != nil { - return x.NonFatalStatusCodes - } - return nil -} - -// Parameters for the success rate ejection algorithm. -// This algorithm monitors the request success rate for all endpoints and -// ejects individual endpoints whose success rates are statistical outliers. -type OutlierDetectionLoadBalancingConfig_SuccessRateEjection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - StdevFactor *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=stdev_factor,json=stdevFactor,proto3" json:"stdev_factor,omitempty"` - // The % chance that an address 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. - EnforcementPercentage *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"` - // The number of addresses that must have enough request volume to - // detect success rate outliers. If the number of addresses is less than this - // setting, outlier detection via success rate statistics is not performed - // for any addresses. Defaults to 5. - MinimumHosts *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"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 address - // 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 address. Defaults to 100. - RequestVolume *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"` -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) Reset() { - *x = OutlierDetectionLoadBalancingConfig_SuccessRateEjection{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OutlierDetectionLoadBalancingConfig_SuccessRateEjection) ProtoMessage() {} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OutlierDetectionLoadBalancingConfig_SuccessRateEjection.ProtoReflect.Descriptor instead. -func (*OutlierDetectionLoadBalancingConfig_SuccessRateEjection) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) GetStdevFactor() *wrapperspb.UInt32Value { - if x != nil { - return x.StdevFactor - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) GetEnforcementPercentage() *wrapperspb.UInt32Value { - if x != nil { - return x.EnforcementPercentage - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) GetMinimumHosts() *wrapperspb.UInt32Value { - if x != nil { - return x.MinimumHosts - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_SuccessRateEjection) GetRequestVolume() *wrapperspb.UInt32Value { - if x != nil { - return x.RequestVolume - } - return nil -} - -// Parameters for the failure percentage algorithm. -// This algorithm ejects individual endpoints whose failure rate is greater than -// some threshold, independently of any other endpoint. -type OutlierDetectionLoadBalancingConfig_FailurePercentageEjection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The failure percentage to use when determining failure percentage-based outlier detection. If - // the failure percentage of a given address is greater than or equal to this value, it will be - // ejected. Defaults to 85. - Threshold *wrapperspb.UInt32Value `protobuf:"bytes,1,opt,name=threshold,proto3" json:"threshold,omitempty"` - // The % chance that an address 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 100. - EnforcementPercentage *wrapperspb.UInt32Value `protobuf:"bytes,2,opt,name=enforcement_percentage,json=enforcementPercentage,proto3" json:"enforcement_percentage,omitempty"` - // The minimum number of addresses in order to perform failure percentage-based ejection. - // If the total number of addresses is less than this value, failure percentage-based - // ejection will not be performed. Defaults to 5. - MinimumHosts *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=minimum_hosts,json=minimumHosts,proto3" json:"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 address. If the - // volume is lower than this setting, failure percentage-based ejection will not be performed for - // this host. Defaults to 50. - RequestVolume *wrapperspb.UInt32Value `protobuf:"bytes,4,opt,name=request_volume,json=requestVolume,proto3" json:"request_volume,omitempty"` -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) Reset() { - *x = OutlierDetectionLoadBalancingConfig_FailurePercentageEjection{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) ProtoMessage() {} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OutlierDetectionLoadBalancingConfig_FailurePercentageEjection.ProtoReflect.Descriptor instead. -func (*OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{3, 1} -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) GetThreshold() *wrapperspb.UInt32Value { - if x != nil { - return x.Threshold - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) GetEnforcementPercentage() *wrapperspb.UInt32Value { - if x != nil { - return x.EnforcementPercentage - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) GetMinimumHosts() *wrapperspb.UInt32Value { - if x != nil { - return x.MinimumHosts - } - return nil -} - -func (x *OutlierDetectionLoadBalancingConfig_FailurePercentageEjection) GetRequestVolume() *wrapperspb.UInt32Value { - if x != nil { - return x.RequestVolume - } - return nil -} - -// A map of name to child policy configuration. -// The names are used to allow the priority policy to update -// existing child policies instead of creating new ones every -// time it receives a config update. -type PriorityLoadBalancingPolicyConfig_Child struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Config []*LoadBalancingConfig `protobuf:"bytes,1,rep,name=config,proto3" json:"config,omitempty"` - // If true, will ignore reresolution requests from this child. - IgnoreReresolutionRequests bool `protobuf:"varint,2,opt,name=ignore_reresolution_requests,json=ignoreReresolutionRequests,proto3" json:"ignore_reresolution_requests,omitempty"` -} - -func (x *PriorityLoadBalancingPolicyConfig_Child) Reset() { - *x = PriorityLoadBalancingPolicyConfig_Child{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PriorityLoadBalancingPolicyConfig_Child) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PriorityLoadBalancingPolicyConfig_Child) ProtoMessage() {} - -func (x *PriorityLoadBalancingPolicyConfig_Child) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PriorityLoadBalancingPolicyConfig_Child.ProtoReflect.Descriptor instead. -func (*PriorityLoadBalancingPolicyConfig_Child) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{5, 0} -} - -func (x *PriorityLoadBalancingPolicyConfig_Child) GetConfig() []*LoadBalancingConfig { - if x != nil { - return x.Config - } - return nil -} - -func (x *PriorityLoadBalancingPolicyConfig_Child) GetIgnoreReresolutionRequests() bool { - if x != nil { - return x.IgnoreReresolutionRequests - } - return false -} - -type WeightedTargetLoadBalancingPolicyConfig_Target struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Weight uint32 `protobuf:"varint,1,opt,name=weight,proto3" json:"weight,omitempty"` - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,2,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` -} - -func (x *WeightedTargetLoadBalancingPolicyConfig_Target) Reset() { - *x = WeightedTargetLoadBalancingPolicyConfig_Target{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WeightedTargetLoadBalancingPolicyConfig_Target) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WeightedTargetLoadBalancingPolicyConfig_Target) ProtoMessage() {} - -func (x *WeightedTargetLoadBalancingPolicyConfig_Target) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WeightedTargetLoadBalancingPolicyConfig_Target.ProtoReflect.Descriptor instead. -func (*WeightedTargetLoadBalancingPolicyConfig_Target) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{6, 0} -} - -func (x *WeightedTargetLoadBalancingPolicyConfig_Target) GetWeight() uint32 { - if x != nil { - return x.Weight - } - return 0 -} - -func (x *WeightedTargetLoadBalancingPolicyConfig_Target) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -type XdsClusterManagerLoadBalancingPolicyConfig_Child struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChildPolicy []*LoadBalancingConfig `protobuf:"bytes,1,rep,name=child_policy,json=childPolicy,proto3" json:"child_policy,omitempty"` -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig_Child) Reset() { - *x = XdsClusterManagerLoadBalancingPolicyConfig_Child{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig_Child) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterManagerLoadBalancingPolicyConfig_Child) ProtoMessage() {} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig_Child) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterManagerLoadBalancingPolicyConfig_Child.ProtoReflect.Descriptor instead. -func (*XdsClusterManagerLoadBalancingPolicyConfig_Child) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{7, 0} -} - -func (x *XdsClusterManagerLoadBalancingPolicyConfig_Child) GetChildPolicy() []*LoadBalancingConfig { - if x != nil { - return x.ChildPolicy - } - return nil -} - -type XdsServer_ChannelCredentials struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Required. - Config *structpb.Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` // Optional JSON config. -} - -func (x *XdsServer_ChannelCredentials) Reset() { - *x = XdsServer_ChannelCredentials{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsServer_ChannelCredentials) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsServer_ChannelCredentials) ProtoMessage() {} - -func (x *XdsServer_ChannelCredentials) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsServer_ChannelCredentials.ProtoReflect.Descriptor instead. -func (*XdsServer_ChannelCredentials) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{9, 0} -} - -func (x *XdsServer_ChannelCredentials) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -func (x *XdsServer_ChannelCredentials) GetConfig() *structpb.Struct { - if x != nil { - return x.Config - } - return nil -} - -// Describes a discovery mechanism instance. -// For EDS or LOGICAL_DNS clusters, there will be exactly one -// DiscoveryMechanism, which will describe the cluster of the parent -// CDS policy. -// For aggregate clusters, there will be one DiscoveryMechanism for each -// underlying cluster. -type XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Cluster name. - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // If set to the empty string, load reporting will be sent to the same - // server that we obtained CDS data from. - // DEPRECATED: Use new lrs_load_reporting_server field instead. - // - // Deprecated: Do not use. - LrsLoadReportingServerName *wrapperspb.StringValue `protobuf:"bytes,2,opt,name=lrs_load_reporting_server_name,json=lrsLoadReportingServerName,proto3" json:"lrs_load_reporting_server_name,omitempty"` - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // Supercedes lrs_load_reporting_server_name field. - LrsLoadReportingServer *XdsServer `protobuf:"bytes,7,opt,name=lrs_load_reporting_server,json=lrsLoadReportingServer,proto3" json:"lrs_load_reporting_server,omitempty"` - // Maximum number of outstanding requests can be made to the upstream - // cluster. Default is 1024. - MaxConcurrentRequests *wrapperspb.UInt32Value `protobuf:"bytes,3,opt,name=max_concurrent_requests,json=maxConcurrentRequests,proto3" json:"max_concurrent_requests,omitempty"` - Type XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type `protobuf:"varint,4,opt,name=type,proto3,enum=grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type" json:"type,omitempty"` - // For type EDS only. - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - EdsServiceName string `protobuf:"bytes,5,opt,name=eds_service_name,json=edsServiceName,proto3" json:"eds_service_name,omitempty"` - // For type LOGICAL_DNS only. - // DNS name to resolve in "host:port" form. - DnsHostname string `protobuf:"bytes,6,opt,name=dns_hostname,json=dnsHostname,proto3" json:"dns_hostname,omitempty"` - // The configuration for outlier_detection child policies - // Within this message, the child_policy field will be ignored - OutlierDetection *OutlierDetectionLoadBalancingConfig `protobuf:"bytes,8,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) Reset() { - *x = XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) ProtoMessage() {} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism.ProtoReflect.Descriptor instead. -func (*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{10, 0} -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -// Deprecated: Do not use. -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetLrsLoadReportingServerName() *wrapperspb.StringValue { - if x != nil { - return x.LrsLoadReportingServerName - } - return nil -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetLrsLoadReportingServer() *XdsServer { - if x != nil { - return x.LrsLoadReportingServer - } - return nil -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetMaxConcurrentRequests() *wrapperspb.UInt32Value { - if x != nil { - return x.MaxConcurrentRequests - } - return nil -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetType() XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type { - if x != nil { - return x.Type - } - return XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_UNKNOWN -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetEdsServiceName() string { - if x != nil { - return x.EdsServiceName - } - return "" -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetDnsHostname() string { - if x != nil { - return x.DnsHostname - } - return "" -} - -func (x *XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism) GetOutlierDetection() *OutlierDetectionLoadBalancingConfig { - if x != nil { - return x.OutlierDetection - } - return nil -} - -// Drop configuration. -type XdsClusterImplLoadBalancingPolicyConfig_DropCategory struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` - RequestsPerMillion uint32 `protobuf:"varint,2,opt,name=requests_per_million,json=requestsPerMillion,proto3" json:"requests_per_million,omitempty"` -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig_DropCategory) Reset() { - *x = XdsClusterImplLoadBalancingPolicyConfig_DropCategory{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig_DropCategory) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*XdsClusterImplLoadBalancingPolicyConfig_DropCategory) ProtoMessage() {} - -func (x *XdsClusterImplLoadBalancingPolicyConfig_DropCategory) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use XdsClusterImplLoadBalancingPolicyConfig_DropCategory.ProtoReflect.Descriptor instead. -func (*XdsClusterImplLoadBalancingPolicyConfig_DropCategory) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{11, 0} -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig_DropCategory) GetCategory() string { - if x != nil { - return x.Category - } - return "" -} - -func (x *XdsClusterImplLoadBalancingPolicyConfig_DropCategory) GetRequestsPerMillion() uint32 { - if x != nil { - return x.RequestsPerMillion - } - return 0 -} - -// The locality for which this policy will report load. Required. -type LrsLoadBalancingPolicyConfig_Locality struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` - Zone string `protobuf:"bytes,2,opt,name=zone,proto3" json:"zone,omitempty"` - Subzone string `protobuf:"bytes,3,opt,name=subzone,proto3" json:"subzone,omitempty"` -} - -func (x *LrsLoadBalancingPolicyConfig_Locality) Reset() { - *x = LrsLoadBalancingPolicyConfig_Locality{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LrsLoadBalancingPolicyConfig_Locality) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LrsLoadBalancingPolicyConfig_Locality) ProtoMessage() {} - -func (x *LrsLoadBalancingPolicyConfig_Locality) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LrsLoadBalancingPolicyConfig_Locality.ProtoReflect.Descriptor instead. -func (*LrsLoadBalancingPolicyConfig_Locality) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{14, 0} -} - -func (x *LrsLoadBalancingPolicyConfig_Locality) GetRegion() string { - if x != nil { - return x.Region - } - return "" -} - -func (x *LrsLoadBalancingPolicyConfig_Locality) GetZone() string { - if x != nil { - return x.Zone - } - return "" -} - -func (x *LrsLoadBalancingPolicyConfig_Locality) GetSubzone() string { - if x != nil { - return x.Subzone - } - return "" -} - -// If a RetryThrottlingPolicy is provided, gRPC will automatically throttle -// retry attempts and hedged RPCs when the client's ratio of failures to -// successes exceeds a threshold. -// -// For each server name, the gRPC client will maintain a token_count which is -// initially set to max_tokens. Every outgoing RPC (regardless of service or -// method invoked) will change token_count as follows: -// -// - Every failed RPC will decrement the token_count by 1. -// - Every successful RPC will increment the token_count by token_ratio. -// -// If token_count is less than or equal to max_tokens / 2, then RPCs will not -// be retried and hedged RPCs will not be sent. -type ServiceConfig_RetryThrottlingPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The number of tokens starts at max_tokens. The token_count will always be - // between 0 and max_tokens. - // - // This field is required and must be greater than zero. - MaxTokens uint32 `protobuf:"varint,1,opt,name=max_tokens,json=maxTokens,proto3" json:"max_tokens,omitempty"` - // The amount of tokens to add on each successful RPC. Typically this will - // be some number between 0 and 1, e.g., 0.1. - // - // This field is required and must be greater than zero. Up to 3 decimal - // places are supported. - TokenRatio float32 `protobuf:"fixed32,2,opt,name=token_ratio,json=tokenRatio,proto3" json:"token_ratio,omitempty"` -} - -func (x *ServiceConfig_RetryThrottlingPolicy) Reset() { - *x = ServiceConfig_RetryThrottlingPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceConfig_RetryThrottlingPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceConfig_RetryThrottlingPolicy) ProtoMessage() {} - -func (x *ServiceConfig_RetryThrottlingPolicy) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceConfig_RetryThrottlingPolicy.ProtoReflect.Descriptor instead. -func (*ServiceConfig_RetryThrottlingPolicy) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{17, 0} -} - -func (x *ServiceConfig_RetryThrottlingPolicy) GetMaxTokens() uint32 { - if x != nil { - return x.MaxTokens - } - return 0 -} - -func (x *ServiceConfig_RetryThrottlingPolicy) GetTokenRatio() float32 { - if x != nil { - return x.TokenRatio - } - return 0 -} - -type ServiceConfig_HealthCheckConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Service name to use in the health-checking request. - ServiceName *wrapperspb.StringValue `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` -} - -func (x *ServiceConfig_HealthCheckConfig) Reset() { - *x = ServiceConfig_HealthCheckConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_service_config_service_config_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceConfig_HealthCheckConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceConfig_HealthCheckConfig) ProtoMessage() {} - -func (x *ServiceConfig_HealthCheckConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_service_config_service_config_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceConfig_HealthCheckConfig.ProtoReflect.Descriptor instead. -func (*ServiceConfig_HealthCheckConfig) Descriptor() ([]byte, []int) { - return file_grpc_service_config_service_config_proto_rawDescGZIP(), []int{17, 1} -} - -func (x *ServiceConfig_HealthCheckConfig) GetServiceName() *wrapperspb.StringValue { - if x != nil { - return x.ServiceName - } - return nil -} - -var File_grpc_service_config_service_config_proto protoreflect.FileDescriptor - -var file_grpc_service_config_service_config_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, - 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xde, 0x08, 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x77, 0x61, 0x69, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x72, 0x65, - 0x61, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, - 0x61, 0x64, 0x79, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x57, 0x0a, 0x19, 0x6d, 0x61, 0x78, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x16, 0x6d, 0x61, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x59, 0x0a, 0x1a, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x17, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x0c, - 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x58, 0x0a, 0x0e, 0x68, 0x65, 0x64, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x65, 0x64, 0x67, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x48, 0x00, 0x52, 0x0d, 0x68, 0x65, 0x64, - 0x67, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x38, 0x0a, 0x04, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x1a, 0xa7, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x74, 0x72, 0x79, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, - 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, - 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x3a, 0x0a, 0x0b, 0x6d, - 0x61, 0x78, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x61, 0x78, - 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x12, 0x2d, 0x0a, 0x12, 0x62, 0x61, 0x63, 0x6b, 0x6f, - 0x66, 0x66, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x11, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x46, 0x0a, 0x16, 0x72, 0x65, 0x74, 0x72, 0x79, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x14, 0x72, 0x65, 0x74, 0x72, 0x79, 0x61, - 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x1a, 0xb9, - 0x01, 0x0a, 0x0d, 0x48, 0x65, 0x64, 0x67, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x74, 0x74, 0x65, 0x6d, - 0x70, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x0d, 0x68, 0x65, 0x64, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x64, - 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x68, 0x65, 0x64, 0x67, 0x69, 0x6e, 0x67, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x12, 0x45, 0x0a, 0x16, 0x6e, 0x6f, 0x6e, 0x5f, 0x66, 0x61, 0x74, 0x61, 0x6c, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, - 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x13, 0x6e, 0x6f, 0x6e, 0x46, 0x61, 0x74, 0x61, 0x6c, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x72, 0x65, - 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x68, 0x65, 0x64, 0x67, 0x69, 0x6e, 0x67, 0x5f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x50, 0x69, 0x63, 0x6b, 0x46, 0x69, 0x72, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x6e, - 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x8e, 0x0a, 0x0a, - 0x23, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x12, 0x62, - 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x6d, 0x61, 0x78, 0x45, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4e, 0x0a, 0x14, 0x6d, - 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x80, 0x01, 0x0a, 0x15, - 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, - 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x92, - 0x01, 0x0a, 0x1b, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x52, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, - 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, - 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x1a, 0xb3, 0x02, 0x0a, 0x13, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, - 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x74, 0x64, 0x65, - 0x76, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x74, - 0x64, 0x65, 0x76, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x53, 0x0a, 0x16, 0x65, 0x6e, 0x66, - 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x41, - 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x48, 0x6f, 0x73, 0x74, - 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x1a, 0xb4, 0x02, 0x0a, 0x19, 0x46, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x45, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, - 0x12, 0x53, 0x0a, 0x16, 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, - 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, - 0x65, 0x6e, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x41, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, - 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, - 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x69, - 0x6d, 0x75, 0x6d, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x22, 0xd3, 0x01, - 0x0a, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4b, - 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, - 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x53, - 0x0a, 0x18, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x16, 0x69, 0x6e, 0x69, - 0x74, 0x69, 0x61, 0x6c, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x22, 0xae, 0x03, 0x0a, 0x21, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x60, 0x0a, 0x08, 0x63, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0a, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x8b, 0x01, 0x0a, 0x05, - 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x40, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x1c, 0x69, 0x67, 0x6e, 0x6f, 0x72, - 0x65, 0x5f, 0x72, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x69, - 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x79, 0x0a, 0x0d, 0x43, 0x68, 0x69, - 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x52, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x02, 0x0a, 0x27, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x63, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x73, 0x1a, 0x6d, 0x0a, 0x06, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x7f, 0x0a, 0x0c, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x59, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf2, 0x02, 0x0a, 0x2a, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x69, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x1a, - 0x54, 0x0a, 0x05, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, - 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x82, 0x01, 0x0a, 0x0d, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x72, - 0x65, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, - 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x43, 0x68, 0x69, 0x6c, 0x64, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x09, 0x43, 0x64, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x22, 0xa1, 0x02, 0x0a, 0x09, 0x58, 0x64, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, - 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x75, 0x72, 0x69, 0x12, - 0x57, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x73, 0x12, 0x40, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x59, 0x0a, 0x12, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x9d, 0x07, 0x0a, 0x2b, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x86, 0x01, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x5f, 0x6d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x53, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x73, 0x12, 0x4c, - 0x0a, 0x0d, 0x78, 0x64, 0x73, 0x5f, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0b, 0x78, 0x64, 0x73, 0x4c, 0x62, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x96, 0x05, 0x0a, - 0x12, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4d, 0x65, 0x63, 0x68, 0x61, 0x6e, - 0x69, 0x73, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x64, 0x0a, - 0x1e, 0x6c, 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x1a, 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x19, 0x6c, 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, - 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x16, 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x54, - 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, - 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x12, 0x6c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x58, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x4d, 0x65, - 0x63, 0x68, 0x61, 0x6e, 0x69, 0x73, 0x6d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x64, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x64, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x64, 0x6e, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x6e, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x65, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x2d, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x45, - 0x44, 0x53, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, - 0x44, 0x4e, 0x53, 0x10, 0x02, 0x22, 0xa3, 0x05, 0x0a, 0x27, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x65, - 0x64, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x64, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x64, 0x0a, 0x1e, 0x6c, 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x1a, 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x19, 0x6c, - 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x16, - 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, - 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, - 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x72, 0x0a, 0x0f, - 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x6c, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x52, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, - 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x5c, 0x0a, - 0x0c, 0x44, 0x72, 0x6f, 0x70, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x1a, 0x0a, - 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x50, 0x65, 0x72, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x6f, 0x6e, 0x22, 0x88, 0x03, 0x0a, 0x1c, - 0x45, 0x64, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x64, 0x73, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x65, 0x64, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x60, 0x0a, 0x1e, 0x6c, 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x60, 0x0a, 0x17, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x70, - 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x15, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x60, 0x0a, 0x17, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x5f, 0x70, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x15, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x50, 0x69, 0x63, 0x6b, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x65, 0x0a, 0x1b, 0x52, 0x69, 0x6e, 0x67, 0x48, 0x61, - 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x69, 0x6e, - 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x69, - 0x6e, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6d, 0x61, 0x78, - 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xa6, 0x03, - 0x0a, 0x1c, 0x4c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, - 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x28, 0x0a, 0x10, 0x65, 0x64, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x64, 0x73, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x1e, 0x6c, - 0x72, 0x73, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, - 0x67, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x1a, 0x6c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x56, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x4b, 0x0a, 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, - 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x50, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x73, 0x75, 0x62, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, - 0x75, 0x62, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0xe0, 0x02, 0x0a, 0x09, 0x58, 0x64, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x27, 0x0a, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4b, 0x0a, - 0x0c, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x63, - 0x68, 0x69, 0x6c, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x0f, 0x66, 0x61, - 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x66, - 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x28, 0x0a, - 0x10, 0x65, 0x64, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x65, 0x64, 0x73, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x60, 0x0a, 0x1e, 0x6c, 0x72, 0x73, 0x5f, 0x6c, - 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1a, 0x6c, - 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x86, 0x0c, 0x0a, 0x13, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x46, 0x0a, 0x0a, 0x70, 0x69, 0x63, 0x6b, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50, 0x69, 0x63, 0x6b, - 0x46, 0x69, 0x72, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0a, 0x70, - 0x69, 0x63, 0x6b, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x0b, 0x72, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x72, 0x6f, 0x62, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x6f, 0x62, 0x69, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x72, - 0x6f, 0x62, 0x69, 0x6e, 0x12, 0x68, 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, - 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x11, 0x6f, 0x75, 0x74, - 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, - 0x0a, 0x06, 0x67, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x48, 0x00, 0x52, 0x06, 0x67, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x12, 0x6e, 0x0a, 0x15, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x48, 0x00, 0x52, 0x15, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x65, - 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x82, 0x01, 0x0a, 0x1c, - 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, - 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x48, 0x00, 0x52, 0x1c, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x12, 0x8d, 0x01, 0x0a, 0x20, 0x78, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, - 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x20, - 0x78, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, - 0x12, 0x4c, 0x0a, 0x10, 0x63, 0x64, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x43, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x10, 0x63, 0x64, - 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x90, - 0x01, 0x0a, 0x21, 0x78, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x21, - 0x78, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, - 0x6c, 0x12, 0x84, 0x01, 0x0a, 0x1d, 0x78, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, - 0x74, 0x61, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x58, 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x6c, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x1d, 0x78, 0x64, 0x73, 0x5f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x6a, 0x0a, 0x16, 0x72, 0x69, 0x6e, 0x67, - 0x5f, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, - 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, - 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x16, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x63, 0x0a, 0x10, 0x6c, 0x72, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x72, 0x73, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x10, 0x6c, 0x72, 0x73, 0x5f, 0x65, 0x78, 0x70, - 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x63, 0x0a, 0x10, 0x65, 0x64, 0x73, - 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x64, 0x73, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x10, 0x65, 0x64, - 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x12, 0x36, - 0x0a, 0x03, 0x78, 0x64, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x02, 0x18, 0x01, 0x48, - 0x00, 0x52, 0x03, 0x78, 0x64, 0x73, 0x12, 0x50, 0x0a, 0x10, 0x78, 0x64, 0x73, 0x5f, 0x65, 0x78, - 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x58, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x10, 0x78, 0x64, 0x73, 0x5f, 0x65, 0x78, 0x70, 0x65, - 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x42, 0x08, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x22, 0xd8, 0x05, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, - 0x13, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x12, 0x5c, 0x0a, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x13, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x46, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, - 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x6d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x63, 0x0a, 0x10, 0x72, 0x65, - 0x74, 0x72, 0x79, 0x5f, 0x74, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, - 0x72, 0x65, 0x74, 0x72, 0x79, 0x54, 0x68, 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x12, - 0x64, 0x0a, 0x13, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x11, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x57, 0x0a, 0x15, 0x52, 0x65, 0x74, 0x72, 0x79, 0x54, 0x68, - 0x72, 0x6f, 0x74, 0x74, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1d, - 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x0a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x1a, 0x54, - 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x37, 0x0a, 0x13, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0f, 0x0a, 0x0b, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, 0x10, 0x01, 0x42, 0x5e, 0x0a, - 0x15, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x12, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_service_config_service_config_proto_rawDescOnce sync.Once - file_grpc_service_config_service_config_proto_rawDescData = file_grpc_service_config_service_config_proto_rawDesc -) - -func file_grpc_service_config_service_config_proto_rawDescGZIP() []byte { - file_grpc_service_config_service_config_proto_rawDescOnce.Do(func() { - file_grpc_service_config_service_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_service_config_service_config_proto_rawDescData) - }) - return file_grpc_service_config_service_config_proto_rawDescData -} - -var file_grpc_service_config_service_config_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_grpc_service_config_service_config_proto_msgTypes = make([]protoimpl.MessageInfo, 35) -var file_grpc_service_config_service_config_proto_goTypes = []interface{}{ - (XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism_Type)(0), // 0: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.Type - (ServiceConfig_LoadBalancingPolicy)(0), // 1: grpc.service_config.ServiceConfig.LoadBalancingPolicy - (*MethodConfig)(nil), // 2: grpc.service_config.MethodConfig - (*PickFirstConfig)(nil), // 3: grpc.service_config.PickFirstConfig - (*RoundRobinConfig)(nil), // 4: grpc.service_config.RoundRobinConfig - (*OutlierDetectionLoadBalancingConfig)(nil), // 5: grpc.service_config.OutlierDetectionLoadBalancingConfig - (*GrpcLbConfig)(nil), // 6: grpc.service_config.GrpcLbConfig - (*PriorityLoadBalancingPolicyConfig)(nil), // 7: grpc.service_config.PriorityLoadBalancingPolicyConfig - (*WeightedTargetLoadBalancingPolicyConfig)(nil), // 8: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig - (*XdsClusterManagerLoadBalancingPolicyConfig)(nil), // 9: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig - (*CdsConfig)(nil), // 10: grpc.service_config.CdsConfig - (*XdsServer)(nil), // 11: grpc.service_config.XdsServer - (*XdsClusterResolverLoadBalancingPolicyConfig)(nil), // 12: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig - (*XdsClusterImplLoadBalancingPolicyConfig)(nil), // 13: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig - (*EdsLoadBalancingPolicyConfig)(nil), // 14: grpc.service_config.EdsLoadBalancingPolicyConfig - (*RingHashLoadBalancingConfig)(nil), // 15: grpc.service_config.RingHashLoadBalancingConfig - (*LrsLoadBalancingPolicyConfig)(nil), // 16: grpc.service_config.LrsLoadBalancingPolicyConfig - (*XdsConfig)(nil), // 17: grpc.service_config.XdsConfig - (*LoadBalancingConfig)(nil), // 18: grpc.service_config.LoadBalancingConfig - (*ServiceConfig)(nil), // 19: grpc.service_config.ServiceConfig - (*MethodConfig_Name)(nil), // 20: grpc.service_config.MethodConfig.Name - (*MethodConfig_RetryPolicy)(nil), // 21: grpc.service_config.MethodConfig.RetryPolicy - (*MethodConfig_HedgingPolicy)(nil), // 22: grpc.service_config.MethodConfig.HedgingPolicy - (*OutlierDetectionLoadBalancingConfig_SuccessRateEjection)(nil), // 23: grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection - (*OutlierDetectionLoadBalancingConfig_FailurePercentageEjection)(nil), // 24: grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection - (*PriorityLoadBalancingPolicyConfig_Child)(nil), // 25: grpc.service_config.PriorityLoadBalancingPolicyConfig.Child - nil, // 26: grpc.service_config.PriorityLoadBalancingPolicyConfig.ChildrenEntry - (*WeightedTargetLoadBalancingPolicyConfig_Target)(nil), // 27: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.Target - nil, // 28: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.TargetsEntry - (*XdsClusterManagerLoadBalancingPolicyConfig_Child)(nil), // 29: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.Child - nil, // 30: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.ChildrenEntry - (*XdsServer_ChannelCredentials)(nil), // 31: grpc.service_config.XdsServer.ChannelCredentials - (*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism)(nil), // 32: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism - (*XdsClusterImplLoadBalancingPolicyConfig_DropCategory)(nil), // 33: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.DropCategory - (*LrsLoadBalancingPolicyConfig_Locality)(nil), // 34: grpc.service_config.LrsLoadBalancingPolicyConfig.Locality - (*ServiceConfig_RetryThrottlingPolicy)(nil), // 35: grpc.service_config.ServiceConfig.RetryThrottlingPolicy - (*ServiceConfig_HealthCheckConfig)(nil), // 36: grpc.service_config.ServiceConfig.HealthCheckConfig - (*wrapperspb.BoolValue)(nil), // 37: google.protobuf.BoolValue - (*durationpb.Duration)(nil), // 38: google.protobuf.Duration - (*wrapperspb.UInt32Value)(nil), // 39: google.protobuf.UInt32Value - (*structpb.Value)(nil), // 40: google.protobuf.Value - (*wrapperspb.StringValue)(nil), // 41: google.protobuf.StringValue - (code.Code)(0), // 42: google.rpc.Code - (*structpb.Struct)(nil), // 43: google.protobuf.Struct -} -var file_grpc_service_config_service_config_proto_depIdxs = []int32{ - 20, // 0: grpc.service_config.MethodConfig.name:type_name -> grpc.service_config.MethodConfig.Name - 37, // 1: grpc.service_config.MethodConfig.wait_for_ready:type_name -> google.protobuf.BoolValue - 38, // 2: grpc.service_config.MethodConfig.timeout:type_name -> google.protobuf.Duration - 39, // 3: grpc.service_config.MethodConfig.max_request_message_bytes:type_name -> google.protobuf.UInt32Value - 39, // 4: grpc.service_config.MethodConfig.max_response_message_bytes:type_name -> google.protobuf.UInt32Value - 21, // 5: grpc.service_config.MethodConfig.retry_policy:type_name -> grpc.service_config.MethodConfig.RetryPolicy - 22, // 6: grpc.service_config.MethodConfig.hedging_policy:type_name -> grpc.service_config.MethodConfig.HedgingPolicy - 38, // 7: grpc.service_config.OutlierDetectionLoadBalancingConfig.interval:type_name -> google.protobuf.Duration - 38, // 8: grpc.service_config.OutlierDetectionLoadBalancingConfig.base_ejection_time:type_name -> google.protobuf.Duration - 38, // 9: grpc.service_config.OutlierDetectionLoadBalancingConfig.max_ejection_time:type_name -> google.protobuf.Duration - 39, // 10: grpc.service_config.OutlierDetectionLoadBalancingConfig.max_ejection_percent:type_name -> google.protobuf.UInt32Value - 23, // 11: grpc.service_config.OutlierDetectionLoadBalancingConfig.success_rate_ejection:type_name -> grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection - 24, // 12: grpc.service_config.OutlierDetectionLoadBalancingConfig.failure_percentage_ejection:type_name -> grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection - 18, // 13: grpc.service_config.OutlierDetectionLoadBalancingConfig.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 18, // 14: grpc.service_config.GrpcLbConfig.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 38, // 15: grpc.service_config.GrpcLbConfig.initial_fallback_timeout:type_name -> google.protobuf.Duration - 26, // 16: grpc.service_config.PriorityLoadBalancingPolicyConfig.children:type_name -> grpc.service_config.PriorityLoadBalancingPolicyConfig.ChildrenEntry - 28, // 17: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.targets:type_name -> grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.TargetsEntry - 30, // 18: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.children:type_name -> grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.ChildrenEntry - 31, // 19: grpc.service_config.XdsServer.channel_creds:type_name -> grpc.service_config.XdsServer.ChannelCredentials - 40, // 20: grpc.service_config.XdsServer.server_features:type_name -> google.protobuf.Value - 32, // 21: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.discovery_mechanisms:type_name -> grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism - 18, // 22: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.xds_lb_policy:type_name -> grpc.service_config.LoadBalancingConfig - 41, // 23: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.lrs_load_reporting_server_name:type_name -> google.protobuf.StringValue - 11, // 24: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.lrs_load_reporting_server:type_name -> grpc.service_config.XdsServer - 39, // 25: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.max_concurrent_requests:type_name -> google.protobuf.UInt32Value - 33, // 26: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.drop_categories:type_name -> grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.DropCategory - 18, // 27: grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 41, // 28: grpc.service_config.EdsLoadBalancingPolicyConfig.lrs_load_reporting_server_name:type_name -> google.protobuf.StringValue - 18, // 29: grpc.service_config.EdsLoadBalancingPolicyConfig.locality_picking_policy:type_name -> grpc.service_config.LoadBalancingConfig - 18, // 30: grpc.service_config.EdsLoadBalancingPolicyConfig.endpoint_picking_policy:type_name -> grpc.service_config.LoadBalancingConfig - 34, // 31: grpc.service_config.LrsLoadBalancingPolicyConfig.locality:type_name -> grpc.service_config.LrsLoadBalancingPolicyConfig.Locality - 18, // 32: grpc.service_config.LrsLoadBalancingPolicyConfig.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 18, // 33: grpc.service_config.XdsConfig.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 18, // 34: grpc.service_config.XdsConfig.fallback_policy:type_name -> grpc.service_config.LoadBalancingConfig - 41, // 35: grpc.service_config.XdsConfig.lrs_load_reporting_server_name:type_name -> google.protobuf.StringValue - 3, // 36: grpc.service_config.LoadBalancingConfig.pick_first:type_name -> grpc.service_config.PickFirstConfig - 4, // 37: grpc.service_config.LoadBalancingConfig.round_robin:type_name -> grpc.service_config.RoundRobinConfig - 5, // 38: grpc.service_config.LoadBalancingConfig.outlier_detection:type_name -> grpc.service_config.OutlierDetectionLoadBalancingConfig - 6, // 39: grpc.service_config.LoadBalancingConfig.grpclb:type_name -> grpc.service_config.GrpcLbConfig - 7, // 40: grpc.service_config.LoadBalancingConfig.priority_experimental:type_name -> grpc.service_config.PriorityLoadBalancingPolicyConfig - 8, // 41: grpc.service_config.LoadBalancingConfig.weighted_target_experimental:type_name -> grpc.service_config.WeightedTargetLoadBalancingPolicyConfig - 9, // 42: grpc.service_config.LoadBalancingConfig.xds_cluster_manager_experimental:type_name -> grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig - 10, // 43: grpc.service_config.LoadBalancingConfig.cds_experimental:type_name -> grpc.service_config.CdsConfig - 12, // 44: grpc.service_config.LoadBalancingConfig.xds_cluster_resolver_experimental:type_name -> grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig - 13, // 45: grpc.service_config.LoadBalancingConfig.xds_cluster_impl_experimental:type_name -> grpc.service_config.XdsClusterImplLoadBalancingPolicyConfig - 15, // 46: grpc.service_config.LoadBalancingConfig.ring_hash_experimental:type_name -> grpc.service_config.RingHashLoadBalancingConfig - 16, // 47: grpc.service_config.LoadBalancingConfig.lrs_experimental:type_name -> grpc.service_config.LrsLoadBalancingPolicyConfig - 14, // 48: grpc.service_config.LoadBalancingConfig.eds_experimental:type_name -> grpc.service_config.EdsLoadBalancingPolicyConfig - 17, // 49: grpc.service_config.LoadBalancingConfig.xds:type_name -> grpc.service_config.XdsConfig - 17, // 50: grpc.service_config.LoadBalancingConfig.xds_experimental:type_name -> grpc.service_config.XdsConfig - 1, // 51: grpc.service_config.ServiceConfig.load_balancing_policy:type_name -> grpc.service_config.ServiceConfig.LoadBalancingPolicy - 18, // 52: grpc.service_config.ServiceConfig.load_balancing_config:type_name -> grpc.service_config.LoadBalancingConfig - 2, // 53: grpc.service_config.ServiceConfig.method_config:type_name -> grpc.service_config.MethodConfig - 35, // 54: grpc.service_config.ServiceConfig.retry_throttling:type_name -> grpc.service_config.ServiceConfig.RetryThrottlingPolicy - 36, // 55: grpc.service_config.ServiceConfig.health_check_config:type_name -> grpc.service_config.ServiceConfig.HealthCheckConfig - 38, // 56: grpc.service_config.MethodConfig.RetryPolicy.initial_backoff:type_name -> google.protobuf.Duration - 38, // 57: grpc.service_config.MethodConfig.RetryPolicy.max_backoff:type_name -> google.protobuf.Duration - 42, // 58: grpc.service_config.MethodConfig.RetryPolicy.retryable_status_codes:type_name -> google.rpc.Code - 38, // 59: grpc.service_config.MethodConfig.HedgingPolicy.hedging_delay:type_name -> google.protobuf.Duration - 42, // 60: grpc.service_config.MethodConfig.HedgingPolicy.non_fatal_status_codes:type_name -> google.rpc.Code - 39, // 61: grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection.stdev_factor:type_name -> google.protobuf.UInt32Value - 39, // 62: grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value - 39, // 63: grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value - 39, // 64: grpc.service_config.OutlierDetectionLoadBalancingConfig.SuccessRateEjection.request_volume:type_name -> google.protobuf.UInt32Value - 39, // 65: grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection.threshold:type_name -> google.protobuf.UInt32Value - 39, // 66: grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection.enforcement_percentage:type_name -> google.protobuf.UInt32Value - 39, // 67: grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection.minimum_hosts:type_name -> google.protobuf.UInt32Value - 39, // 68: grpc.service_config.OutlierDetectionLoadBalancingConfig.FailurePercentageEjection.request_volume:type_name -> google.protobuf.UInt32Value - 18, // 69: grpc.service_config.PriorityLoadBalancingPolicyConfig.Child.config:type_name -> grpc.service_config.LoadBalancingConfig - 25, // 70: grpc.service_config.PriorityLoadBalancingPolicyConfig.ChildrenEntry.value:type_name -> grpc.service_config.PriorityLoadBalancingPolicyConfig.Child - 18, // 71: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.Target.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 27, // 72: grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.TargetsEntry.value:type_name -> grpc.service_config.WeightedTargetLoadBalancingPolicyConfig.Target - 18, // 73: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.Child.child_policy:type_name -> grpc.service_config.LoadBalancingConfig - 29, // 74: grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.ChildrenEntry.value:type_name -> grpc.service_config.XdsClusterManagerLoadBalancingPolicyConfig.Child - 43, // 75: grpc.service_config.XdsServer.ChannelCredentials.config:type_name -> google.protobuf.Struct - 41, // 76: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.lrs_load_reporting_server_name:type_name -> google.protobuf.StringValue - 11, // 77: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.lrs_load_reporting_server:type_name -> grpc.service_config.XdsServer - 39, // 78: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.max_concurrent_requests:type_name -> google.protobuf.UInt32Value - 0, // 79: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.type:type_name -> grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.Type - 5, // 80: grpc.service_config.XdsClusterResolverLoadBalancingPolicyConfig.DiscoveryMechanism.outlier_detection:type_name -> grpc.service_config.OutlierDetectionLoadBalancingConfig - 41, // 81: grpc.service_config.ServiceConfig.HealthCheckConfig.service_name:type_name -> google.protobuf.StringValue - 82, // [82:82] is the sub-list for method output_type - 82, // [82:82] is the sub-list for method input_type - 82, // [82:82] is the sub-list for extension type_name - 82, // [82:82] is the sub-list for extension extendee - 0, // [0:82] is the sub-list for field type_name -} - -func init() { file_grpc_service_config_service_config_proto_init() } -func file_grpc_service_config_service_config_proto_init() { - if File_grpc_service_config_service_config_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_service_config_service_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MethodConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PickFirstConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RoundRobinConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutlierDetectionLoadBalancingConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcLbConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PriorityLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WeightedTargetLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterManagerLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CdsConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsServer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterResolverLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterImplLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EdsLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RingHashLoadBalancingConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LrsLoadBalancingPolicyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancingConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MethodConfig_Name); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MethodConfig_RetryPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MethodConfig_HedgingPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutlierDetectionLoadBalancingConfig_SuccessRateEjection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutlierDetectionLoadBalancingConfig_FailurePercentageEjection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PriorityLoadBalancingPolicyConfig_Child); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WeightedTargetLoadBalancingPolicyConfig_Target); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterManagerLoadBalancingPolicyConfig_Child); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsServer_ChannelCredentials); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterResolverLoadBalancingPolicyConfig_DiscoveryMechanism); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*XdsClusterImplLoadBalancingPolicyConfig_DropCategory); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LrsLoadBalancingPolicyConfig_Locality); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceConfig_RetryThrottlingPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_service_config_service_config_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceConfig_HealthCheckConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_service_config_service_config_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*MethodConfig_RetryPolicy_)(nil), - (*MethodConfig_HedgingPolicy_)(nil), - } - file_grpc_service_config_service_config_proto_msgTypes[16].OneofWrappers = []interface{}{ - (*LoadBalancingConfig_PickFirst)(nil), - (*LoadBalancingConfig_RoundRobin)(nil), - (*LoadBalancingConfig_OutlierDetection)(nil), - (*LoadBalancingConfig_Grpclb)(nil), - (*LoadBalancingConfig_PriorityExperimental)(nil), - (*LoadBalancingConfig_WeightedTargetExperimental)(nil), - (*LoadBalancingConfig_XdsClusterManagerExperimental)(nil), - (*LoadBalancingConfig_CdsExperimental)(nil), - (*LoadBalancingConfig_XdsClusterResolverExperimental)(nil), - (*LoadBalancingConfig_XdsClusterImplExperimental)(nil), - (*LoadBalancingConfig_RingHashExperimental)(nil), - (*LoadBalancingConfig_LrsExperimental)(nil), - (*LoadBalancingConfig_EdsExperimental)(nil), - (*LoadBalancingConfig_Xds)(nil), - (*LoadBalancingConfig_XdsExperimental)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_service_config_service_config_proto_rawDesc, - NumEnums: 2, - NumMessages: 35, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_service_config_service_config_proto_goTypes, - DependencyIndexes: file_grpc_service_config_service_config_proto_depIdxs, - EnumInfos: file_grpc_service_config_service_config_proto_enumTypes, - MessageInfos: file_grpc_service_config_service_config_proto_msgTypes, - }.Build() - File_grpc_service_config_service_config_proto = out.File - file_grpc_service_config_service_config_proto_rawDesc = nil - file_grpc_service_config_service_config_proto_goTypes = nil - file_grpc_service_config_service_config_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/benchmark_service.pb.go b/gen/proto/grpc/testing/benchmark_service.pb.go deleted file mode 100644 index 97ff795..0000000 --- a/gen/proto/grpc/testing/benchmark_service.pb.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/benchmark_service.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_grpc_testing_benchmark_service_proto protoreflect.FileDescriptor - -var file_grpc_testing_benchmark_service_proto_rawDesc = []byte{ - 0x0a, 0x24, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x62, - 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x32, 0xa6, 0x03, 0x0a, 0x10, 0x42, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x46, 0x0a, 0x09, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x43, - 0x61, 0x6c, 0x6c, 0x12, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x0d, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x43, 0x61, 0x6c, 0x6c, 0x12, - 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, - 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, 0x72, 0x6f, 0x6d, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x28, 0x01, 0x12, 0x52, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x46, - 0x72, 0x6f, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x11, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x74, 0x68, 0x57, 0x61, 0x79, 0x73, 0x12, 0x1b, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x42, 0x5b, 0x0a, 0x0f, 0x69, 0x6f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x15, 0x42, - 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, - 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_grpc_testing_benchmark_service_proto_goTypes = []interface{}{ - (*SimpleRequest)(nil), // 0: grpc.testing.SimpleRequest - (*SimpleResponse)(nil), // 1: grpc.testing.SimpleResponse -} -var file_grpc_testing_benchmark_service_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.BenchmarkService.UnaryCall:input_type -> grpc.testing.SimpleRequest - 0, // 1: grpc.testing.BenchmarkService.StreamingCall:input_type -> grpc.testing.SimpleRequest - 0, // 2: grpc.testing.BenchmarkService.StreamingFromClient:input_type -> grpc.testing.SimpleRequest - 0, // 3: grpc.testing.BenchmarkService.StreamingFromServer:input_type -> grpc.testing.SimpleRequest - 0, // 4: grpc.testing.BenchmarkService.StreamingBothWays:input_type -> grpc.testing.SimpleRequest - 1, // 5: grpc.testing.BenchmarkService.UnaryCall:output_type -> grpc.testing.SimpleResponse - 1, // 6: grpc.testing.BenchmarkService.StreamingCall:output_type -> grpc.testing.SimpleResponse - 1, // 7: grpc.testing.BenchmarkService.StreamingFromClient:output_type -> grpc.testing.SimpleResponse - 1, // 8: grpc.testing.BenchmarkService.StreamingFromServer:output_type -> grpc.testing.SimpleResponse - 1, // 9: grpc.testing.BenchmarkService.StreamingBothWays:output_type -> grpc.testing.SimpleResponse - 5, // [5:10] is the sub-list for method output_type - 0, // [0:5] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_grpc_testing_benchmark_service_proto_init() } -func file_grpc_testing_benchmark_service_proto_init() { - if File_grpc_testing_benchmark_service_proto != nil { - return - } - file_grpc_testing_messages_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_benchmark_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_testing_benchmark_service_proto_goTypes, - DependencyIndexes: file_grpc_testing_benchmark_service_proto_depIdxs, - }.Build() - File_grpc_testing_benchmark_service_proto = out.File - file_grpc_testing_benchmark_service_proto_rawDesc = nil - file_grpc_testing_benchmark_service_proto_goTypes = nil - file_grpc_testing_benchmark_service_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/control.pb.go b/gen/proto/grpc/testing/control.pb.go deleted file mode 100644 index f4ccf0b..0000000 --- a/gen/proto/grpc/testing/control.pb.go +++ /dev/null @@ -1,2461 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/control.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ClientType int32 - -const ( - // Many languages support a basic distinction between using - // sync or async client, and this allows the specification - ClientType_SYNC_CLIENT ClientType = 0 - ClientType_ASYNC_CLIENT ClientType = 1 - ClientType_OTHER_CLIENT ClientType = 2 // used for some language-specific variants - ClientType_CALLBACK_CLIENT ClientType = 3 -) - -// Enum value maps for ClientType. -var ( - ClientType_name = map[int32]string{ - 0: "SYNC_CLIENT", - 1: "ASYNC_CLIENT", - 2: "OTHER_CLIENT", - 3: "CALLBACK_CLIENT", - } - ClientType_value = map[string]int32{ - "SYNC_CLIENT": 0, - "ASYNC_CLIENT": 1, - "OTHER_CLIENT": 2, - "CALLBACK_CLIENT": 3, - } -) - -func (x ClientType) Enum() *ClientType { - p := new(ClientType) - *p = x - return p -} - -func (x ClientType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClientType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_control_proto_enumTypes[0].Descriptor() -} - -func (ClientType) Type() protoreflect.EnumType { - return &file_grpc_testing_control_proto_enumTypes[0] -} - -func (x ClientType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClientType.Descriptor instead. -func (ClientType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{0} -} - -type ServerType int32 - -const ( - ServerType_SYNC_SERVER ServerType = 0 - ServerType_ASYNC_SERVER ServerType = 1 - ServerType_ASYNC_GENERIC_SERVER ServerType = 2 - ServerType_OTHER_SERVER ServerType = 3 // used for some language-specific variants - ServerType_CALLBACK_SERVER ServerType = 4 -) - -// Enum value maps for ServerType. -var ( - ServerType_name = map[int32]string{ - 0: "SYNC_SERVER", - 1: "ASYNC_SERVER", - 2: "ASYNC_GENERIC_SERVER", - 3: "OTHER_SERVER", - 4: "CALLBACK_SERVER", - } - ServerType_value = map[string]int32{ - "SYNC_SERVER": 0, - "ASYNC_SERVER": 1, - "ASYNC_GENERIC_SERVER": 2, - "OTHER_SERVER": 3, - "CALLBACK_SERVER": 4, - } -) - -func (x ServerType) Enum() *ServerType { - p := new(ServerType) - *p = x - return p -} - -func (x ServerType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServerType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_control_proto_enumTypes[1].Descriptor() -} - -func (ServerType) Type() protoreflect.EnumType { - return &file_grpc_testing_control_proto_enumTypes[1] -} - -func (x ServerType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServerType.Descriptor instead. -func (ServerType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{1} -} - -type RpcType int32 - -const ( - RpcType_UNARY RpcType = 0 - RpcType_STREAMING RpcType = 1 - RpcType_STREAMING_FROM_CLIENT RpcType = 2 - RpcType_STREAMING_FROM_SERVER RpcType = 3 - RpcType_STREAMING_BOTH_WAYS RpcType = 4 -) - -// Enum value maps for RpcType. -var ( - RpcType_name = map[int32]string{ - 0: "UNARY", - 1: "STREAMING", - 2: "STREAMING_FROM_CLIENT", - 3: "STREAMING_FROM_SERVER", - 4: "STREAMING_BOTH_WAYS", - } - RpcType_value = map[string]int32{ - "UNARY": 0, - "STREAMING": 1, - "STREAMING_FROM_CLIENT": 2, - "STREAMING_FROM_SERVER": 3, - "STREAMING_BOTH_WAYS": 4, - } -) - -func (x RpcType) Enum() *RpcType { - p := new(RpcType) - *p = x - return p -} - -func (x RpcType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (RpcType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_control_proto_enumTypes[2].Descriptor() -} - -func (RpcType) Type() protoreflect.EnumType { - return &file_grpc_testing_control_proto_enumTypes[2] -} - -func (x RpcType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use RpcType.Descriptor instead. -func (RpcType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{2} -} - -// Parameters of poisson process distribution, which is a good representation -// of activity coming in from independent identical stationary sources. -type PoissonParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The rate of arrivals (a.k.a. lambda parameter of the exp distribution). - OfferedLoad float64 `protobuf:"fixed64,1,opt,name=offered_load,json=offeredLoad,proto3" json:"offered_load,omitempty"` -} - -func (x *PoissonParams) Reset() { - *x = PoissonParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PoissonParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PoissonParams) ProtoMessage() {} - -func (x *PoissonParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PoissonParams.ProtoReflect.Descriptor instead. -func (*PoissonParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{0} -} - -func (x *PoissonParams) GetOfferedLoad() float64 { - if x != nil { - return x.OfferedLoad - } - return 0 -} - -// Once an RPC finishes, immediately start a new one. -// No configuration parameters needed. -type ClosedLoopParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ClosedLoopParams) Reset() { - *x = ClosedLoopParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClosedLoopParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClosedLoopParams) ProtoMessage() {} - -func (x *ClosedLoopParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClosedLoopParams.ProtoReflect.Descriptor instead. -func (*ClosedLoopParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{1} -} - -type LoadParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Load: - // *LoadParams_ClosedLoop - // *LoadParams_Poisson - Load isLoadParams_Load `protobuf_oneof:"load"` -} - -func (x *LoadParams) Reset() { - *x = LoadParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadParams) ProtoMessage() {} - -func (x *LoadParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadParams.ProtoReflect.Descriptor instead. -func (*LoadParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{2} -} - -func (m *LoadParams) GetLoad() isLoadParams_Load { - if m != nil { - return m.Load - } - return nil -} - -func (x *LoadParams) GetClosedLoop() *ClosedLoopParams { - if x, ok := x.GetLoad().(*LoadParams_ClosedLoop); ok { - return x.ClosedLoop - } - return nil -} - -func (x *LoadParams) GetPoisson() *PoissonParams { - if x, ok := x.GetLoad().(*LoadParams_Poisson); ok { - return x.Poisson - } - return nil -} - -type isLoadParams_Load interface { - isLoadParams_Load() -} - -type LoadParams_ClosedLoop struct { - ClosedLoop *ClosedLoopParams `protobuf:"bytes,1,opt,name=closed_loop,json=closedLoop,proto3,oneof"` -} - -type LoadParams_Poisson struct { - Poisson *PoissonParams `protobuf:"bytes,2,opt,name=poisson,proto3,oneof"` -} - -func (*LoadParams_ClosedLoop) isLoadParams_Load() {} - -func (*LoadParams_Poisson) isLoadParams_Load() {} - -// presence of SecurityParams implies use of TLS -type SecurityParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UseTestCa bool `protobuf:"varint,1,opt,name=use_test_ca,json=useTestCa,proto3" json:"use_test_ca,omitempty"` - ServerHostOverride string `protobuf:"bytes,2,opt,name=server_host_override,json=serverHostOverride,proto3" json:"server_host_override,omitempty"` - CredType string `protobuf:"bytes,3,opt,name=cred_type,json=credType,proto3" json:"cred_type,omitempty"` -} - -func (x *SecurityParams) Reset() { - *x = SecurityParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityParams) ProtoMessage() {} - -func (x *SecurityParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityParams.ProtoReflect.Descriptor instead. -func (*SecurityParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{3} -} - -func (x *SecurityParams) GetUseTestCa() bool { - if x != nil { - return x.UseTestCa - } - return false -} - -func (x *SecurityParams) GetServerHostOverride() string { - if x != nil { - return x.ServerHostOverride - } - return "" -} - -func (x *SecurityParams) GetCredType() string { - if x != nil { - return x.CredType - } - return "" -} - -type ChannelArg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Types that are assignable to Value: - // *ChannelArg_StrValue - // *ChannelArg_IntValue - Value isChannelArg_Value `protobuf_oneof:"value"` -} - -func (x *ChannelArg) Reset() { - *x = ChannelArg{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChannelArg) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChannelArg) ProtoMessage() {} - -func (x *ChannelArg) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChannelArg.ProtoReflect.Descriptor instead. -func (*ChannelArg) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{4} -} - -func (x *ChannelArg) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (m *ChannelArg) GetValue() isChannelArg_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *ChannelArg) GetStrValue() string { - if x, ok := x.GetValue().(*ChannelArg_StrValue); ok { - return x.StrValue - } - return "" -} - -func (x *ChannelArg) GetIntValue() int32 { - if x, ok := x.GetValue().(*ChannelArg_IntValue); ok { - return x.IntValue - } - return 0 -} - -type isChannelArg_Value interface { - isChannelArg_Value() -} - -type ChannelArg_StrValue struct { - StrValue string `protobuf:"bytes,2,opt,name=str_value,json=strValue,proto3,oneof"` -} - -type ChannelArg_IntValue struct { - IntValue int32 `protobuf:"varint,3,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*ChannelArg_StrValue) isChannelArg_Value() {} - -func (*ChannelArg_IntValue) isChannelArg_Value() {} - -type ClientConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of targets to connect to. At least one target needs to be specified. - ServerTargets []string `protobuf:"bytes,1,rep,name=server_targets,json=serverTargets,proto3" json:"server_targets,omitempty"` - ClientType ClientType `protobuf:"varint,2,opt,name=client_type,json=clientType,proto3,enum=grpc.testing.ClientType" json:"client_type,omitempty"` - SecurityParams *SecurityParams `protobuf:"bytes,3,opt,name=security_params,json=securityParams,proto3" json:"security_params,omitempty"` - // How many concurrent RPCs to start for each channel. - // For synchronous client, use a separate thread for each outstanding RPC. - OutstandingRpcsPerChannel int32 `protobuf:"varint,4,opt,name=outstanding_rpcs_per_channel,json=outstandingRpcsPerChannel,proto3" json:"outstanding_rpcs_per_channel,omitempty"` - // Number of independent client channels to create. - // i-th channel will connect to server_target[i % server_targets.size()] - ClientChannels int32 `protobuf:"varint,5,opt,name=client_channels,json=clientChannels,proto3" json:"client_channels,omitempty"` - // Only for async client. Number of threads to use to start/manage RPCs. - AsyncClientThreads int32 `protobuf:"varint,7,opt,name=async_client_threads,json=asyncClientThreads,proto3" json:"async_client_threads,omitempty"` - RpcType RpcType `protobuf:"varint,8,opt,name=rpc_type,json=rpcType,proto3,enum=grpc.testing.RpcType" json:"rpc_type,omitempty"` - // The requested load for the entire client (aggregated over all the threads). - LoadParams *LoadParams `protobuf:"bytes,10,opt,name=load_params,json=loadParams,proto3" json:"load_params,omitempty"` - PayloadConfig *PayloadConfig `protobuf:"bytes,11,opt,name=payload_config,json=payloadConfig,proto3" json:"payload_config,omitempty"` - HistogramParams *HistogramParams `protobuf:"bytes,12,opt,name=histogram_params,json=histogramParams,proto3" json:"histogram_params,omitempty"` - // Specify the cores we should run the client on, if desired - CoreList []int32 `protobuf:"varint,13,rep,packed,name=core_list,json=coreList,proto3" json:"core_list,omitempty"` - CoreLimit int32 `protobuf:"varint,14,opt,name=core_limit,json=coreLimit,proto3" json:"core_limit,omitempty"` - // If we use an OTHER_CLIENT client_type, this string gives more detail - OtherClientApi string `protobuf:"bytes,15,opt,name=other_client_api,json=otherClientApi,proto3" json:"other_client_api,omitempty"` - ChannelArgs []*ChannelArg `protobuf:"bytes,16,rep,name=channel_args,json=channelArgs,proto3" json:"channel_args,omitempty"` - // Number of threads that share each completion queue - ThreadsPerCq int32 `protobuf:"varint,17,opt,name=threads_per_cq,json=threadsPerCq,proto3" json:"threads_per_cq,omitempty"` - // Number of messages on a stream before it gets finished/restarted - MessagesPerStream int32 `protobuf:"varint,18,opt,name=messages_per_stream,json=messagesPerStream,proto3" json:"messages_per_stream,omitempty"` - // Use coalescing API when possible. - UseCoalesceApi bool `protobuf:"varint,19,opt,name=use_coalesce_api,json=useCoalesceApi,proto3" json:"use_coalesce_api,omitempty"` - // If 0, disabled. Else, specifies the period between gathering latency - // medians in milliseconds. - MedianLatencyCollectionIntervalMillis int32 `protobuf:"varint,20,opt,name=median_latency_collection_interval_millis,json=medianLatencyCollectionIntervalMillis,proto3" json:"median_latency_collection_interval_millis,omitempty"` - // Number of client processes. 0 indicates no restriction. - ClientProcesses int32 `protobuf:"varint,21,opt,name=client_processes,json=clientProcesses,proto3" json:"client_processes,omitempty"` -} - -func (x *ClientConfig) Reset() { - *x = ClientConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientConfig) ProtoMessage() {} - -func (x *ClientConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientConfig.ProtoReflect.Descriptor instead. -func (*ClientConfig) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{5} -} - -func (x *ClientConfig) GetServerTargets() []string { - if x != nil { - return x.ServerTargets - } - return nil -} - -func (x *ClientConfig) GetClientType() ClientType { - if x != nil { - return x.ClientType - } - return ClientType_SYNC_CLIENT -} - -func (x *ClientConfig) GetSecurityParams() *SecurityParams { - if x != nil { - return x.SecurityParams - } - return nil -} - -func (x *ClientConfig) GetOutstandingRpcsPerChannel() int32 { - if x != nil { - return x.OutstandingRpcsPerChannel - } - return 0 -} - -func (x *ClientConfig) GetClientChannels() int32 { - if x != nil { - return x.ClientChannels - } - return 0 -} - -func (x *ClientConfig) GetAsyncClientThreads() int32 { - if x != nil { - return x.AsyncClientThreads - } - return 0 -} - -func (x *ClientConfig) GetRpcType() RpcType { - if x != nil { - return x.RpcType - } - return RpcType_UNARY -} - -func (x *ClientConfig) GetLoadParams() *LoadParams { - if x != nil { - return x.LoadParams - } - return nil -} - -func (x *ClientConfig) GetPayloadConfig() *PayloadConfig { - if x != nil { - return x.PayloadConfig - } - return nil -} - -func (x *ClientConfig) GetHistogramParams() *HistogramParams { - if x != nil { - return x.HistogramParams - } - return nil -} - -func (x *ClientConfig) GetCoreList() []int32 { - if x != nil { - return x.CoreList - } - return nil -} - -func (x *ClientConfig) GetCoreLimit() int32 { - if x != nil { - return x.CoreLimit - } - return 0 -} - -func (x *ClientConfig) GetOtherClientApi() string { - if x != nil { - return x.OtherClientApi - } - return "" -} - -func (x *ClientConfig) GetChannelArgs() []*ChannelArg { - if x != nil { - return x.ChannelArgs - } - return nil -} - -func (x *ClientConfig) GetThreadsPerCq() int32 { - if x != nil { - return x.ThreadsPerCq - } - return 0 -} - -func (x *ClientConfig) GetMessagesPerStream() int32 { - if x != nil { - return x.MessagesPerStream - } - return 0 -} - -func (x *ClientConfig) GetUseCoalesceApi() bool { - if x != nil { - return x.UseCoalesceApi - } - return false -} - -func (x *ClientConfig) GetMedianLatencyCollectionIntervalMillis() int32 { - if x != nil { - return x.MedianLatencyCollectionIntervalMillis - } - return 0 -} - -func (x *ClientConfig) GetClientProcesses() int32 { - if x != nil { - return x.ClientProcesses - } - return 0 -} - -type ClientStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Stats *ClientStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` -} - -func (x *ClientStatus) Reset() { - *x = ClientStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientStatus) ProtoMessage() {} - -func (x *ClientStatus) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientStatus.ProtoReflect.Descriptor instead. -func (*ClientStatus) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{6} -} - -func (x *ClientStatus) GetStats() *ClientStats { - if x != nil { - return x.Stats - } - return nil -} - -// Request current stats -type Mark struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // if true, the stats will be reset after taking their snapshot. - Reset_ bool `protobuf:"varint,1,opt,name=reset,proto3" json:"reset,omitempty"` -} - -func (x *Mark) Reset() { - *x = Mark{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Mark) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Mark) ProtoMessage() {} - -func (x *Mark) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Mark.ProtoReflect.Descriptor instead. -func (*Mark) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{7} -} - -func (x *Mark) GetReset_() bool { - if x != nil { - return x.Reset_ - } - return false -} - -type ClientArgs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Argtype: - // *ClientArgs_Setup - // *ClientArgs_Mark - Argtype isClientArgs_Argtype `protobuf_oneof:"argtype"` -} - -func (x *ClientArgs) Reset() { - *x = ClientArgs{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientArgs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientArgs) ProtoMessage() {} - -func (x *ClientArgs) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientArgs.ProtoReflect.Descriptor instead. -func (*ClientArgs) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{8} -} - -func (m *ClientArgs) GetArgtype() isClientArgs_Argtype { - if m != nil { - return m.Argtype - } - return nil -} - -func (x *ClientArgs) GetSetup() *ClientConfig { - if x, ok := x.GetArgtype().(*ClientArgs_Setup); ok { - return x.Setup - } - return nil -} - -func (x *ClientArgs) GetMark() *Mark { - if x, ok := x.GetArgtype().(*ClientArgs_Mark); ok { - return x.Mark - } - return nil -} - -type isClientArgs_Argtype interface { - isClientArgs_Argtype() -} - -type ClientArgs_Setup struct { - Setup *ClientConfig `protobuf:"bytes,1,opt,name=setup,proto3,oneof"` -} - -type ClientArgs_Mark struct { - Mark *Mark `protobuf:"bytes,2,opt,name=mark,proto3,oneof"` -} - -func (*ClientArgs_Setup) isClientArgs_Argtype() {} - -func (*ClientArgs_Mark) isClientArgs_Argtype() {} - -type ServerConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServerType ServerType `protobuf:"varint,1,opt,name=server_type,json=serverType,proto3,enum=grpc.testing.ServerType" json:"server_type,omitempty"` - SecurityParams *SecurityParams `protobuf:"bytes,2,opt,name=security_params,json=securityParams,proto3" json:"security_params,omitempty"` - // Port on which to listen. Zero means pick unused port. - Port int32 `protobuf:"varint,4,opt,name=port,proto3" json:"port,omitempty"` - // Only for async server. Number of threads used to serve the requests. - AsyncServerThreads int32 `protobuf:"varint,7,opt,name=async_server_threads,json=asyncServerThreads,proto3" json:"async_server_threads,omitempty"` - // Specify the number of cores to limit server to, if desired - CoreLimit int32 `protobuf:"varint,8,opt,name=core_limit,json=coreLimit,proto3" json:"core_limit,omitempty"` - // payload config, used in generic server. - // Note this must NOT be used in proto (non-generic) servers. For proto servers, - // 'response sizes' must be configured from the 'response_size' field of the - // 'SimpleRequest' objects in RPC requests. - PayloadConfig *PayloadConfig `protobuf:"bytes,9,opt,name=payload_config,json=payloadConfig,proto3" json:"payload_config,omitempty"` - // Specify the cores we should run the server on, if desired - CoreList []int32 `protobuf:"varint,10,rep,packed,name=core_list,json=coreList,proto3" json:"core_list,omitempty"` - // If we use an OTHER_SERVER client_type, this string gives more detail - OtherServerApi string `protobuf:"bytes,11,opt,name=other_server_api,json=otherServerApi,proto3" json:"other_server_api,omitempty"` - // Number of threads that share each completion queue - ThreadsPerCq int32 `protobuf:"varint,12,opt,name=threads_per_cq,json=threadsPerCq,proto3" json:"threads_per_cq,omitempty"` - // Buffer pool size (no buffer pool specified if unset) - ResourceQuotaSize int32 `protobuf:"varint,1001,opt,name=resource_quota_size,json=resourceQuotaSize,proto3" json:"resource_quota_size,omitempty"` - ChannelArgs []*ChannelArg `protobuf:"bytes,1002,rep,name=channel_args,json=channelArgs,proto3" json:"channel_args,omitempty"` - // Number of server processes. 0 indicates no restriction. - ServerProcesses int32 `protobuf:"varint,21,opt,name=server_processes,json=serverProcesses,proto3" json:"server_processes,omitempty"` -} - -func (x *ServerConfig) Reset() { - *x = ServerConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerConfig) ProtoMessage() {} - -func (x *ServerConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerConfig.ProtoReflect.Descriptor instead. -func (*ServerConfig) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{9} -} - -func (x *ServerConfig) GetServerType() ServerType { - if x != nil { - return x.ServerType - } - return ServerType_SYNC_SERVER -} - -func (x *ServerConfig) GetSecurityParams() *SecurityParams { - if x != nil { - return x.SecurityParams - } - return nil -} - -func (x *ServerConfig) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *ServerConfig) GetAsyncServerThreads() int32 { - if x != nil { - return x.AsyncServerThreads - } - return 0 -} - -func (x *ServerConfig) GetCoreLimit() int32 { - if x != nil { - return x.CoreLimit - } - return 0 -} - -func (x *ServerConfig) GetPayloadConfig() *PayloadConfig { - if x != nil { - return x.PayloadConfig - } - return nil -} - -func (x *ServerConfig) GetCoreList() []int32 { - if x != nil { - return x.CoreList - } - return nil -} - -func (x *ServerConfig) GetOtherServerApi() string { - if x != nil { - return x.OtherServerApi - } - return "" -} - -func (x *ServerConfig) GetThreadsPerCq() int32 { - if x != nil { - return x.ThreadsPerCq - } - return 0 -} - -func (x *ServerConfig) GetResourceQuotaSize() int32 { - if x != nil { - return x.ResourceQuotaSize - } - return 0 -} - -func (x *ServerConfig) GetChannelArgs() []*ChannelArg { - if x != nil { - return x.ChannelArgs - } - return nil -} - -func (x *ServerConfig) GetServerProcesses() int32 { - if x != nil { - return x.ServerProcesses - } - return 0 -} - -type ServerArgs struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Argtype: - // *ServerArgs_Setup - // *ServerArgs_Mark - Argtype isServerArgs_Argtype `protobuf_oneof:"argtype"` -} - -func (x *ServerArgs) Reset() { - *x = ServerArgs{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerArgs) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerArgs) ProtoMessage() {} - -func (x *ServerArgs) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerArgs.ProtoReflect.Descriptor instead. -func (*ServerArgs) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{10} -} - -func (m *ServerArgs) GetArgtype() isServerArgs_Argtype { - if m != nil { - return m.Argtype - } - return nil -} - -func (x *ServerArgs) GetSetup() *ServerConfig { - if x, ok := x.GetArgtype().(*ServerArgs_Setup); ok { - return x.Setup - } - return nil -} - -func (x *ServerArgs) GetMark() *Mark { - if x, ok := x.GetArgtype().(*ServerArgs_Mark); ok { - return x.Mark - } - return nil -} - -type isServerArgs_Argtype interface { - isServerArgs_Argtype() -} - -type ServerArgs_Setup struct { - Setup *ServerConfig `protobuf:"bytes,1,opt,name=setup,proto3,oneof"` -} - -type ServerArgs_Mark struct { - Mark *Mark `protobuf:"bytes,2,opt,name=mark,proto3,oneof"` -} - -func (*ServerArgs_Setup) isServerArgs_Argtype() {} - -func (*ServerArgs_Mark) isServerArgs_Argtype() {} - -type ServerStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Stats *ServerStats `protobuf:"bytes,1,opt,name=stats,proto3" json:"stats,omitempty"` - // the port bound by the server - Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - // Number of cores available to the server - Cores int32 `protobuf:"varint,3,opt,name=cores,proto3" json:"cores,omitempty"` -} - -func (x *ServerStatus) Reset() { - *x = ServerStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerStatus) ProtoMessage() {} - -func (x *ServerStatus) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerStatus.ProtoReflect.Descriptor instead. -func (*ServerStatus) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{11} -} - -func (x *ServerStatus) GetStats() *ServerStats { - if x != nil { - return x.Stats - } - return nil -} - -func (x *ServerStatus) GetPort() int32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *ServerStatus) GetCores() int32 { - if x != nil { - return x.Cores - } - return 0 -} - -type CoreRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *CoreRequest) Reset() { - *x = CoreRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CoreRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CoreRequest) ProtoMessage() {} - -func (x *CoreRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CoreRequest.ProtoReflect.Descriptor instead. -func (*CoreRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{12} -} - -type CoreResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Number of cores available on the server - Cores int32 `protobuf:"varint,1,opt,name=cores,proto3" json:"cores,omitempty"` -} - -func (x *CoreResponse) Reset() { - *x = CoreResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CoreResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CoreResponse) ProtoMessage() {} - -func (x *CoreResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CoreResponse.ProtoReflect.Descriptor instead. -func (*CoreResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{13} -} - -func (x *CoreResponse) GetCores() int32 { - if x != nil { - return x.Cores - } - return 0 -} - -type Void struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *Void) Reset() { - *x = Void{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Void) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Void) ProtoMessage() {} - -func (x *Void) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Void.ProtoReflect.Descriptor instead. -func (*Void) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{14} -} - -// A single performance scenario: input to qps_json_driver -type Scenario struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Human readable name for this scenario - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Client configuration - ClientConfig *ClientConfig `protobuf:"bytes,2,opt,name=client_config,json=clientConfig,proto3" json:"client_config,omitempty"` - // Number of clients to start for the test - NumClients int32 `protobuf:"varint,3,opt,name=num_clients,json=numClients,proto3" json:"num_clients,omitempty"` - // Server configuration - ServerConfig *ServerConfig `protobuf:"bytes,4,opt,name=server_config,json=serverConfig,proto3" json:"server_config,omitempty"` - // Number of servers to start for the test - NumServers int32 `protobuf:"varint,5,opt,name=num_servers,json=numServers,proto3" json:"num_servers,omitempty"` - // Warmup period, in seconds - WarmupSeconds int32 `protobuf:"varint,6,opt,name=warmup_seconds,json=warmupSeconds,proto3" json:"warmup_seconds,omitempty"` - // Benchmark time, in seconds - BenchmarkSeconds int32 `protobuf:"varint,7,opt,name=benchmark_seconds,json=benchmarkSeconds,proto3" json:"benchmark_seconds,omitempty"` - // Number of workers to spawn locally (usually zero) - SpawnLocalWorkerCount int32 `protobuf:"varint,8,opt,name=spawn_local_worker_count,json=spawnLocalWorkerCount,proto3" json:"spawn_local_worker_count,omitempty"` -} - -func (x *Scenario) Reset() { - *x = Scenario{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Scenario) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Scenario) ProtoMessage() {} - -func (x *Scenario) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Scenario.ProtoReflect.Descriptor instead. -func (*Scenario) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{15} -} - -func (x *Scenario) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Scenario) GetClientConfig() *ClientConfig { - if x != nil { - return x.ClientConfig - } - return nil -} - -func (x *Scenario) GetNumClients() int32 { - if x != nil { - return x.NumClients - } - return 0 -} - -func (x *Scenario) GetServerConfig() *ServerConfig { - if x != nil { - return x.ServerConfig - } - return nil -} - -func (x *Scenario) GetNumServers() int32 { - if x != nil { - return x.NumServers - } - return 0 -} - -func (x *Scenario) GetWarmupSeconds() int32 { - if x != nil { - return x.WarmupSeconds - } - return 0 -} - -func (x *Scenario) GetBenchmarkSeconds() int32 { - if x != nil { - return x.BenchmarkSeconds - } - return 0 -} - -func (x *Scenario) GetSpawnLocalWorkerCount() int32 { - if x != nil { - return x.SpawnLocalWorkerCount - } - return 0 -} - -// A set of scenarios to be run with qps_json_driver -type Scenarios struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Scenarios []*Scenario `protobuf:"bytes,1,rep,name=scenarios,proto3" json:"scenarios,omitempty"` -} - -func (x *Scenarios) Reset() { - *x = Scenarios{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Scenarios) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Scenarios) ProtoMessage() {} - -func (x *Scenarios) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Scenarios.ProtoReflect.Descriptor instead. -func (*Scenarios) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{16} -} - -func (x *Scenarios) GetScenarios() []*Scenario { - if x != nil { - return x.Scenarios - } - return nil -} - -// Basic summary that can be computed from ClientStats and ServerStats -// once the scenario has finished. -type ScenarioResultSummary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Total number of operations per second over all clients. What is counted as 1 'operation' depends on the benchmark scenarios: - // For unary benchmarks, an operation is processing of a single unary RPC. - // For streaming benchmarks, an operation is processing of a single ping pong of request and response. - Qps float64 `protobuf:"fixed64,1,opt,name=qps,proto3" json:"qps,omitempty"` - // QPS per server core. - QpsPerServerCore float64 `protobuf:"fixed64,2,opt,name=qps_per_server_core,json=qpsPerServerCore,proto3" json:"qps_per_server_core,omitempty"` - // The total server cpu load based on system time across all server processes, expressed as percentage of a single cpu core. - // For example, 85 implies 85% of a cpu core, 125 implies 125% of a cpu core. Since we are accumulating the cpu load across all the server - // processes, the value could > 100 when there are multiple servers or a single server using multiple threads and cores. - // Same explanation for the total client cpu load below. - ServerSystemTime float64 `protobuf:"fixed64,3,opt,name=server_system_time,json=serverSystemTime,proto3" json:"server_system_time,omitempty"` - // The total server cpu load based on user time across all server processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - ServerUserTime float64 `protobuf:"fixed64,4,opt,name=server_user_time,json=serverUserTime,proto3" json:"server_user_time,omitempty"` - // The total client cpu load based on system time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - ClientSystemTime float64 `protobuf:"fixed64,5,opt,name=client_system_time,json=clientSystemTime,proto3" json:"client_system_time,omitempty"` - // The total client cpu load based on user time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - ClientUserTime float64 `protobuf:"fixed64,6,opt,name=client_user_time,json=clientUserTime,proto3" json:"client_user_time,omitempty"` - // X% latency percentiles (in nanoseconds) - Latency_50 float64 `protobuf:"fixed64,7,opt,name=latency_50,json=latency50,proto3" json:"latency_50,omitempty"` - Latency_90 float64 `protobuf:"fixed64,8,opt,name=latency_90,json=latency90,proto3" json:"latency_90,omitempty"` - Latency_95 float64 `protobuf:"fixed64,9,opt,name=latency_95,json=latency95,proto3" json:"latency_95,omitempty"` - Latency_99 float64 `protobuf:"fixed64,10,opt,name=latency_99,json=latency99,proto3" json:"latency_99,omitempty"` - Latency_999 float64 `protobuf:"fixed64,11,opt,name=latency_999,json=latency999,proto3" json:"latency_999,omitempty"` - // server cpu usage percentage - ServerCpuUsage float64 `protobuf:"fixed64,12,opt,name=server_cpu_usage,json=serverCpuUsage,proto3" json:"server_cpu_usage,omitempty"` - // Number of requests that succeeded/failed - SuccessfulRequestsPerSecond float64 `protobuf:"fixed64,13,opt,name=successful_requests_per_second,json=successfulRequestsPerSecond,proto3" json:"successful_requests_per_second,omitempty"` - FailedRequestsPerSecond float64 `protobuf:"fixed64,14,opt,name=failed_requests_per_second,json=failedRequestsPerSecond,proto3" json:"failed_requests_per_second,omitempty"` - // Number of polls called inside completion queue per request - ClientPollsPerRequest float64 `protobuf:"fixed64,15,opt,name=client_polls_per_request,json=clientPollsPerRequest,proto3" json:"client_polls_per_request,omitempty"` - ServerPollsPerRequest float64 `protobuf:"fixed64,16,opt,name=server_polls_per_request,json=serverPollsPerRequest,proto3" json:"server_polls_per_request,omitempty"` - // Queries per CPU-sec over all servers or clients - ServerQueriesPerCpuSec float64 `protobuf:"fixed64,17,opt,name=server_queries_per_cpu_sec,json=serverQueriesPerCpuSec,proto3" json:"server_queries_per_cpu_sec,omitempty"` - ClientQueriesPerCpuSec float64 `protobuf:"fixed64,18,opt,name=client_queries_per_cpu_sec,json=clientQueriesPerCpuSec,proto3" json:"client_queries_per_cpu_sec,omitempty"` -} - -func (x *ScenarioResultSummary) Reset() { - *x = ScenarioResultSummary{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ScenarioResultSummary) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ScenarioResultSummary) ProtoMessage() {} - -func (x *ScenarioResultSummary) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ScenarioResultSummary.ProtoReflect.Descriptor instead. -func (*ScenarioResultSummary) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{17} -} - -func (x *ScenarioResultSummary) GetQps() float64 { - if x != nil { - return x.Qps - } - return 0 -} - -func (x *ScenarioResultSummary) GetQpsPerServerCore() float64 { - if x != nil { - return x.QpsPerServerCore - } - return 0 -} - -func (x *ScenarioResultSummary) GetServerSystemTime() float64 { - if x != nil { - return x.ServerSystemTime - } - return 0 -} - -func (x *ScenarioResultSummary) GetServerUserTime() float64 { - if x != nil { - return x.ServerUserTime - } - return 0 -} - -func (x *ScenarioResultSummary) GetClientSystemTime() float64 { - if x != nil { - return x.ClientSystemTime - } - return 0 -} - -func (x *ScenarioResultSummary) GetClientUserTime() float64 { - if x != nil { - return x.ClientUserTime - } - return 0 -} - -func (x *ScenarioResultSummary) GetLatency_50() float64 { - if x != nil { - return x.Latency_50 - } - return 0 -} - -func (x *ScenarioResultSummary) GetLatency_90() float64 { - if x != nil { - return x.Latency_90 - } - return 0 -} - -func (x *ScenarioResultSummary) GetLatency_95() float64 { - if x != nil { - return x.Latency_95 - } - return 0 -} - -func (x *ScenarioResultSummary) GetLatency_99() float64 { - if x != nil { - return x.Latency_99 - } - return 0 -} - -func (x *ScenarioResultSummary) GetLatency_999() float64 { - if x != nil { - return x.Latency_999 - } - return 0 -} - -func (x *ScenarioResultSummary) GetServerCpuUsage() float64 { - if x != nil { - return x.ServerCpuUsage - } - return 0 -} - -func (x *ScenarioResultSummary) GetSuccessfulRequestsPerSecond() float64 { - if x != nil { - return x.SuccessfulRequestsPerSecond - } - return 0 -} - -func (x *ScenarioResultSummary) GetFailedRequestsPerSecond() float64 { - if x != nil { - return x.FailedRequestsPerSecond - } - return 0 -} - -func (x *ScenarioResultSummary) GetClientPollsPerRequest() float64 { - if x != nil { - return x.ClientPollsPerRequest - } - return 0 -} - -func (x *ScenarioResultSummary) GetServerPollsPerRequest() float64 { - if x != nil { - return x.ServerPollsPerRequest - } - return 0 -} - -func (x *ScenarioResultSummary) GetServerQueriesPerCpuSec() float64 { - if x != nil { - return x.ServerQueriesPerCpuSec - } - return 0 -} - -func (x *ScenarioResultSummary) GetClientQueriesPerCpuSec() float64 { - if x != nil { - return x.ClientQueriesPerCpuSec - } - return 0 -} - -// Results of a single benchmark scenario. -type ScenarioResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Inputs used to run the scenario. - Scenario *Scenario `protobuf:"bytes,1,opt,name=scenario,proto3" json:"scenario,omitempty"` - // Histograms from all clients merged into one histogram. - Latencies *HistogramData `protobuf:"bytes,2,opt,name=latencies,proto3" json:"latencies,omitempty"` - // Client stats for each client - ClientStats []*ClientStats `protobuf:"bytes,3,rep,name=client_stats,json=clientStats,proto3" json:"client_stats,omitempty"` - // Server stats for each server - ServerStats []*ServerStats `protobuf:"bytes,4,rep,name=server_stats,json=serverStats,proto3" json:"server_stats,omitempty"` - // Number of cores available to each server - ServerCores []int32 `protobuf:"varint,5,rep,packed,name=server_cores,json=serverCores,proto3" json:"server_cores,omitempty"` - // An after-the-fact computed summary - Summary *ScenarioResultSummary `protobuf:"bytes,6,opt,name=summary,proto3" json:"summary,omitempty"` - // Information on success or failure of each worker - ClientSuccess []bool `protobuf:"varint,7,rep,packed,name=client_success,json=clientSuccess,proto3" json:"client_success,omitempty"` - ServerSuccess []bool `protobuf:"varint,8,rep,packed,name=server_success,json=serverSuccess,proto3" json:"server_success,omitempty"` - // Number of failed requests (one row per status code seen) - RequestResults []*RequestResultCount `protobuf:"bytes,9,rep,name=request_results,json=requestResults,proto3" json:"request_results,omitempty"` -} - -func (x *ScenarioResult) Reset() { - *x = ScenarioResult{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_control_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ScenarioResult) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ScenarioResult) ProtoMessage() {} - -func (x *ScenarioResult) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_control_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ScenarioResult.ProtoReflect.Descriptor instead. -func (*ScenarioResult) Descriptor() ([]byte, []int) { - return file_grpc_testing_control_proto_rawDescGZIP(), []int{18} -} - -func (x *ScenarioResult) GetScenario() *Scenario { - if x != nil { - return x.Scenario - } - return nil -} - -func (x *ScenarioResult) GetLatencies() *HistogramData { - if x != nil { - return x.Latencies - } - return nil -} - -func (x *ScenarioResult) GetClientStats() []*ClientStats { - if x != nil { - return x.ClientStats - } - return nil -} - -func (x *ScenarioResult) GetServerStats() []*ServerStats { - if x != nil { - return x.ServerStats - } - return nil -} - -func (x *ScenarioResult) GetServerCores() []int32 { - if x != nil { - return x.ServerCores - } - return nil -} - -func (x *ScenarioResult) GetSummary() *ScenarioResultSummary { - if x != nil { - return x.Summary - } - return nil -} - -func (x *ScenarioResult) GetClientSuccess() []bool { - if x != nil { - return x.ClientSuccess - } - return nil -} - -func (x *ScenarioResult) GetServerSuccess() []bool { - if x != nil { - return x.ServerSuccess - } - return nil -} - -func (x *ScenarioResult) GetRequestResults() []*RequestResultCount { - if x != nil { - return x.RequestResults - } - return nil -} - -var File_grpc_testing_control_proto protoreflect.FileDescriptor - -var file_grpc_testing_control_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x1b, 0x67, 0x72, 0x70, 0x63, - 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x18, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x32, 0x0a, 0x0d, 0x50, 0x6f, 0x69, 0x73, 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6f, 0x66, 0x66, 0x65, 0x72, 0x65, - 0x64, 0x4c, 0x6f, 0x61, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x4c, - 0x6f, 0x6f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0a, 0x4c, 0x6f, - 0x61, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x41, 0x0a, 0x0b, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x6f, - 0x73, 0x65, 0x64, 0x4c, 0x6f, 0x6f, 0x70, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, - 0x0a, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x4c, 0x6f, 0x6f, 0x70, 0x12, 0x37, 0x0a, 0x07, 0x70, - 0x6f, 0x69, 0x73, 0x73, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x69, 0x73, - 0x73, 0x6f, 0x6e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, - 0x73, 0x73, 0x6f, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x7f, 0x0a, 0x0e, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1e, - 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x75, 0x73, 0x65, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x12, 0x30, - 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x6f, 0x76, - 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x48, 0x6f, 0x73, 0x74, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x67, 0x0a, - 0x0a, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x72, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x74, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, - 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x05, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf6, 0x07, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x39, - 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x12, 0x3f, 0x0a, 0x1c, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, - 0x72, 0x70, 0x63, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x6f, 0x75, 0x74, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x70, 0x63, 0x73, 0x50, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x73, - 0x79, 0x6e, 0x63, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x08, - 0x72, 0x70, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x70, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x72, 0x70, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, - 0x0a, 0x0b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0a, 0x6c, - 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x48, 0x0a, - 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, - 0x6d, 0x69, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x70, 0x69, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, - 0x74, 0x68, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x70, 0x69, 0x12, 0x3b, 0x0a, - 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, 0x10, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x72, 0x67, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x68, - 0x72, 0x65, 0x61, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x71, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x0c, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x65, 0x72, 0x43, 0x71, - 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, - 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x12, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x12, 0x28, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x65, - 0x5f, 0x61, 0x70, 0x69, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x43, - 0x6f, 0x61, 0x6c, 0x65, 0x73, 0x63, 0x65, 0x41, 0x70, 0x69, 0x12, 0x58, 0x0a, 0x29, 0x6d, 0x65, - 0x64, 0x69, 0x61, 0x6e, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x05, 0x52, 0x25, 0x6d, - 0x65, 0x64, 0x69, 0x61, 0x6e, 0x4c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6c, 0x6c, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x4d, 0x69, - 0x6c, 0x6c, 0x69, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, - 0x3f, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x22, 0x1c, 0x0a, 0x04, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x73, 0x65, 0x74, 0x22, 0x75, - 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x05, - 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, - 0x12, 0x28, 0x0a, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, - 0x72, 0x6b, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x72, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x61, 0x72, - 0x67, 0x74, 0x79, 0x70, 0x65, 0x22, 0xc0, 0x04, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x39, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x0e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, - 0x74, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x14, - 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x68, 0x72, - 0x65, 0x61, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x61, 0x73, 0x79, 0x6e, - 0x63, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x42, 0x0a, - 0x0e, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x0d, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x08, 0x63, 0x6f, 0x72, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, - 0x0a, 0x10, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x61, - 0x70, 0x69, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x41, 0x70, 0x69, 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x68, 0x72, 0x65, - 0x61, 0x64, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x71, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0c, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x50, 0x65, 0x72, 0x43, 0x71, 0x12, 0x2f, - 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, - 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x3c, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x18, - 0xea, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x72, 0x67, - 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x72, 0x67, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x75, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x41, 0x72, 0x67, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x48, 0x00, 0x52, 0x05, 0x73, 0x65, 0x74, 0x75, 0x70, 0x12, 0x28, 0x0a, 0x04, 0x6d, 0x61, - 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x48, 0x00, 0x52, 0x04, - 0x6d, 0x61, 0x72, 0x6b, 0x42, 0x09, 0x0a, 0x07, 0x61, 0x72, 0x67, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x69, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x0d, 0x0a, 0x0b, 0x43, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x24, 0x0a, 0x0c, 0x43, 0x6f, 0x72, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x72, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, - 0x06, 0x0a, 0x04, 0x56, 0x6f, 0x69, 0x64, 0x22, 0xef, 0x02, 0x0a, 0x08, 0x53, 0x63, 0x65, 0x6e, - 0x61, 0x72, 0x69, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, - 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x6e, 0x75, 0x6d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, - 0x75, 0x6d, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0a, 0x6e, 0x75, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, - 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, - 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, - 0x62, 0x65, 0x6e, 0x63, 0x68, 0x6d, 0x61, 0x72, 0x6b, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x37, 0x0a, 0x18, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, - 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x15, 0x73, 0x70, 0x61, 0x77, 0x6e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x09, 0x53, 0x63, 0x65, - 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, - 0x69, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, - 0x6f, 0x52, 0x09, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x73, 0x22, 0xbb, 0x06, 0x0a, - 0x15, 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x71, 0x70, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x03, 0x71, 0x70, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x71, 0x70, 0x73, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x71, 0x70, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x43, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, - 0x2c, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x28, 0x0a, - 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, - 0x73, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, - 0x63, 0x79, 0x5f, 0x35, 0x30, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x61, 0x74, - 0x65, 0x6e, 0x63, 0x79, 0x35, 0x30, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x5f, 0x39, 0x30, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, - 0x6e, 0x63, 0x79, 0x39, 0x30, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x5f, 0x39, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, - 0x63, 0x79, 0x39, 0x35, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, - 0x39, 0x39, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x39, 0x39, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x39, - 0x39, 0x39, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, - 0x79, 0x39, 0x39, 0x39, 0x12, 0x28, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, - 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x43, - 0x0a, 0x1e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1b, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, - 0x75, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x12, 0x3b, 0x0a, 0x1a, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, - 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x12, 0x37, 0x0a, 0x18, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0f, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x6c, 0x73, 0x50, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x18, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x6c, 0x73, 0x50, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x1a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x71, 0x75, 0x65, - 0x72, 0x69, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x65, 0x63, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x16, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x51, 0x75, - 0x65, 0x72, 0x69, 0x65, 0x73, 0x50, 0x65, 0x72, 0x43, 0x70, 0x75, 0x53, 0x65, 0x63, 0x12, 0x3a, - 0x0a, 0x1a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x69, 0x65, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x65, 0x63, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x16, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x69, 0x65, - 0x73, 0x50, 0x65, 0x72, 0x43, 0x70, 0x75, 0x53, 0x65, 0x63, 0x22, 0xf6, 0x03, 0x0a, 0x0e, 0x53, - 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, - 0x08, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, - 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x52, 0x08, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, - 0x6f, 0x12, 0x39, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x73, - 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x63, 0x65, 0x6e, - 0x61, 0x72, 0x69, 0x6f, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, - 0x79, 0x52, 0x07, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x08, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x73, 0x2a, 0x56, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, - 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x43, 0x4c, 0x49, 0x45, - 0x4e, 0x54, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, 0x43, 0x4c, - 0x49, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x41, 0x4c, 0x4c, 0x42, 0x41, - 0x43, 0x4b, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x2a, 0x70, 0x0a, 0x0a, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x59, 0x4e, - 0x43, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x53, - 0x59, 0x4e, 0x43, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, - 0x41, 0x53, 0x59, 0x4e, 0x43, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x5f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x41, 0x4c, 0x4c, - 0x42, 0x41, 0x43, 0x4b, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x2a, 0x72, 0x0a, - 0x07, 0x52, 0x70, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, 0x41, 0x52, - 0x59, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x49, 0x4e, 0x47, - 0x10, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x49, 0x4e, 0x47, 0x5f, - 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x19, 0x0a, - 0x15, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x52, 0x45, - 0x41, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x42, 0x4f, 0x54, 0x48, 0x5f, 0x57, 0x41, 0x59, 0x53, 0x10, - 0x04, 0x42, 0x52, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x42, 0x0c, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, - 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_testing_control_proto_rawDescOnce sync.Once - file_grpc_testing_control_proto_rawDescData = file_grpc_testing_control_proto_rawDesc -) - -func file_grpc_testing_control_proto_rawDescGZIP() []byte { - file_grpc_testing_control_proto_rawDescOnce.Do(func() { - file_grpc_testing_control_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_testing_control_proto_rawDescData) - }) - return file_grpc_testing_control_proto_rawDescData -} - -var file_grpc_testing_control_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_grpc_testing_control_proto_msgTypes = make([]protoimpl.MessageInfo, 19) -var file_grpc_testing_control_proto_goTypes = []interface{}{ - (ClientType)(0), // 0: grpc.testing.ClientType - (ServerType)(0), // 1: grpc.testing.ServerType - (RpcType)(0), // 2: grpc.testing.RpcType - (*PoissonParams)(nil), // 3: grpc.testing.PoissonParams - (*ClosedLoopParams)(nil), // 4: grpc.testing.ClosedLoopParams - (*LoadParams)(nil), // 5: grpc.testing.LoadParams - (*SecurityParams)(nil), // 6: grpc.testing.SecurityParams - (*ChannelArg)(nil), // 7: grpc.testing.ChannelArg - (*ClientConfig)(nil), // 8: grpc.testing.ClientConfig - (*ClientStatus)(nil), // 9: grpc.testing.ClientStatus - (*Mark)(nil), // 10: grpc.testing.Mark - (*ClientArgs)(nil), // 11: grpc.testing.ClientArgs - (*ServerConfig)(nil), // 12: grpc.testing.ServerConfig - (*ServerArgs)(nil), // 13: grpc.testing.ServerArgs - (*ServerStatus)(nil), // 14: grpc.testing.ServerStatus - (*CoreRequest)(nil), // 15: grpc.testing.CoreRequest - (*CoreResponse)(nil), // 16: grpc.testing.CoreResponse - (*Void)(nil), // 17: grpc.testing.Void - (*Scenario)(nil), // 18: grpc.testing.Scenario - (*Scenarios)(nil), // 19: grpc.testing.Scenarios - (*ScenarioResultSummary)(nil), // 20: grpc.testing.ScenarioResultSummary - (*ScenarioResult)(nil), // 21: grpc.testing.ScenarioResult - (*PayloadConfig)(nil), // 22: grpc.testing.PayloadConfig - (*HistogramParams)(nil), // 23: grpc.testing.HistogramParams - (*ClientStats)(nil), // 24: grpc.testing.ClientStats - (*ServerStats)(nil), // 25: grpc.testing.ServerStats - (*HistogramData)(nil), // 26: grpc.testing.HistogramData - (*RequestResultCount)(nil), // 27: grpc.testing.RequestResultCount -} -var file_grpc_testing_control_proto_depIdxs = []int32{ - 4, // 0: grpc.testing.LoadParams.closed_loop:type_name -> grpc.testing.ClosedLoopParams - 3, // 1: grpc.testing.LoadParams.poisson:type_name -> grpc.testing.PoissonParams - 0, // 2: grpc.testing.ClientConfig.client_type:type_name -> grpc.testing.ClientType - 6, // 3: grpc.testing.ClientConfig.security_params:type_name -> grpc.testing.SecurityParams - 2, // 4: grpc.testing.ClientConfig.rpc_type:type_name -> grpc.testing.RpcType - 5, // 5: grpc.testing.ClientConfig.load_params:type_name -> grpc.testing.LoadParams - 22, // 6: grpc.testing.ClientConfig.payload_config:type_name -> grpc.testing.PayloadConfig - 23, // 7: grpc.testing.ClientConfig.histogram_params:type_name -> grpc.testing.HistogramParams - 7, // 8: grpc.testing.ClientConfig.channel_args:type_name -> grpc.testing.ChannelArg - 24, // 9: grpc.testing.ClientStatus.stats:type_name -> grpc.testing.ClientStats - 8, // 10: grpc.testing.ClientArgs.setup:type_name -> grpc.testing.ClientConfig - 10, // 11: grpc.testing.ClientArgs.mark:type_name -> grpc.testing.Mark - 1, // 12: grpc.testing.ServerConfig.server_type:type_name -> grpc.testing.ServerType - 6, // 13: grpc.testing.ServerConfig.security_params:type_name -> grpc.testing.SecurityParams - 22, // 14: grpc.testing.ServerConfig.payload_config:type_name -> grpc.testing.PayloadConfig - 7, // 15: grpc.testing.ServerConfig.channel_args:type_name -> grpc.testing.ChannelArg - 12, // 16: grpc.testing.ServerArgs.setup:type_name -> grpc.testing.ServerConfig - 10, // 17: grpc.testing.ServerArgs.mark:type_name -> grpc.testing.Mark - 25, // 18: grpc.testing.ServerStatus.stats:type_name -> grpc.testing.ServerStats - 8, // 19: grpc.testing.Scenario.client_config:type_name -> grpc.testing.ClientConfig - 12, // 20: grpc.testing.Scenario.server_config:type_name -> grpc.testing.ServerConfig - 18, // 21: grpc.testing.Scenarios.scenarios:type_name -> grpc.testing.Scenario - 18, // 22: grpc.testing.ScenarioResult.scenario:type_name -> grpc.testing.Scenario - 26, // 23: grpc.testing.ScenarioResult.latencies:type_name -> grpc.testing.HistogramData - 24, // 24: grpc.testing.ScenarioResult.client_stats:type_name -> grpc.testing.ClientStats - 25, // 25: grpc.testing.ScenarioResult.server_stats:type_name -> grpc.testing.ServerStats - 20, // 26: grpc.testing.ScenarioResult.summary:type_name -> grpc.testing.ScenarioResultSummary - 27, // 27: grpc.testing.ScenarioResult.request_results:type_name -> grpc.testing.RequestResultCount - 28, // [28:28] is the sub-list for method output_type - 28, // [28:28] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name -} - -func init() { file_grpc_testing_control_proto_init() } -func file_grpc_testing_control_proto_init() { - if File_grpc_testing_control_proto != nil { - return - } - file_grpc_testing_payloads_proto_init() - file_grpc_testing_stats_proto_init() - if !protoimpl.UnsafeEnabled { - file_grpc_testing_control_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PoissonParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClosedLoopParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SecurityParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChannelArg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Mark); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientArgs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerArgs); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoreRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoreResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Void); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Scenario); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Scenarios); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScenarioResultSummary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_control_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ScenarioResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_testing_control_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*LoadParams_ClosedLoop)(nil), - (*LoadParams_Poisson)(nil), - } - file_grpc_testing_control_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*ChannelArg_StrValue)(nil), - (*ChannelArg_IntValue)(nil), - } - file_grpc_testing_control_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*ClientArgs_Setup)(nil), - (*ClientArgs_Mark)(nil), - } - file_grpc_testing_control_proto_msgTypes[10].OneofWrappers = []interface{}{ - (*ServerArgs_Setup)(nil), - (*ServerArgs_Mark)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_control_proto_rawDesc, - NumEnums: 3, - NumMessages: 19, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_testing_control_proto_goTypes, - DependencyIndexes: file_grpc_testing_control_proto_depIdxs, - EnumInfos: file_grpc_testing_control_proto_enumTypes, - MessageInfos: file_grpc_testing_control_proto_msgTypes, - }.Build() - File_grpc_testing_control_proto = out.File - file_grpc_testing_control_proto_rawDesc = nil - file_grpc_testing_control_proto_goTypes = nil - file_grpc_testing_control_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/empty.pb.go b/gen/proto/grpc/testing/empty.pb.go deleted file mode 100644 index fb0b17c..0000000 --- a/gen/proto/grpc/testing/empty.pb.go +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/empty.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// An empty message that you can re-use to avoid defining duplicated empty -// messages in your project. A typical example is to use it as argument or the -// return value of a service API. For instance: -// -// service Foo { -// rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { }; -// }; -// -type Empty struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *Empty) Reset() { - *x = Empty{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_empty_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Empty) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Empty) ProtoMessage() {} - -func (x *Empty) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_empty_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Empty.ProtoReflect.Descriptor instead. -func (*Empty) Descriptor() ([]byte, []int) { - return file_grpc_testing_empty_proto_rawDescGZIP(), []int{0} -} - -var File_grpc_testing_empty_proto protoreflect.FileDescriptor - -var file_grpc_testing_empty_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x65, - 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x07, 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x42, 0x5b, 0x0a, 0x1b, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x0b, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x5a, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_testing_empty_proto_rawDescOnce sync.Once - file_grpc_testing_empty_proto_rawDescData = file_grpc_testing_empty_proto_rawDesc -) - -func file_grpc_testing_empty_proto_rawDescGZIP() []byte { - file_grpc_testing_empty_proto_rawDescOnce.Do(func() { - file_grpc_testing_empty_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_testing_empty_proto_rawDescData) - }) - return file_grpc_testing_empty_proto_rawDescData -} - -var file_grpc_testing_empty_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_grpc_testing_empty_proto_goTypes = []interface{}{ - (*Empty)(nil), // 0: grpc.testing.Empty -} -var file_grpc_testing_empty_proto_depIdxs = []int32{ - 0, // [0:0] is the sub-list for method output_type - 0, // [0:0] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_grpc_testing_empty_proto_init() } -func file_grpc_testing_empty_proto_init() { - if File_grpc_testing_empty_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_testing_empty_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Empty); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_empty_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_testing_empty_proto_goTypes, - DependencyIndexes: file_grpc_testing_empty_proto_depIdxs, - MessageInfos: file_grpc_testing_empty_proto_msgTypes, - }.Build() - File_grpc_testing_empty_proto = out.File - file_grpc_testing_empty_proto_rawDesc = nil - file_grpc_testing_empty_proto_goTypes = nil - file_grpc_testing_empty_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/messages.pb.go b/gen/proto/grpc/testing/messages.pb.go deleted file mode 100644 index 2356588..0000000 --- a/gen/proto/grpc/testing/messages.pb.go +++ /dev/null @@ -1,2174 +0,0 @@ -// Copyright 2015-2016 gRPC authors. -// -// 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. - -// Message definitions to be used by integration test service definitions. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/messages.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The type of payload that should be returned. -type PayloadType int32 - -const ( - // Compressable text format. - PayloadType_COMPRESSABLE PayloadType = 0 -) - -// Enum value maps for PayloadType. -var ( - PayloadType_name = map[int32]string{ - 0: "COMPRESSABLE", - } - PayloadType_value = map[string]int32{ - "COMPRESSABLE": 0, - } -) - -func (x PayloadType) Enum() *PayloadType { - p := new(PayloadType) - *p = x - return p -} - -func (x PayloadType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PayloadType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_messages_proto_enumTypes[0].Descriptor() -} - -func (PayloadType) Type() protoreflect.EnumType { - return &file_grpc_testing_messages_proto_enumTypes[0] -} - -func (x PayloadType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PayloadType.Descriptor instead. -func (PayloadType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{0} -} - -// The type of route that a client took to reach a server w.r.t. gRPCLB. -// The server must fill in "fallback" if it detects that the RPC reached -// the server via the "gRPCLB fallback" path, and "backend" if it detects -// that the RPC reached the server via "gRPCLB backend" path (i.e. if it got -// the address of this server from the gRPCLB server BalanceLoad RPC). Exactly -// how this detection is done is context and server dependent. -type GrpclbRouteType int32 - -const ( - // Server didn't detect the route that a client took to reach it. - GrpclbRouteType_GRPCLB_ROUTE_TYPE_UNKNOWN GrpclbRouteType = 0 - // Indicates that a client reached a server via gRPCLB fallback. - GrpclbRouteType_GRPCLB_ROUTE_TYPE_FALLBACK GrpclbRouteType = 1 - // Indicates that a client reached a server as a gRPCLB-given backend. - GrpclbRouteType_GRPCLB_ROUTE_TYPE_BACKEND GrpclbRouteType = 2 -) - -// Enum value maps for GrpclbRouteType. -var ( - GrpclbRouteType_name = map[int32]string{ - 0: "GRPCLB_ROUTE_TYPE_UNKNOWN", - 1: "GRPCLB_ROUTE_TYPE_FALLBACK", - 2: "GRPCLB_ROUTE_TYPE_BACKEND", - } - GrpclbRouteType_value = map[string]int32{ - "GRPCLB_ROUTE_TYPE_UNKNOWN": 0, - "GRPCLB_ROUTE_TYPE_FALLBACK": 1, - "GRPCLB_ROUTE_TYPE_BACKEND": 2, - } -) - -func (x GrpclbRouteType) Enum() *GrpclbRouteType { - p := new(GrpclbRouteType) - *p = x - return p -} - -func (x GrpclbRouteType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (GrpclbRouteType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_messages_proto_enumTypes[1].Descriptor() -} - -func (GrpclbRouteType) Type() protoreflect.EnumType { - return &file_grpc_testing_messages_proto_enumTypes[1] -} - -func (x GrpclbRouteType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use GrpclbRouteType.Descriptor instead. -func (GrpclbRouteType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{1} -} - -// Type of RPCs to send. -type ClientConfigureRequest_RpcType int32 - -const ( - ClientConfigureRequest_EMPTY_CALL ClientConfigureRequest_RpcType = 0 - ClientConfigureRequest_UNARY_CALL ClientConfigureRequest_RpcType = 1 -) - -// Enum value maps for ClientConfigureRequest_RpcType. -var ( - ClientConfigureRequest_RpcType_name = map[int32]string{ - 0: "EMPTY_CALL", - 1: "UNARY_CALL", - } - ClientConfigureRequest_RpcType_value = map[string]int32{ - "EMPTY_CALL": 0, - "UNARY_CALL": 1, - } -) - -func (x ClientConfigureRequest_RpcType) Enum() *ClientConfigureRequest_RpcType { - p := new(ClientConfigureRequest_RpcType) - *p = x - return p -} - -func (x ClientConfigureRequest_RpcType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClientConfigureRequest_RpcType) Descriptor() protoreflect.EnumDescriptor { - return file_grpc_testing_messages_proto_enumTypes[2].Descriptor() -} - -func (ClientConfigureRequest_RpcType) Type() protoreflect.EnumType { - return &file_grpc_testing_messages_proto_enumTypes[2] -} - -func (x ClientConfigureRequest_RpcType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClientConfigureRequest_RpcType.Descriptor instead. -func (ClientConfigureRequest_RpcType) EnumDescriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{16, 0} -} - -// TODO(dgq): Go back to using well-known types once -// https://github.com/grpc/grpc/issues/6980 has been fixed. -// import "google/protobuf/wrappers.proto"; -type BoolValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The bool value. - Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *BoolValue) Reset() { - *x = BoolValue{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BoolValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BoolValue) ProtoMessage() {} - -func (x *BoolValue) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BoolValue.ProtoReflect.Descriptor instead. -func (*BoolValue) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{0} -} - -func (x *BoolValue) GetValue() bool { - if x != nil { - return x.Value - } - return false -} - -// A block of data, to simply increase gRPC message size. -type Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The type of data in body. - Type PayloadType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.testing.PayloadType" json:"type,omitempty"` - // Primary contents of payload. - Body []byte `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` -} - -func (x *Payload) Reset() { - *x = Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Payload) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Payload) ProtoMessage() {} - -func (x *Payload) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Payload.ProtoReflect.Descriptor instead. -func (*Payload) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{1} -} - -func (x *Payload) GetType() PayloadType { - if x != nil { - return x.Type - } - return PayloadType_COMPRESSABLE -} - -func (x *Payload) GetBody() []byte { - if x != nil { - return x.Body - } - return nil -} - -// A protobuf representation for grpc status. This is used by test -// clients to specify a status that the server should attempt to return. -type EchoStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EchoStatus) Reset() { - *x = EchoStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EchoStatus) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EchoStatus) ProtoMessage() {} - -func (x *EchoStatus) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EchoStatus.ProtoReflect.Descriptor instead. -func (*EchoStatus) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{2} -} - -func (x *EchoStatus) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *EchoStatus) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -// Unary request. -type SimpleRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Desired payload type in the response from the server. - // If response_type is RANDOM, server randomly chooses one from other formats. - ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,proto3,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` - // Desired payload size in the response from the server. - ResponseSize int32 `protobuf:"varint,2,opt,name=response_size,json=responseSize,proto3" json:"response_size,omitempty"` - // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` - // Whether SimpleResponse should include username. - FillUsername bool `protobuf:"varint,4,opt,name=fill_username,json=fillUsername,proto3" json:"fill_username,omitempty"` - // Whether SimpleResponse should include OAuth scope. - FillOauthScope bool `protobuf:"varint,5,opt,name=fill_oauth_scope,json=fillOauthScope,proto3" json:"fill_oauth_scope,omitempty"` - // Whether to request the server to compress the response. This field is - // "nullable" in order to interoperate seamlessly with clients not able to - // implement the full compression tests by introspecting the call to verify - // the response's compression status. - ResponseCompressed *BoolValue `protobuf:"bytes,6,opt,name=response_compressed,json=responseCompressed,proto3" json:"response_compressed,omitempty"` - // Whether server should return a given status - ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus,proto3" json:"response_status,omitempty"` - // Whether the server should expect this request to be compressed. - ExpectCompressed *BoolValue `protobuf:"bytes,8,opt,name=expect_compressed,json=expectCompressed,proto3" json:"expect_compressed,omitempty"` - // Whether SimpleResponse should include server_id. - FillServerId bool `protobuf:"varint,9,opt,name=fill_server_id,json=fillServerId,proto3" json:"fill_server_id,omitempty"` - // Whether SimpleResponse should include grpclb_route_type. - FillGrpclbRouteType bool `protobuf:"varint,10,opt,name=fill_grpclb_route_type,json=fillGrpclbRouteType,proto3" json:"fill_grpclb_route_type,omitempty"` -} - -func (x *SimpleRequest) Reset() { - *x = SimpleRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SimpleRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SimpleRequest) ProtoMessage() {} - -func (x *SimpleRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SimpleRequest.ProtoReflect.Descriptor instead. -func (*SimpleRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{3} -} - -func (x *SimpleRequest) GetResponseType() PayloadType { - if x != nil { - return x.ResponseType - } - return PayloadType_COMPRESSABLE -} - -func (x *SimpleRequest) GetResponseSize() int32 { - if x != nil { - return x.ResponseSize - } - return 0 -} - -func (x *SimpleRequest) GetPayload() *Payload { - if x != nil { - return x.Payload - } - return nil -} - -func (x *SimpleRequest) GetFillUsername() bool { - if x != nil { - return x.FillUsername - } - return false -} - -func (x *SimpleRequest) GetFillOauthScope() bool { - if x != nil { - return x.FillOauthScope - } - return false -} - -func (x *SimpleRequest) GetResponseCompressed() *BoolValue { - if x != nil { - return x.ResponseCompressed - } - return nil -} - -func (x *SimpleRequest) GetResponseStatus() *EchoStatus { - if x != nil { - return x.ResponseStatus - } - return nil -} - -func (x *SimpleRequest) GetExpectCompressed() *BoolValue { - if x != nil { - return x.ExpectCompressed - } - return nil -} - -func (x *SimpleRequest) GetFillServerId() bool { - if x != nil { - return x.FillServerId - } - return false -} - -func (x *SimpleRequest) GetFillGrpclbRouteType() bool { - if x != nil { - return x.FillGrpclbRouteType - } - return false -} - -// Unary response, as configured by the request. -type SimpleResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Payload to increase message size. - Payload *Payload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // The user the request came from, for verifying authentication was - // successful when the client expected it. - Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` - // OAuth scope. - OauthScope string `protobuf:"bytes,3,opt,name=oauth_scope,json=oauthScope,proto3" json:"oauth_scope,omitempty"` - // Server WorkloadID. This must be unique among different server instances, - // but the same across all RPC's made to a particular server instance. - ServerId string `protobuf:"bytes,4,opt,name=server_id,json=serverId,proto3" json:"server_id,omitempty"` - // gRPCLB Path. - GrpclbRouteType GrpclbRouteType `protobuf:"varint,5,opt,name=grpclb_route_type,json=grpclbRouteType,proto3,enum=grpc.testing.GrpclbRouteType" json:"grpclb_route_type,omitempty"` - // Server hostname. - Hostname string `protobuf:"bytes,6,opt,name=hostname,proto3" json:"hostname,omitempty"` -} - -func (x *SimpleResponse) Reset() { - *x = SimpleResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SimpleResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SimpleResponse) ProtoMessage() {} - -func (x *SimpleResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SimpleResponse.ProtoReflect.Descriptor instead. -func (*SimpleResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{4} -} - -func (x *SimpleResponse) GetPayload() *Payload { - if x != nil { - return x.Payload - } - return nil -} - -func (x *SimpleResponse) GetUsername() string { - if x != nil { - return x.Username - } - return "" -} - -func (x *SimpleResponse) GetOauthScope() string { - if x != nil { - return x.OauthScope - } - return "" -} - -func (x *SimpleResponse) GetServerId() string { - if x != nil { - return x.ServerId - } - return "" -} - -func (x *SimpleResponse) GetGrpclbRouteType() GrpclbRouteType { - if x != nil { - return x.GrpclbRouteType - } - return GrpclbRouteType_GRPCLB_ROUTE_TYPE_UNKNOWN -} - -func (x *SimpleResponse) GetHostname() string { - if x != nil { - return x.Hostname - } - return "" -} - -// Client-streaming request. -type StreamingInputCallRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` - // Whether the server should expect this request to be compressed. This field - // is "nullable" in order to interoperate seamlessly with servers not able to - // implement the full compression tests by introspecting the call to verify - // the request's compression status. - ExpectCompressed *BoolValue `protobuf:"bytes,2,opt,name=expect_compressed,json=expectCompressed,proto3" json:"expect_compressed,omitempty"` -} - -func (x *StreamingInputCallRequest) Reset() { - *x = StreamingInputCallRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StreamingInputCallRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamingInputCallRequest) ProtoMessage() {} - -func (x *StreamingInputCallRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamingInputCallRequest.ProtoReflect.Descriptor instead. -func (*StreamingInputCallRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{5} -} - -func (x *StreamingInputCallRequest) GetPayload() *Payload { - if x != nil { - return x.Payload - } - return nil -} - -func (x *StreamingInputCallRequest) GetExpectCompressed() *BoolValue { - if x != nil { - return x.ExpectCompressed - } - return nil -} - -// Client-streaming response. -type StreamingInputCallResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Aggregated size of payloads received from the client. - AggregatedPayloadSize int32 `protobuf:"varint,1,opt,name=aggregated_payload_size,json=aggregatedPayloadSize,proto3" json:"aggregated_payload_size,omitempty"` -} - -func (x *StreamingInputCallResponse) Reset() { - *x = StreamingInputCallResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StreamingInputCallResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamingInputCallResponse) ProtoMessage() {} - -func (x *StreamingInputCallResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamingInputCallResponse.ProtoReflect.Descriptor instead. -func (*StreamingInputCallResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{6} -} - -func (x *StreamingInputCallResponse) GetAggregatedPayloadSize() int32 { - if x != nil { - return x.AggregatedPayloadSize - } - return 0 -} - -// Configuration for a particular response. -type ResponseParameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Desired payload sizes in responses from the server. - Size int32 `protobuf:"varint,1,opt,name=size,proto3" json:"size,omitempty"` - // Desired interval between consecutive responses in the response stream in - // microseconds. - IntervalUs int32 `protobuf:"varint,2,opt,name=interval_us,json=intervalUs,proto3" json:"interval_us,omitempty"` - // Whether to request the server to compress the response. This field is - // "nullable" in order to interoperate seamlessly with clients not able to - // implement the full compression tests by introspecting the call to verify - // the response's compression status. - Compressed *BoolValue `protobuf:"bytes,3,opt,name=compressed,proto3" json:"compressed,omitempty"` -} - -func (x *ResponseParameters) Reset() { - *x = ResponseParameters{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ResponseParameters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ResponseParameters) ProtoMessage() {} - -func (x *ResponseParameters) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ResponseParameters.ProtoReflect.Descriptor instead. -func (*ResponseParameters) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{7} -} - -func (x *ResponseParameters) GetSize() int32 { - if x != nil { - return x.Size - } - return 0 -} - -func (x *ResponseParameters) GetIntervalUs() int32 { - if x != nil { - return x.IntervalUs - } - return 0 -} - -func (x *ResponseParameters) GetCompressed() *BoolValue { - if x != nil { - return x.Compressed - } - return nil -} - -// Server-streaming request. -type StreamingOutputCallRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Desired payload type in the response from the server. - // If response_type is RANDOM, the payload from each response in the stream - // might be of different types. This is to simulate a mixed type of payload - // stream. - ResponseType PayloadType `protobuf:"varint,1,opt,name=response_type,json=responseType,proto3,enum=grpc.testing.PayloadType" json:"response_type,omitempty"` - // Configuration for each expected response message. - ResponseParameters []*ResponseParameters `protobuf:"bytes,2,rep,name=response_parameters,json=responseParameters,proto3" json:"response_parameters,omitempty"` - // Optional input payload sent along with the request. - Payload *Payload `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"` - // Whether server should return a given status - ResponseStatus *EchoStatus `protobuf:"bytes,7,opt,name=response_status,json=responseStatus,proto3" json:"response_status,omitempty"` -} - -func (x *StreamingOutputCallRequest) Reset() { - *x = StreamingOutputCallRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StreamingOutputCallRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamingOutputCallRequest) ProtoMessage() {} - -func (x *StreamingOutputCallRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamingOutputCallRequest.ProtoReflect.Descriptor instead. -func (*StreamingOutputCallRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{8} -} - -func (x *StreamingOutputCallRequest) GetResponseType() PayloadType { - if x != nil { - return x.ResponseType - } - return PayloadType_COMPRESSABLE -} - -func (x *StreamingOutputCallRequest) GetResponseParameters() []*ResponseParameters { - if x != nil { - return x.ResponseParameters - } - return nil -} - -func (x *StreamingOutputCallRequest) GetPayload() *Payload { - if x != nil { - return x.Payload - } - return nil -} - -func (x *StreamingOutputCallRequest) GetResponseStatus() *EchoStatus { - if x != nil { - return x.ResponseStatus - } - return nil -} - -// Server-streaming response, as configured by the request and parameters. -type StreamingOutputCallResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Payload to increase response size. - Payload *Payload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` -} - -func (x *StreamingOutputCallResponse) Reset() { - *x = StreamingOutputCallResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StreamingOutputCallResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StreamingOutputCallResponse) ProtoMessage() {} - -func (x *StreamingOutputCallResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StreamingOutputCallResponse.ProtoReflect.Descriptor instead. -func (*StreamingOutputCallResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{9} -} - -func (x *StreamingOutputCallResponse) GetPayload() *Payload { - if x != nil { - return x.Payload - } - return nil -} - -// For reconnect interop test only. -// Client tells server what reconnection parameters it used. -type ReconnectParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MaxReconnectBackoffMs int32 `protobuf:"varint,1,opt,name=max_reconnect_backoff_ms,json=maxReconnectBackoffMs,proto3" json:"max_reconnect_backoff_ms,omitempty"` -} - -func (x *ReconnectParams) Reset() { - *x = ReconnectParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReconnectParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReconnectParams) ProtoMessage() {} - -func (x *ReconnectParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReconnectParams.ProtoReflect.Descriptor instead. -func (*ReconnectParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{10} -} - -func (x *ReconnectParams) GetMaxReconnectBackoffMs() int32 { - if x != nil { - return x.MaxReconnectBackoffMs - } - return 0 -} - -// For reconnect interop test only. -// Server tells client whether its reconnects are following the spec and the -// reconnect backoffs it saw. -type ReconnectInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Passed bool `protobuf:"varint,1,opt,name=passed,proto3" json:"passed,omitempty"` - BackoffMs []int32 `protobuf:"varint,2,rep,packed,name=backoff_ms,json=backoffMs,proto3" json:"backoff_ms,omitempty"` -} - -func (x *ReconnectInfo) Reset() { - *x = ReconnectInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReconnectInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReconnectInfo) ProtoMessage() {} - -func (x *ReconnectInfo) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReconnectInfo.ProtoReflect.Descriptor instead. -func (*ReconnectInfo) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{11} -} - -func (x *ReconnectInfo) GetPassed() bool { - if x != nil { - return x.Passed - } - return false -} - -func (x *ReconnectInfo) GetBackoffMs() []int32 { - if x != nil { - return x.BackoffMs - } - return nil -} - -type LoadBalancerStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Request stats for the next num_rpcs sent by client. - NumRpcs int32 `protobuf:"varint,1,opt,name=num_rpcs,json=numRpcs,proto3" json:"num_rpcs,omitempty"` - // If num_rpcs have not completed within timeout_sec, return partial results. - TimeoutSec int32 `protobuf:"varint,2,opt,name=timeout_sec,json=timeoutSec,proto3" json:"timeout_sec,omitempty"` -} - -func (x *LoadBalancerStatsRequest) Reset() { - *x = LoadBalancerStatsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerStatsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerStatsRequest) ProtoMessage() {} - -func (x *LoadBalancerStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerStatsRequest.ProtoReflect.Descriptor instead. -func (*LoadBalancerStatsRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{12} -} - -func (x *LoadBalancerStatsRequest) GetNumRpcs() int32 { - if x != nil { - return x.NumRpcs - } - return 0 -} - -func (x *LoadBalancerStatsRequest) GetTimeoutSec() int32 { - if x != nil { - return x.TimeoutSec - } - return 0 -} - -type LoadBalancerStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The number of completed RPCs for each peer. - RpcsByPeer map[string]int32 `protobuf:"bytes,1,rep,name=rpcs_by_peer,json=rpcsByPeer,proto3" json:"rpcs_by_peer,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The number of RPCs that failed to record a remote peer. - NumFailures int32 `protobuf:"varint,2,opt,name=num_failures,json=numFailures,proto3" json:"num_failures,omitempty"` - RpcsByMethod map[string]*LoadBalancerStatsResponse_RpcsByPeer `protobuf:"bytes,3,rep,name=rpcs_by_method,json=rpcsByMethod,proto3" json:"rpcs_by_method,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *LoadBalancerStatsResponse) Reset() { - *x = LoadBalancerStatsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerStatsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerStatsResponse) ProtoMessage() {} - -func (x *LoadBalancerStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerStatsResponse.ProtoReflect.Descriptor instead. -func (*LoadBalancerStatsResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{13} -} - -func (x *LoadBalancerStatsResponse) GetRpcsByPeer() map[string]int32 { - if x != nil { - return x.RpcsByPeer - } - return nil -} - -func (x *LoadBalancerStatsResponse) GetNumFailures() int32 { - if x != nil { - return x.NumFailures - } - return 0 -} - -func (x *LoadBalancerStatsResponse) GetRpcsByMethod() map[string]*LoadBalancerStatsResponse_RpcsByPeer { - if x != nil { - return x.RpcsByMethod - } - return nil -} - -// Request for retrieving a test client's accumulated stats. -type LoadBalancerAccumulatedStatsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *LoadBalancerAccumulatedStatsRequest) Reset() { - *x = LoadBalancerAccumulatedStatsRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerAccumulatedStatsRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerAccumulatedStatsRequest) ProtoMessage() {} - -func (x *LoadBalancerAccumulatedStatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerAccumulatedStatsRequest.ProtoReflect.Descriptor instead. -func (*LoadBalancerAccumulatedStatsRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{14} -} - -// Accumulated stats for RPCs sent by a test client. -type LoadBalancerAccumulatedStatsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The total number of RPCs have ever issued for each type. - // Deprecated: use stats_per_method.rpcs_started instead. - // - // Deprecated: Do not use. - NumRpcsStartedByMethod map[string]int32 `protobuf:"bytes,1,rep,name=num_rpcs_started_by_method,json=numRpcsStartedByMethod,proto3" json:"num_rpcs_started_by_method,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The total number of RPCs have ever completed successfully for each type. - // Deprecated: use stats_per_method.result instead. - // - // Deprecated: Do not use. - NumRpcsSucceededByMethod map[string]int32 `protobuf:"bytes,2,rep,name=num_rpcs_succeeded_by_method,json=numRpcsSucceededByMethod,proto3" json:"num_rpcs_succeeded_by_method,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // The total number of RPCs have ever failed for each type. - // Deprecated: use stats_per_method.result instead. - // - // Deprecated: Do not use. - NumRpcsFailedByMethod map[string]int32 `protobuf:"bytes,3,rep,name=num_rpcs_failed_by_method,json=numRpcsFailedByMethod,proto3" json:"num_rpcs_failed_by_method,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // Per-method RPC statistics. The key is the RpcType in string form; e.g. - // 'EMPTY_CALL' or 'UNARY_CALL' - StatsPerMethod map[string]*LoadBalancerAccumulatedStatsResponse_MethodStats `protobuf:"bytes,4,rep,name=stats_per_method,json=statsPerMethod,proto3" json:"stats_per_method,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *LoadBalancerAccumulatedStatsResponse) Reset() { - *x = LoadBalancerAccumulatedStatsResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerAccumulatedStatsResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerAccumulatedStatsResponse) ProtoMessage() {} - -func (x *LoadBalancerAccumulatedStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerAccumulatedStatsResponse.ProtoReflect.Descriptor instead. -func (*LoadBalancerAccumulatedStatsResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{15} -} - -// Deprecated: Do not use. -func (x *LoadBalancerAccumulatedStatsResponse) GetNumRpcsStartedByMethod() map[string]int32 { - if x != nil { - return x.NumRpcsStartedByMethod - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancerAccumulatedStatsResponse) GetNumRpcsSucceededByMethod() map[string]int32 { - if x != nil { - return x.NumRpcsSucceededByMethod - } - return nil -} - -// Deprecated: Do not use. -func (x *LoadBalancerAccumulatedStatsResponse) GetNumRpcsFailedByMethod() map[string]int32 { - if x != nil { - return x.NumRpcsFailedByMethod - } - return nil -} - -func (x *LoadBalancerAccumulatedStatsResponse) GetStatsPerMethod() map[string]*LoadBalancerAccumulatedStatsResponse_MethodStats { - if x != nil { - return x.StatsPerMethod - } - return nil -} - -// Configurations for a test client. -type ClientConfigureRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The types of RPCs the client sends. - Types []ClientConfigureRequest_RpcType `protobuf:"varint,1,rep,packed,name=types,proto3,enum=grpc.testing.ClientConfigureRequest_RpcType" json:"types,omitempty"` - // The collection of custom metadata to be attached to RPCs sent by the client. - Metadata []*ClientConfigureRequest_Metadata `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty"` - // The deadline to use, in seconds, for all RPCs. If unset or zero, the - // client will use the default from the command-line. - TimeoutSec int32 `protobuf:"varint,3,opt,name=timeout_sec,json=timeoutSec,proto3" json:"timeout_sec,omitempty"` -} - -func (x *ClientConfigureRequest) Reset() { - *x = ClientConfigureRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientConfigureRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientConfigureRequest) ProtoMessage() {} - -func (x *ClientConfigureRequest) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientConfigureRequest.ProtoReflect.Descriptor instead. -func (*ClientConfigureRequest) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{16} -} - -func (x *ClientConfigureRequest) GetTypes() []ClientConfigureRequest_RpcType { - if x != nil { - return x.Types - } - return nil -} - -func (x *ClientConfigureRequest) GetMetadata() []*ClientConfigureRequest_Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *ClientConfigureRequest) GetTimeoutSec() int32 { - if x != nil { - return x.TimeoutSec - } - return 0 -} - -// Response for updating a test client's configuration. -type ClientConfigureResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ClientConfigureResponse) Reset() { - *x = ClientConfigureResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientConfigureResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientConfigureResponse) ProtoMessage() {} - -func (x *ClientConfigureResponse) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientConfigureResponse.ProtoReflect.Descriptor instead. -func (*ClientConfigureResponse) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{17} -} - -type LoadBalancerStatsResponse_RpcsByPeer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The number of completed RPCs for each peer. - RpcsByPeer map[string]int32 `protobuf:"bytes,1,rep,name=rpcs_by_peer,json=rpcsByPeer,proto3" json:"rpcs_by_peer,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *LoadBalancerStatsResponse_RpcsByPeer) Reset() { - *x = LoadBalancerStatsResponse_RpcsByPeer{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerStatsResponse_RpcsByPeer) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerStatsResponse_RpcsByPeer) ProtoMessage() {} - -func (x *LoadBalancerStatsResponse_RpcsByPeer) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerStatsResponse_RpcsByPeer.ProtoReflect.Descriptor instead. -func (*LoadBalancerStatsResponse_RpcsByPeer) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{13, 0} -} - -func (x *LoadBalancerStatsResponse_RpcsByPeer) GetRpcsByPeer() map[string]int32 { - if x != nil { - return x.RpcsByPeer - } - return nil -} - -type LoadBalancerAccumulatedStatsResponse_MethodStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The number of RPCs that were started for this method. - RpcsStarted int32 `protobuf:"varint,1,opt,name=rpcs_started,json=rpcsStarted,proto3" json:"rpcs_started,omitempty"` - // The number of RPCs that completed with each status for this method. The - // key is the integral value of a google.rpc.Code; the value is the count. - Result map[int32]int32 `protobuf:"bytes,2,rep,name=result,proto3" json:"result,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *LoadBalancerAccumulatedStatsResponse_MethodStats) Reset() { - *x = LoadBalancerAccumulatedStatsResponse_MethodStats{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerAccumulatedStatsResponse_MethodStats) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerAccumulatedStatsResponse_MethodStats) ProtoMessage() {} - -func (x *LoadBalancerAccumulatedStatsResponse_MethodStats) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerAccumulatedStatsResponse_MethodStats.ProtoReflect.Descriptor instead. -func (*LoadBalancerAccumulatedStatsResponse_MethodStats) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{15, 3} -} - -func (x *LoadBalancerAccumulatedStatsResponse_MethodStats) GetRpcsStarted() int32 { - if x != nil { - return x.RpcsStarted - } - return 0 -} - -func (x *LoadBalancerAccumulatedStatsResponse_MethodStats) GetResult() map[int32]int32 { - if x != nil { - return x.Result - } - return nil -} - -// Metadata to be attached for the given type of RPCs. -type ClientConfigureRequest_Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type ClientConfigureRequest_RpcType `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.testing.ClientConfigureRequest_RpcType" json:"type,omitempty"` - Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *ClientConfigureRequest_Metadata) Reset() { - *x = ClientConfigureRequest_Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_messages_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientConfigureRequest_Metadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientConfigureRequest_Metadata) ProtoMessage() {} - -func (x *ClientConfigureRequest_Metadata) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_messages_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientConfigureRequest_Metadata.ProtoReflect.Descriptor instead. -func (*ClientConfigureRequest_Metadata) Descriptor() ([]byte, []int) { - return file_grpc_testing_messages_proto_rawDescGZIP(), []int{16, 0} -} - -func (x *ClientConfigureRequest_Metadata) GetType() ClientConfigureRequest_RpcType { - if x != nil { - return x.Type - } - return ClientConfigureRequest_EMPTY_CALL -} - -func (x *ClientConfigureRequest_Metadata) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *ClientConfigureRequest_Metadata) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -var File_grpc_testing_messages_proto protoreflect.FileDescriptor - -var file_grpc_testing_messages_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x21, 0x0a, 0x09, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4c, - 0x0a, 0x07, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x3a, 0x0a, 0x0a, - 0x45, 0x63, 0x68, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa2, 0x04, 0x0a, 0x0d, 0x53, 0x69, 0x6d, - 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x2f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x6c, 0x55, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x6f, 0x61, - 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x66, 0x69, 0x6c, 0x6c, 0x4f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, - 0x48, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x43, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x44, 0x0a, 0x11, - 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, - 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, 0x66, 0x69, 0x6c, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x66, 0x69, 0x6c, 0x6c, - 0x5f, 0x67, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x66, 0x69, 0x6c, 0x6c, 0x47, 0x72, - 0x70, 0x63, 0x6c, 0x62, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x82, 0x02, - 0x0a, 0x0e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x67, - 0x72, 0x70, 0x63, 0x6c, 0x62, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x67, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x92, 0x01, 0x0a, 0x19, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x12, 0x44, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x22, 0x54, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x82, 0x01, - 0x0a, 0x12, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x55, 0x73, 0x12, 0x37, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, - 0x65, 0x64, 0x22, 0xa3, 0x02, 0x0a, 0x1a, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, - 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3e, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x41, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x63, - 0x68, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x4e, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x4a, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x6d, - 0x61, 0x78, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x62, 0x61, 0x63, - 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x6d, - 0x61, 0x78, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x6f, - 0x66, 0x66, 0x4d, 0x73, 0x22, 0x46, 0x0a, 0x0d, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x1d, 0x0a, - 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x4d, 0x73, 0x22, 0x56, 0x0a, 0x18, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, - 0x72, 0x70, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, - 0x70, 0x63, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, - 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x53, 0x65, 0x63, 0x22, 0xe2, 0x04, 0x0a, 0x19, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0a, 0x72, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, 0x12, 0x21, 0x0a, - 0x0c, 0x6e, 0x75, 0x6d, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x5f, 0x0a, 0x0e, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x70, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x0a, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, - 0x12, 0x64, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x65, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, 0x2e, 0x52, 0x70, 0x63, 0x73, 0x42, - 0x79, 0x50, 0x65, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x70, 0x63, 0x73, - 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, - 0x50, 0x65, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, - 0x65, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x73, 0x0a, 0x11, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x4d, 0x65, - 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x48, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x70, 0x63, 0x73, 0x42, 0x79, 0x50, 0x65, 0x65, 0x72, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x25, 0x0a, 0x23, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, - 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x86, 0x09, 0x0a, 0x24, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x1a, 0x6e, 0x75, - 0x6d, 0x5f, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x62, - 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4e, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, - 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, - 0x18, 0x01, 0x52, 0x16, 0x6e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x94, 0x01, 0x0a, 0x1c, 0x6e, - 0x75, 0x6d, 0x5f, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, - 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x50, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, - 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, 0x53, 0x75, 0x63, - 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x18, 0x6e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, - 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x19, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x66, - 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x52, 0x70, 0x63, - 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x15, 0x6e, 0x75, 0x6d, 0x52, 0x70, 0x63, - 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, - 0x70, 0x0a, 0x10, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x1a, 0x49, 0x0a, 0x1b, 0x4e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4b, 0x0a, 0x1d, - 0x4e, 0x75, 0x6d, 0x52, 0x70, 0x63, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, - 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x48, 0x0a, 0x1a, 0x4e, 0x75, 0x6d, - 0x52, 0x70, 0x63, 0x73, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x42, 0x79, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0xcf, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x70, 0x63, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x72, 0x70, 0x63, 0x73, 0x53, - 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x81, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x74, 0x73, 0x50, - 0x65, 0x72, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x54, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe9, 0x02, 0x0a, 0x16, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, - 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x53, 0x65, 0x63, 0x1a, 0x74, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x40, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2c, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x52, 0x70, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x07, 0x52, 0x70, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x5f, 0x43, - 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x41, 0x52, 0x59, 0x5f, 0x43, - 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x22, 0x19, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2a, 0x1f, 0x0a, 0x0b, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x45, 0x53, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, - 0x00, 0x2a, 0x6f, 0x0a, 0x0f, 0x47, 0x72, 0x70, 0x63, 0x6c, 0x62, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x47, 0x52, 0x50, 0x43, 0x4c, 0x42, 0x5f, 0x52, - 0x4f, 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x47, 0x52, 0x50, 0x43, 0x4c, 0x42, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, - 0x4b, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x47, 0x52, 0x50, 0x43, 0x4c, 0x42, 0x5f, 0x52, 0x4f, - 0x55, 0x54, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x45, 0x4e, 0x44, - 0x10, 0x02, 0x42, 0x4e, 0x0a, 0x1b, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_testing_messages_proto_rawDescOnce sync.Once - file_grpc_testing_messages_proto_rawDescData = file_grpc_testing_messages_proto_rawDesc -) - -func file_grpc_testing_messages_proto_rawDescGZIP() []byte { - file_grpc_testing_messages_proto_rawDescOnce.Do(func() { - file_grpc_testing_messages_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_testing_messages_proto_rawDescData) - }) - return file_grpc_testing_messages_proto_rawDescData -} - -var file_grpc_testing_messages_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_grpc_testing_messages_proto_msgTypes = make([]protoimpl.MessageInfo, 29) -var file_grpc_testing_messages_proto_goTypes = []interface{}{ - (PayloadType)(0), // 0: grpc.testing.PayloadType - (GrpclbRouteType)(0), // 1: grpc.testing.GrpclbRouteType - (ClientConfigureRequest_RpcType)(0), // 2: grpc.testing.ClientConfigureRequest.RpcType - (*BoolValue)(nil), // 3: grpc.testing.BoolValue - (*Payload)(nil), // 4: grpc.testing.Payload - (*EchoStatus)(nil), // 5: grpc.testing.EchoStatus - (*SimpleRequest)(nil), // 6: grpc.testing.SimpleRequest - (*SimpleResponse)(nil), // 7: grpc.testing.SimpleResponse - (*StreamingInputCallRequest)(nil), // 8: grpc.testing.StreamingInputCallRequest - (*StreamingInputCallResponse)(nil), // 9: grpc.testing.StreamingInputCallResponse - (*ResponseParameters)(nil), // 10: grpc.testing.ResponseParameters - (*StreamingOutputCallRequest)(nil), // 11: grpc.testing.StreamingOutputCallRequest - (*StreamingOutputCallResponse)(nil), // 12: grpc.testing.StreamingOutputCallResponse - (*ReconnectParams)(nil), // 13: grpc.testing.ReconnectParams - (*ReconnectInfo)(nil), // 14: grpc.testing.ReconnectInfo - (*LoadBalancerStatsRequest)(nil), // 15: grpc.testing.LoadBalancerStatsRequest - (*LoadBalancerStatsResponse)(nil), // 16: grpc.testing.LoadBalancerStatsResponse - (*LoadBalancerAccumulatedStatsRequest)(nil), // 17: grpc.testing.LoadBalancerAccumulatedStatsRequest - (*LoadBalancerAccumulatedStatsResponse)(nil), // 18: grpc.testing.LoadBalancerAccumulatedStatsResponse - (*ClientConfigureRequest)(nil), // 19: grpc.testing.ClientConfigureRequest - (*ClientConfigureResponse)(nil), // 20: grpc.testing.ClientConfigureResponse - (*LoadBalancerStatsResponse_RpcsByPeer)(nil), // 21: grpc.testing.LoadBalancerStatsResponse.RpcsByPeer - nil, // 22: grpc.testing.LoadBalancerStatsResponse.RpcsByPeerEntry - nil, // 23: grpc.testing.LoadBalancerStatsResponse.RpcsByMethodEntry - nil, // 24: grpc.testing.LoadBalancerStatsResponse.RpcsByPeer.RpcsByPeerEntry - nil, // 25: grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsStartedByMethodEntry - nil, // 26: grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsSucceededByMethodEntry - nil, // 27: grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsFailedByMethodEntry - (*LoadBalancerAccumulatedStatsResponse_MethodStats)(nil), // 28: grpc.testing.LoadBalancerAccumulatedStatsResponse.MethodStats - nil, // 29: grpc.testing.LoadBalancerAccumulatedStatsResponse.StatsPerMethodEntry - nil, // 30: grpc.testing.LoadBalancerAccumulatedStatsResponse.MethodStats.ResultEntry - (*ClientConfigureRequest_Metadata)(nil), // 31: grpc.testing.ClientConfigureRequest.Metadata -} -var file_grpc_testing_messages_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.Payload.type:type_name -> grpc.testing.PayloadType - 0, // 1: grpc.testing.SimpleRequest.response_type:type_name -> grpc.testing.PayloadType - 4, // 2: grpc.testing.SimpleRequest.payload:type_name -> grpc.testing.Payload - 3, // 3: grpc.testing.SimpleRequest.response_compressed:type_name -> grpc.testing.BoolValue - 5, // 4: grpc.testing.SimpleRequest.response_status:type_name -> grpc.testing.EchoStatus - 3, // 5: grpc.testing.SimpleRequest.expect_compressed:type_name -> grpc.testing.BoolValue - 4, // 6: grpc.testing.SimpleResponse.payload:type_name -> grpc.testing.Payload - 1, // 7: grpc.testing.SimpleResponse.grpclb_route_type:type_name -> grpc.testing.GrpclbRouteType - 4, // 8: grpc.testing.StreamingInputCallRequest.payload:type_name -> grpc.testing.Payload - 3, // 9: grpc.testing.StreamingInputCallRequest.expect_compressed:type_name -> grpc.testing.BoolValue - 3, // 10: grpc.testing.ResponseParameters.compressed:type_name -> grpc.testing.BoolValue - 0, // 11: grpc.testing.StreamingOutputCallRequest.response_type:type_name -> grpc.testing.PayloadType - 10, // 12: grpc.testing.StreamingOutputCallRequest.response_parameters:type_name -> grpc.testing.ResponseParameters - 4, // 13: grpc.testing.StreamingOutputCallRequest.payload:type_name -> grpc.testing.Payload - 5, // 14: grpc.testing.StreamingOutputCallRequest.response_status:type_name -> grpc.testing.EchoStatus - 4, // 15: grpc.testing.StreamingOutputCallResponse.payload:type_name -> grpc.testing.Payload - 22, // 16: grpc.testing.LoadBalancerStatsResponse.rpcs_by_peer:type_name -> grpc.testing.LoadBalancerStatsResponse.RpcsByPeerEntry - 23, // 17: grpc.testing.LoadBalancerStatsResponse.rpcs_by_method:type_name -> grpc.testing.LoadBalancerStatsResponse.RpcsByMethodEntry - 25, // 18: grpc.testing.LoadBalancerAccumulatedStatsResponse.num_rpcs_started_by_method:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsStartedByMethodEntry - 26, // 19: grpc.testing.LoadBalancerAccumulatedStatsResponse.num_rpcs_succeeded_by_method:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsSucceededByMethodEntry - 27, // 20: grpc.testing.LoadBalancerAccumulatedStatsResponse.num_rpcs_failed_by_method:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.NumRpcsFailedByMethodEntry - 29, // 21: grpc.testing.LoadBalancerAccumulatedStatsResponse.stats_per_method:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.StatsPerMethodEntry - 2, // 22: grpc.testing.ClientConfigureRequest.types:type_name -> grpc.testing.ClientConfigureRequest.RpcType - 31, // 23: grpc.testing.ClientConfigureRequest.metadata:type_name -> grpc.testing.ClientConfigureRequest.Metadata - 24, // 24: grpc.testing.LoadBalancerStatsResponse.RpcsByPeer.rpcs_by_peer:type_name -> grpc.testing.LoadBalancerStatsResponse.RpcsByPeer.RpcsByPeerEntry - 21, // 25: grpc.testing.LoadBalancerStatsResponse.RpcsByMethodEntry.value:type_name -> grpc.testing.LoadBalancerStatsResponse.RpcsByPeer - 30, // 26: grpc.testing.LoadBalancerAccumulatedStatsResponse.MethodStats.result:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.MethodStats.ResultEntry - 28, // 27: grpc.testing.LoadBalancerAccumulatedStatsResponse.StatsPerMethodEntry.value:type_name -> grpc.testing.LoadBalancerAccumulatedStatsResponse.MethodStats - 2, // 28: grpc.testing.ClientConfigureRequest.Metadata.type:type_name -> grpc.testing.ClientConfigureRequest.RpcType - 29, // [29:29] is the sub-list for method output_type - 29, // [29:29] is the sub-list for method input_type - 29, // [29:29] is the sub-list for extension type_name - 29, // [29:29] is the sub-list for extension extendee - 0, // [0:29] is the sub-list for field type_name -} - -func init() { file_grpc_testing_messages_proto_init() } -func file_grpc_testing_messages_proto_init() { - if File_grpc_testing_messages_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_testing_messages_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BoolValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EchoStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SimpleRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SimpleResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamingInputCallRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamingInputCallResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResponseParameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamingOutputCallRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamingOutputCallResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReconnectParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReconnectInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerStatsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerStatsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerAccumulatedStatsRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerAccumulatedStatsResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientConfigureRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientConfigureResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerStatsResponse_RpcsByPeer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerAccumulatedStatsResponse_MethodStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_messages_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientConfigureRequest_Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_messages_proto_rawDesc, - NumEnums: 3, - NumMessages: 29, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_testing_messages_proto_goTypes, - DependencyIndexes: file_grpc_testing_messages_proto_depIdxs, - EnumInfos: file_grpc_testing_messages_proto_enumTypes, - MessageInfos: file_grpc_testing_messages_proto_msgTypes, - }.Build() - File_grpc_testing_messages_proto = out.File - file_grpc_testing_messages_proto_rawDesc = nil - file_grpc_testing_messages_proto_goTypes = nil - file_grpc_testing_messages_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/payloads.pb.go b/gen/proto/grpc/testing/payloads.pb.go deleted file mode 100644 index a7cd863..0000000 --- a/gen/proto/grpc/testing/payloads.pb.go +++ /dev/null @@ -1,427 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/payloads.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ByteBufferParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqSize int32 `protobuf:"varint,1,opt,name=req_size,json=reqSize,proto3" json:"req_size,omitempty"` - RespSize int32 `protobuf:"varint,2,opt,name=resp_size,json=respSize,proto3" json:"resp_size,omitempty"` -} - -func (x *ByteBufferParams) Reset() { - *x = ByteBufferParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_payloads_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ByteBufferParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ByteBufferParams) ProtoMessage() {} - -func (x *ByteBufferParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_payloads_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ByteBufferParams.ProtoReflect.Descriptor instead. -func (*ByteBufferParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_payloads_proto_rawDescGZIP(), []int{0} -} - -func (x *ByteBufferParams) GetReqSize() int32 { - if x != nil { - return x.ReqSize - } - return 0 -} - -func (x *ByteBufferParams) GetRespSize() int32 { - if x != nil { - return x.RespSize - } - return 0 -} - -type SimpleProtoParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ReqSize int32 `protobuf:"varint,1,opt,name=req_size,json=reqSize,proto3" json:"req_size,omitempty"` - RespSize int32 `protobuf:"varint,2,opt,name=resp_size,json=respSize,proto3" json:"resp_size,omitempty"` -} - -func (x *SimpleProtoParams) Reset() { - *x = SimpleProtoParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_payloads_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SimpleProtoParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SimpleProtoParams) ProtoMessage() {} - -func (x *SimpleProtoParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_payloads_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SimpleProtoParams.ProtoReflect.Descriptor instead. -func (*SimpleProtoParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_payloads_proto_rawDescGZIP(), []int{1} -} - -func (x *SimpleProtoParams) GetReqSize() int32 { - if x != nil { - return x.ReqSize - } - return 0 -} - -func (x *SimpleProtoParams) GetRespSize() int32 { - if x != nil { - return x.RespSize - } - return 0 -} - -type ComplexProtoParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ComplexProtoParams) Reset() { - *x = ComplexProtoParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_payloads_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ComplexProtoParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ComplexProtoParams) ProtoMessage() {} - -func (x *ComplexProtoParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_payloads_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ComplexProtoParams.ProtoReflect.Descriptor instead. -func (*ComplexProtoParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_payloads_proto_rawDescGZIP(), []int{2} -} - -type PayloadConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: - // *PayloadConfig_BytebufParams - // *PayloadConfig_SimpleParams - // *PayloadConfig_ComplexParams - Payload isPayloadConfig_Payload `protobuf_oneof:"payload"` -} - -func (x *PayloadConfig) Reset() { - *x = PayloadConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_payloads_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PayloadConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PayloadConfig) ProtoMessage() {} - -func (x *PayloadConfig) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_payloads_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PayloadConfig.ProtoReflect.Descriptor instead. -func (*PayloadConfig) Descriptor() ([]byte, []int) { - return file_grpc_testing_payloads_proto_rawDescGZIP(), []int{3} -} - -func (m *PayloadConfig) GetPayload() isPayloadConfig_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (x *PayloadConfig) GetBytebufParams() *ByteBufferParams { - if x, ok := x.GetPayload().(*PayloadConfig_BytebufParams); ok { - return x.BytebufParams - } - return nil -} - -func (x *PayloadConfig) GetSimpleParams() *SimpleProtoParams { - if x, ok := x.GetPayload().(*PayloadConfig_SimpleParams); ok { - return x.SimpleParams - } - return nil -} - -func (x *PayloadConfig) GetComplexParams() *ComplexProtoParams { - if x, ok := x.GetPayload().(*PayloadConfig_ComplexParams); ok { - return x.ComplexParams - } - return nil -} - -type isPayloadConfig_Payload interface { - isPayloadConfig_Payload() -} - -type PayloadConfig_BytebufParams struct { - BytebufParams *ByteBufferParams `protobuf:"bytes,1,opt,name=bytebuf_params,json=bytebufParams,proto3,oneof"` -} - -type PayloadConfig_SimpleParams struct { - SimpleParams *SimpleProtoParams `protobuf:"bytes,2,opt,name=simple_params,json=simpleParams,proto3,oneof"` -} - -type PayloadConfig_ComplexParams struct { - ComplexParams *ComplexProtoParams `protobuf:"bytes,3,opt,name=complex_params,json=complexParams,proto3,oneof"` -} - -func (*PayloadConfig_BytebufParams) isPayloadConfig_Payload() {} - -func (*PayloadConfig_SimpleParams) isPayloadConfig_Payload() {} - -func (*PayloadConfig_ComplexParams) isPayloadConfig_Payload() {} - -var File_grpc_testing_payloads_proto protoreflect.FileDescriptor - -var file_grpc_testing_payloads_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x22, 0x4a, 0x0a, 0x10, 0x42, - 0x79, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x07, 0x72, 0x65, 0x71, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x70, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4b, 0x0a, 0x11, 0x53, 0x69, 0x6d, 0x70, 0x6c, - 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x72, 0x65, 0x71, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, - 0x72, 0x65, 0x71, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x70, 0x5f, - 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0xf6, 0x01, 0x0a, 0x0d, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x47, 0x0a, 0x0e, - 0x62, 0x79, 0x74, 0x65, 0x62, 0x75, 0x66, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x62, 0x75, 0x66, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x46, 0x0a, 0x0d, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, - 0x0c, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x49, 0x0a, - 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x78, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, - 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x53, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_testing_payloads_proto_rawDescOnce sync.Once - file_grpc_testing_payloads_proto_rawDescData = file_grpc_testing_payloads_proto_rawDesc -) - -func file_grpc_testing_payloads_proto_rawDescGZIP() []byte { - file_grpc_testing_payloads_proto_rawDescOnce.Do(func() { - file_grpc_testing_payloads_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_testing_payloads_proto_rawDescData) - }) - return file_grpc_testing_payloads_proto_rawDescData -} - -var file_grpc_testing_payloads_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_grpc_testing_payloads_proto_goTypes = []interface{}{ - (*ByteBufferParams)(nil), // 0: grpc.testing.ByteBufferParams - (*SimpleProtoParams)(nil), // 1: grpc.testing.SimpleProtoParams - (*ComplexProtoParams)(nil), // 2: grpc.testing.ComplexProtoParams - (*PayloadConfig)(nil), // 3: grpc.testing.PayloadConfig -} -var file_grpc_testing_payloads_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.PayloadConfig.bytebuf_params:type_name -> grpc.testing.ByteBufferParams - 1, // 1: grpc.testing.PayloadConfig.simple_params:type_name -> grpc.testing.SimpleProtoParams - 2, // 2: grpc.testing.PayloadConfig.complex_params:type_name -> grpc.testing.ComplexProtoParams - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_grpc_testing_payloads_proto_init() } -func file_grpc_testing_payloads_proto_init() { - if File_grpc_testing_payloads_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_testing_payloads_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ByteBufferParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_payloads_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SimpleProtoParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_payloads_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ComplexProtoParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_payloads_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PayloadConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_grpc_testing_payloads_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*PayloadConfig_BytebufParams)(nil), - (*PayloadConfig_SimpleParams)(nil), - (*PayloadConfig_ComplexParams)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_payloads_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_testing_payloads_proto_goTypes, - DependencyIndexes: file_grpc_testing_payloads_proto_depIdxs, - MessageInfos: file_grpc_testing_payloads_proto_msgTypes, - }.Build() - File_grpc_testing_payloads_proto = out.File - file_grpc_testing_payloads_proto_rawDesc = nil - file_grpc_testing_payloads_proto_goTypes = nil - file_grpc_testing_payloads_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/report_qps_scenario_service.pb.go b/gen/proto/grpc/testing/report_qps_scenario_service.pb.go deleted file mode 100644 index 119a831..0000000 --- a/gen/proto/grpc/testing/report_qps_scenario_service.pb.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/report_qps_scenario_service.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_grpc_testing_report_qps_scenario_service_proto protoreflect.FileDescriptor - -var file_grpc_testing_report_qps_scenario_service_proto_rawDesc = []byte{ - 0x0a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x71, 0x70, 0x73, 0x5f, 0x73, 0x63, 0x65, 0x6e, 0x61, 0x72, - 0x69, 0x6f, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x1a, - 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x5e, 0x0a, 0x18, 0x52, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x51, 0x70, 0x73, 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, 0x12, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x6f, 0x69, 0x64, 0x42, 0x63, 0x0a, 0x0f, 0x69, 0x6f, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x1d, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x51, 0x70, 0x73, 0x53, 0x63, 0x65, 0x6e, 0x61, 0x72, 0x69, 0x6f, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, - 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_grpc_testing_report_qps_scenario_service_proto_goTypes = []interface{}{ - (*ScenarioResult)(nil), // 0: grpc.testing.ScenarioResult - (*Void)(nil), // 1: grpc.testing.Void -} -var file_grpc_testing_report_qps_scenario_service_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.ReportQpsScenarioService.ReportScenario:input_type -> grpc.testing.ScenarioResult - 1, // 1: grpc.testing.ReportQpsScenarioService.ReportScenario:output_type -> grpc.testing.Void - 1, // [1:2] is the sub-list for method output_type - 0, // [0:1] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_grpc_testing_report_qps_scenario_service_proto_init() } -func file_grpc_testing_report_qps_scenario_service_proto_init() { - if File_grpc_testing_report_qps_scenario_service_proto != nil { - return - } - file_grpc_testing_control_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_report_qps_scenario_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_testing_report_qps_scenario_service_proto_goTypes, - DependencyIndexes: file_grpc_testing_report_qps_scenario_service_proto_depIdxs, - }.Build() - File_grpc_testing_report_qps_scenario_service_proto = out.File - file_grpc_testing_report_qps_scenario_service_proto_rawDesc = nil - file_grpc_testing_report_qps_scenario_service_proto_goTypes = nil - file_grpc_testing_report_qps_scenario_service_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/stats.pb.go b/gen/proto/grpc/testing/stats.pb.go deleted file mode 100644 index 708bb8c..0000000 --- a/gen/proto/grpc/testing/stats.pb.go +++ /dev/null @@ -1,632 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/stats.proto - -package testing - -import ( - core "github.com/costinm/grpc-mesh/proto/grpc/core" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ServerStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // wall clock time change in seconds since last reset - TimeElapsed float64 `protobuf:"fixed64,1,opt,name=time_elapsed,json=timeElapsed,proto3" json:"time_elapsed,omitempty"` - // change in user time (in seconds) used by the server since last reset - TimeUser float64 `protobuf:"fixed64,2,opt,name=time_user,json=timeUser,proto3" json:"time_user,omitempty"` - // change in server time (in seconds) used by the server process and all - // threads since last reset - TimeSystem float64 `protobuf:"fixed64,3,opt,name=time_system,json=timeSystem,proto3" json:"time_system,omitempty"` - // change in total cpu time of the server (data from proc/stat) - TotalCpuTime uint64 `protobuf:"varint,4,opt,name=total_cpu_time,json=totalCpuTime,proto3" json:"total_cpu_time,omitempty"` - // change in idle time of the server (data from proc/stat) - IdleCpuTime uint64 `protobuf:"varint,5,opt,name=idle_cpu_time,json=idleCpuTime,proto3" json:"idle_cpu_time,omitempty"` - // Number of polls called inside completion queue - CqPollCount uint64 `protobuf:"varint,6,opt,name=cq_poll_count,json=cqPollCount,proto3" json:"cq_poll_count,omitempty"` - // Core library stats - CoreStats *core.Stats `protobuf:"bytes,7,opt,name=core_stats,json=coreStats,proto3" json:"core_stats,omitempty"` -} - -func (x *ServerStats) Reset() { - *x = ServerStats{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_stats_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerStats) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerStats) ProtoMessage() {} - -func (x *ServerStats) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_stats_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerStats.ProtoReflect.Descriptor instead. -func (*ServerStats) Descriptor() ([]byte, []int) { - return file_grpc_testing_stats_proto_rawDescGZIP(), []int{0} -} - -func (x *ServerStats) GetTimeElapsed() float64 { - if x != nil { - return x.TimeElapsed - } - return 0 -} - -func (x *ServerStats) GetTimeUser() float64 { - if x != nil { - return x.TimeUser - } - return 0 -} - -func (x *ServerStats) GetTimeSystem() float64 { - if x != nil { - return x.TimeSystem - } - return 0 -} - -func (x *ServerStats) GetTotalCpuTime() uint64 { - if x != nil { - return x.TotalCpuTime - } - return 0 -} - -func (x *ServerStats) GetIdleCpuTime() uint64 { - if x != nil { - return x.IdleCpuTime - } - return 0 -} - -func (x *ServerStats) GetCqPollCount() uint64 { - if x != nil { - return x.CqPollCount - } - return 0 -} - -func (x *ServerStats) GetCoreStats() *core.Stats { - if x != nil { - return x.CoreStats - } - return nil -} - -// Histogram params based on grpc/support/histogram.c -type HistogramParams struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Resolution float64 `protobuf:"fixed64,1,opt,name=resolution,proto3" json:"resolution,omitempty"` // first bucket is [0, 1 + resolution) - MaxPossible float64 `protobuf:"fixed64,2,opt,name=max_possible,json=maxPossible,proto3" json:"max_possible,omitempty"` // use enough buckets to allow this value -} - -func (x *HistogramParams) Reset() { - *x = HistogramParams{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_stats_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HistogramParams) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HistogramParams) ProtoMessage() {} - -func (x *HistogramParams) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_stats_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HistogramParams.ProtoReflect.Descriptor instead. -func (*HistogramParams) Descriptor() ([]byte, []int) { - return file_grpc_testing_stats_proto_rawDescGZIP(), []int{1} -} - -func (x *HistogramParams) GetResolution() float64 { - if x != nil { - return x.Resolution - } - return 0 -} - -func (x *HistogramParams) GetMaxPossible() float64 { - if x != nil { - return x.MaxPossible - } - return 0 -} - -// Histogram data based on grpc/support/histogram.c -type HistogramData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Bucket []uint32 `protobuf:"varint,1,rep,packed,name=bucket,proto3" json:"bucket,omitempty"` - MinSeen float64 `protobuf:"fixed64,2,opt,name=min_seen,json=minSeen,proto3" json:"min_seen,omitempty"` - MaxSeen float64 `protobuf:"fixed64,3,opt,name=max_seen,json=maxSeen,proto3" json:"max_seen,omitempty"` - Sum float64 `protobuf:"fixed64,4,opt,name=sum,proto3" json:"sum,omitempty"` - SumOfSquares float64 `protobuf:"fixed64,5,opt,name=sum_of_squares,json=sumOfSquares,proto3" json:"sum_of_squares,omitempty"` - Count float64 `protobuf:"fixed64,6,opt,name=count,proto3" json:"count,omitempty"` -} - -func (x *HistogramData) Reset() { - *x = HistogramData{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_stats_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HistogramData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HistogramData) ProtoMessage() {} - -func (x *HistogramData) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_stats_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HistogramData.ProtoReflect.Descriptor instead. -func (*HistogramData) Descriptor() ([]byte, []int) { - return file_grpc_testing_stats_proto_rawDescGZIP(), []int{2} -} - -func (x *HistogramData) GetBucket() []uint32 { - if x != nil { - return x.Bucket - } - return nil -} - -func (x *HistogramData) GetMinSeen() float64 { - if x != nil { - return x.MinSeen - } - return 0 -} - -func (x *HistogramData) GetMaxSeen() float64 { - if x != nil { - return x.MaxSeen - } - return 0 -} - -func (x *HistogramData) GetSum() float64 { - if x != nil { - return x.Sum - } - return 0 -} - -func (x *HistogramData) GetSumOfSquares() float64 { - if x != nil { - return x.SumOfSquares - } - return 0 -} - -func (x *HistogramData) GetCount() float64 { - if x != nil { - return x.Count - } - return 0 -} - -type RequestResultCount struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StatusCode int32 `protobuf:"varint,1,opt,name=status_code,json=statusCode,proto3" json:"status_code,omitempty"` - Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` -} - -func (x *RequestResultCount) Reset() { - *x = RequestResultCount{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_stats_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RequestResultCount) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RequestResultCount) ProtoMessage() {} - -func (x *RequestResultCount) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_stats_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RequestResultCount.ProtoReflect.Descriptor instead. -func (*RequestResultCount) Descriptor() ([]byte, []int) { - return file_grpc_testing_stats_proto_rawDescGZIP(), []int{3} -} - -func (x *RequestResultCount) GetStatusCode() int32 { - if x != nil { - return x.StatusCode - } - return 0 -} - -func (x *RequestResultCount) GetCount() int64 { - if x != nil { - return x.Count - } - return 0 -} - -type ClientStats struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Latency histogram. Data points are in nanoseconds. - Latencies *HistogramData `protobuf:"bytes,1,opt,name=latencies,proto3" json:"latencies,omitempty"` - // See ServerStats for details. - TimeElapsed float64 `protobuf:"fixed64,2,opt,name=time_elapsed,json=timeElapsed,proto3" json:"time_elapsed,omitempty"` - TimeUser float64 `protobuf:"fixed64,3,opt,name=time_user,json=timeUser,proto3" json:"time_user,omitempty"` - TimeSystem float64 `protobuf:"fixed64,4,opt,name=time_system,json=timeSystem,proto3" json:"time_system,omitempty"` - // Number of failed requests (one row per status code seen) - RequestResults []*RequestResultCount `protobuf:"bytes,5,rep,name=request_results,json=requestResults,proto3" json:"request_results,omitempty"` - // Number of polls called inside completion queue - CqPollCount uint64 `protobuf:"varint,6,opt,name=cq_poll_count,json=cqPollCount,proto3" json:"cq_poll_count,omitempty"` - // Core library stats - CoreStats *core.Stats `protobuf:"bytes,7,opt,name=core_stats,json=coreStats,proto3" json:"core_stats,omitempty"` -} - -func (x *ClientStats) Reset() { - *x = ClientStats{} - if protoimpl.UnsafeEnabled { - mi := &file_grpc_testing_stats_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientStats) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientStats) ProtoMessage() {} - -func (x *ClientStats) ProtoReflect() protoreflect.Message { - mi := &file_grpc_testing_stats_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientStats.ProtoReflect.Descriptor instead. -func (*ClientStats) Descriptor() ([]byte, []int) { - return file_grpc_testing_stats_proto_rawDescGZIP(), []int{4} -} - -func (x *ClientStats) GetLatencies() *HistogramData { - if x != nil { - return x.Latencies - } - return nil -} - -func (x *ClientStats) GetTimeElapsed() float64 { - if x != nil { - return x.TimeElapsed - } - return 0 -} - -func (x *ClientStats) GetTimeUser() float64 { - if x != nil { - return x.TimeUser - } - return 0 -} - -func (x *ClientStats) GetTimeSystem() float64 { - if x != nil { - return x.TimeSystem - } - return 0 -} - -func (x *ClientStats) GetRequestResults() []*RequestResultCount { - if x != nil { - return x.RequestResults - } - return nil -} - -func (x *ClientStats) GetCqPollCount() uint64 { - if x != nil { - return x.CqPollCount - } - return 0 -} - -func (x *ClientStats) GetCoreStats() *core.Stats { - if x != nil { - return x.CoreStats - } - return nil -} - -var File_grpc_testing_stats_proto protoreflect.FileDescriptor - -var file_grpc_testing_stats_proto_rawDesc = []byte{ - 0x0a, 0x18, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x15, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x63, - 0x6f, 0x72, 0x65, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, - 0x8d, 0x02, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6c, 0x61, 0x70, 0x73, - 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, - 0x1f, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x12, 0x24, 0x0a, 0x0e, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, - 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x63, - 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x69, - 0x64, 0x6c, 0x65, 0x43, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x71, - 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x63, 0x71, 0x50, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, - 0x0a, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, - 0x74, 0x61, 0x74, 0x73, 0x52, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, - 0x54, 0x0a, 0x0f, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, - 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x73, - 0x73, 0x69, 0x62, 0x6c, 0x65, 0x22, 0xab, 0x01, 0x0a, 0x0d, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x06, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x07, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x61, - 0x78, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x6d, 0x61, - 0x78, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x03, 0x73, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x75, 0x6d, 0x5f, 0x6f, - 0x66, 0x5f, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0c, 0x73, 0x75, 0x6d, 0x4f, 0x66, 0x53, 0x71, 0x75, 0x61, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x12, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x22, 0xc9, 0x02, 0x0a, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x39, 0x0a, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x44, 0x61, 0x74, 0x61, - 0x52, 0x09, 0x6c, 0x61, 0x74, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x45, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x49, 0x0a, 0x0f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x71, 0x5f, 0x70, 0x6f, - 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x63, 0x71, 0x50, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x0a, 0x63, - 0x6f, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x73, 0x52, 0x09, 0x63, 0x6f, 0x72, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x42, 0x50, 0x0a, 0x0f, - 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, - 0x0a, 0x53, 0x74, 0x61, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2f, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, - 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_grpc_testing_stats_proto_rawDescOnce sync.Once - file_grpc_testing_stats_proto_rawDescData = file_grpc_testing_stats_proto_rawDesc -) - -func file_grpc_testing_stats_proto_rawDescGZIP() []byte { - file_grpc_testing_stats_proto_rawDescOnce.Do(func() { - file_grpc_testing_stats_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_testing_stats_proto_rawDescData) - }) - return file_grpc_testing_stats_proto_rawDescData -} - -var file_grpc_testing_stats_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_grpc_testing_stats_proto_goTypes = []interface{}{ - (*ServerStats)(nil), // 0: grpc.testing.ServerStats - (*HistogramParams)(nil), // 1: grpc.testing.HistogramParams - (*HistogramData)(nil), // 2: grpc.testing.HistogramData - (*RequestResultCount)(nil), // 3: grpc.testing.RequestResultCount - (*ClientStats)(nil), // 4: grpc.testing.ClientStats - (*core.Stats)(nil), // 5: grpc.core.Stats -} -var file_grpc_testing_stats_proto_depIdxs = []int32{ - 5, // 0: grpc.testing.ServerStats.core_stats:type_name -> grpc.core.Stats - 2, // 1: grpc.testing.ClientStats.latencies:type_name -> grpc.testing.HistogramData - 3, // 2: grpc.testing.ClientStats.request_results:type_name -> grpc.testing.RequestResultCount - 5, // 3: grpc.testing.ClientStats.core_stats:type_name -> grpc.core.Stats - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_grpc_testing_stats_proto_init() } -func file_grpc_testing_stats_proto_init() { - if File_grpc_testing_stats_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_grpc_testing_stats_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_stats_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HistogramParams); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_stats_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HistogramData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_stats_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RequestResultCount); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_grpc_testing_stats_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientStats); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_stats_proto_rawDesc, - NumEnums: 0, - NumMessages: 5, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_grpc_testing_stats_proto_goTypes, - DependencyIndexes: file_grpc_testing_stats_proto_depIdxs, - MessageInfos: file_grpc_testing_stats_proto_msgTypes, - }.Build() - File_grpc_testing_stats_proto = out.File - file_grpc_testing_stats_proto_rawDesc = nil - file_grpc_testing_stats_proto_goTypes = nil - file_grpc_testing_stats_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/test.pb.go b/gen/proto/grpc/testing/test.pb.go deleted file mode 100644 index 1cc7653..0000000 --- a/gen/proto/grpc/testing/test.pb.go +++ /dev/null @@ -1,229 +0,0 @@ -// Copyright 2015-2016 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/test.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_grpc_testing_test_proto protoreflect.FileDescriptor - -var file_grpc_testing_test_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x74, - 0x65, 0x73, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x2e, - 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0x18, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xcb, - 0x05, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, - 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x13, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x09, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, - 0x12, 0x43, 0x61, 0x63, 0x68, 0x65, 0x61, 0x62, 0x6c, 0x65, 0x55, 0x6e, 0x61, 0x72, 0x79, 0x43, - 0x61, 0x6c, 0x6c, 0x12, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1c, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6c, - 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, - 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x69, 0x0a, 0x12, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, - 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x69, 0x0a, 0x0e, 0x46, 0x75, 0x6c, 0x6c, 0x44, - 0x75, 0x70, 0x6c, 0x65, 0x78, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, - 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, - 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x69, 0x0a, 0x0e, 0x48, 0x61, 0x6c, 0x66, 0x44, 0x75, 0x70, 0x6c, 0x65, 0x78, - 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x28, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, - 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x43, 0x61, 0x6c, - 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3d, 0x0a, - 0x11, 0x55, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x55, 0x0a, 0x14, - 0x55, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x11, 0x55, 0x6e, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x65, 0x64, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, - 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x13, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x32, 0x89, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x1d, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x38, 0x0a, 0x04, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x13, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x32, - 0x86, 0x02, 0x0a, 0x18, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x63, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x26, - 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x84, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, - 0x63, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, - 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x4c, - 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, 0x63, 0x75, 0x6d, - 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x41, 0x63, - 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x8b, 0x01, 0x0a, 0x16, 0x58, 0x64, 0x73, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, - 0x67, 0x12, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x0d, 0x53, - 0x65, 0x74, 0x4e, 0x6f, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x12, 0x13, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x13, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x32, 0x7b, 0x0a, 0x1f, 0x58, 0x64, 0x73, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x58, 0x0a, 0x09, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x12, 0x24, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x4e, 0x0a, 0x1b, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, - 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_grpc_testing_test_proto_goTypes = []interface{}{ - (*Empty)(nil), // 0: grpc.testing.Empty - (*SimpleRequest)(nil), // 1: grpc.testing.SimpleRequest - (*StreamingOutputCallRequest)(nil), // 2: grpc.testing.StreamingOutputCallRequest - (*StreamingInputCallRequest)(nil), // 3: grpc.testing.StreamingInputCallRequest - (*ReconnectParams)(nil), // 4: grpc.testing.ReconnectParams - (*LoadBalancerStatsRequest)(nil), // 5: grpc.testing.LoadBalancerStatsRequest - (*LoadBalancerAccumulatedStatsRequest)(nil), // 6: grpc.testing.LoadBalancerAccumulatedStatsRequest - (*ClientConfigureRequest)(nil), // 7: grpc.testing.ClientConfigureRequest - (*SimpleResponse)(nil), // 8: grpc.testing.SimpleResponse - (*StreamingOutputCallResponse)(nil), // 9: grpc.testing.StreamingOutputCallResponse - (*StreamingInputCallResponse)(nil), // 10: grpc.testing.StreamingInputCallResponse - (*ReconnectInfo)(nil), // 11: grpc.testing.ReconnectInfo - (*LoadBalancerStatsResponse)(nil), // 12: grpc.testing.LoadBalancerStatsResponse - (*LoadBalancerAccumulatedStatsResponse)(nil), // 13: grpc.testing.LoadBalancerAccumulatedStatsResponse - (*ClientConfigureResponse)(nil), // 14: grpc.testing.ClientConfigureResponse -} -var file_grpc_testing_test_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.TestService.EmptyCall:input_type -> grpc.testing.Empty - 1, // 1: grpc.testing.TestService.UnaryCall:input_type -> grpc.testing.SimpleRequest - 1, // 2: grpc.testing.TestService.CacheableUnaryCall:input_type -> grpc.testing.SimpleRequest - 2, // 3: grpc.testing.TestService.StreamingOutputCall:input_type -> grpc.testing.StreamingOutputCallRequest - 3, // 4: grpc.testing.TestService.StreamingInputCall:input_type -> grpc.testing.StreamingInputCallRequest - 2, // 5: grpc.testing.TestService.FullDuplexCall:input_type -> grpc.testing.StreamingOutputCallRequest - 2, // 6: grpc.testing.TestService.HalfDuplexCall:input_type -> grpc.testing.StreamingOutputCallRequest - 0, // 7: grpc.testing.TestService.UnimplementedCall:input_type -> grpc.testing.Empty - 0, // 8: grpc.testing.UnimplementedService.UnimplementedCall:input_type -> grpc.testing.Empty - 4, // 9: grpc.testing.ReconnectService.RoundTripStart:input_type -> grpc.testing.ReconnectParams - 0, // 10: grpc.testing.ReconnectService.Stop:input_type -> grpc.testing.Empty - 5, // 11: grpc.testing.LoadBalancerStatsService.GetClientStats:input_type -> grpc.testing.LoadBalancerStatsRequest - 6, // 12: grpc.testing.LoadBalancerStatsService.GetClientAccumulatedStats:input_type -> grpc.testing.LoadBalancerAccumulatedStatsRequest - 0, // 13: grpc.testing.XdsUpdateHealthService.SetServing:input_type -> grpc.testing.Empty - 0, // 14: grpc.testing.XdsUpdateHealthService.SetNotServing:input_type -> grpc.testing.Empty - 7, // 15: grpc.testing.XdsUpdateClientConfigureService.Configure:input_type -> grpc.testing.ClientConfigureRequest - 0, // 16: grpc.testing.TestService.EmptyCall:output_type -> grpc.testing.Empty - 8, // 17: grpc.testing.TestService.UnaryCall:output_type -> grpc.testing.SimpleResponse - 8, // 18: grpc.testing.TestService.CacheableUnaryCall:output_type -> grpc.testing.SimpleResponse - 9, // 19: grpc.testing.TestService.StreamingOutputCall:output_type -> grpc.testing.StreamingOutputCallResponse - 10, // 20: grpc.testing.TestService.StreamingInputCall:output_type -> grpc.testing.StreamingInputCallResponse - 9, // 21: grpc.testing.TestService.FullDuplexCall:output_type -> grpc.testing.StreamingOutputCallResponse - 9, // 22: grpc.testing.TestService.HalfDuplexCall:output_type -> grpc.testing.StreamingOutputCallResponse - 0, // 23: grpc.testing.TestService.UnimplementedCall:output_type -> grpc.testing.Empty - 0, // 24: grpc.testing.UnimplementedService.UnimplementedCall:output_type -> grpc.testing.Empty - 0, // 25: grpc.testing.ReconnectService.RoundTripStart:output_type -> grpc.testing.Empty - 11, // 26: grpc.testing.ReconnectService.Stop:output_type -> grpc.testing.ReconnectInfo - 12, // 27: grpc.testing.LoadBalancerStatsService.GetClientStats:output_type -> grpc.testing.LoadBalancerStatsResponse - 13, // 28: grpc.testing.LoadBalancerStatsService.GetClientAccumulatedStats:output_type -> grpc.testing.LoadBalancerAccumulatedStatsResponse - 0, // 29: grpc.testing.XdsUpdateHealthService.SetServing:output_type -> grpc.testing.Empty - 0, // 30: grpc.testing.XdsUpdateHealthService.SetNotServing:output_type -> grpc.testing.Empty - 14, // 31: grpc.testing.XdsUpdateClientConfigureService.Configure:output_type -> grpc.testing.ClientConfigureResponse - 16, // [16:32] is the sub-list for method output_type - 0, // [0:16] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_grpc_testing_test_proto_init() } -func file_grpc_testing_test_proto_init() { - if File_grpc_testing_test_proto != nil { - return - } - file_grpc_testing_empty_proto_init() - file_grpc_testing_messages_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_test_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 6, - }, - GoTypes: file_grpc_testing_test_proto_goTypes, - DependencyIndexes: file_grpc_testing_test_proto_depIdxs, - }.Build() - File_grpc_testing_test_proto = out.File - file_grpc_testing_test_proto_rawDesc = nil - file_grpc_testing_test_proto_goTypes = nil - file_grpc_testing_test_proto_depIdxs = nil -} diff --git a/gen/proto/grpc/testing/worker_service.pb.go b/gen/proto/grpc/testing/worker_service.pb.go deleted file mode 100644 index 4d6f031..0000000 --- a/gen/proto/grpc/testing/worker_service.pb.go +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: grpc/testing/worker_service.proto - -package testing - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -var File_grpc_testing_worker_service_proto protoreflect.FileDescriptor - -var file_grpc_testing_worker_service_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x1a, 0x1a, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2f, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x97, 0x02, - 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x45, 0x0a, 0x09, 0x52, 0x75, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x18, 0x2e, 0x67, - 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x28, 0x01, 0x30, 0x01, 0x12, 0x45, 0x0a, 0x09, 0x52, 0x75, 0x6e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x67, 0x73, 0x1a, 0x1a, 0x2e, - 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x28, 0x01, 0x30, 0x01, 0x12, 0x42, 0x0a, - 0x09, 0x43, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x19, 0x2e, 0x67, 0x72, 0x70, - 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x51, 0x75, 0x69, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, - 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, - 0x6f, 0x69, 0x64, 0x1a, 0x12, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x56, 0x6f, 0x69, 0x64, 0x42, 0x58, 0x0a, 0x0f, 0x69, 0x6f, 0x2e, 0x67, 0x72, - 0x70, 0x63, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x42, 0x12, 0x57, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x67, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var file_grpc_testing_worker_service_proto_goTypes = []interface{}{ - (*ServerArgs)(nil), // 0: grpc.testing.ServerArgs - (*ClientArgs)(nil), // 1: grpc.testing.ClientArgs - (*CoreRequest)(nil), // 2: grpc.testing.CoreRequest - (*Void)(nil), // 3: grpc.testing.Void - (*ServerStatus)(nil), // 4: grpc.testing.ServerStatus - (*ClientStatus)(nil), // 5: grpc.testing.ClientStatus - (*CoreResponse)(nil), // 6: grpc.testing.CoreResponse -} -var file_grpc_testing_worker_service_proto_depIdxs = []int32{ - 0, // 0: grpc.testing.WorkerService.RunServer:input_type -> grpc.testing.ServerArgs - 1, // 1: grpc.testing.WorkerService.RunClient:input_type -> grpc.testing.ClientArgs - 2, // 2: grpc.testing.WorkerService.CoreCount:input_type -> grpc.testing.CoreRequest - 3, // 3: grpc.testing.WorkerService.QuitWorker:input_type -> grpc.testing.Void - 4, // 4: grpc.testing.WorkerService.RunServer:output_type -> grpc.testing.ServerStatus - 5, // 5: grpc.testing.WorkerService.RunClient:output_type -> grpc.testing.ClientStatus - 6, // 6: grpc.testing.WorkerService.CoreCount:output_type -> grpc.testing.CoreResponse - 3, // 7: grpc.testing.WorkerService.QuitWorker:output_type -> grpc.testing.Void - 4, // [4:8] is the sub-list for method output_type - 0, // [0:4] is the sub-list for method input_type - 0, // [0:0] is the sub-list for extension type_name - 0, // [0:0] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name -} - -func init() { file_grpc_testing_worker_service_proto_init() } -func file_grpc_testing_worker_service_proto_init() { - if File_grpc_testing_worker_service_proto != nil { - return - } - file_grpc_testing_control_proto_init() - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_grpc_testing_worker_service_proto_rawDesc, - NumEnums: 0, - NumMessages: 0, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_grpc_testing_worker_service_proto_goTypes, - DependencyIndexes: file_grpc_testing_worker_service_proto_depIdxs, - }.Build() - File_grpc_testing_worker_service_proto = out.File - file_grpc_testing_worker_service_proto_rawDesc = nil - file_grpc_testing_worker_service_proto_goTypes = nil - file_grpc_testing_worker_service_proto_depIdxs = nil -} diff --git a/gen/proto/istio/v1/auth/ca.pb.go b/gen/proto/istio/v1/auth/ca.pb.go deleted file mode 100644 index 9ce80b4..0000000 --- a/gen/proto/istio/v1/auth/ca.pb.go +++ /dev/null @@ -1,671 +0,0 @@ -// Copyright Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: istio/v1/auth/ca.proto - -// Keep this package for backward compatibility. - -package auth - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// `NullValue` is a singleton enumeration to represent the null value for the -// `Value` type union. -// -// The JSON representation for `NullValue` is JSON `null`. -type NullValue int32 - -const ( - // Null value. - NullValue_NULL_VALUE NullValue = 0 -) - -// Enum value maps for NullValue. -var ( - NullValue_name = map[int32]string{ - 0: "NULL_VALUE", - } - NullValue_value = map[string]int32{ - "NULL_VALUE": 0, - } -) - -func (x NullValue) Enum() *NullValue { - p := new(NullValue) - *p = x - return p -} - -func (x NullValue) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (NullValue) Descriptor() protoreflect.EnumDescriptor { - return file_istio_v1_auth_ca_proto_enumTypes[0].Descriptor() -} - -func (NullValue) Type() protoreflect.EnumType { - return &file_istio_v1_auth_ca_proto_enumTypes[0] -} - -func (x NullValue) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use NullValue.Descriptor instead. -func (NullValue) EnumDescriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{0} -} - -// Certificate request message. The authentication should be based on: -// 1. Bearer tokens carried in the side channel; -// 2. Client-side certificate via Mutual TLS handshake. -// Note: the service implementation is REQUIRED to verify the authenticated caller is authorize to -// all SANs in the CSR. The server side may overwrite any requested certificate field based on its -// policies. -type IstioCertificateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // PEM-encoded certificate request. - // The public key in the CSR is used to generate the certificate, - // and other fields in the generated certificate may be overwritten by the CA. - Csr string `protobuf:"bytes,1,opt,name=csr,proto3" json:"csr,omitempty"` - // Optional: requested certificate validity period, in seconds. - ValidityDuration int64 `protobuf:"varint,3,opt,name=validity_duration,json=validityDuration,proto3" json:"validity_duration,omitempty"` - // $hide_from_docs - // Optional: Opaque metadata provided by the XDS node to Istio. - // Supported metadata: WorkloadName, WorkloadIP, ClusterID - Metadata *Struct `protobuf:"bytes,4,opt,name=metadata,proto3" json:"metadata,omitempty"` -} - -func (x *IstioCertificateRequest) Reset() { - *x = IstioCertificateRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_istio_v1_auth_ca_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IstioCertificateRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IstioCertificateRequest) ProtoMessage() {} - -func (x *IstioCertificateRequest) ProtoReflect() protoreflect.Message { - mi := &file_istio_v1_auth_ca_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IstioCertificateRequest.ProtoReflect.Descriptor instead. -func (*IstioCertificateRequest) Descriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{0} -} - -func (x *IstioCertificateRequest) GetCsr() string { - if x != nil { - return x.Csr - } - return "" -} - -func (x *IstioCertificateRequest) GetValidityDuration() int64 { - if x != nil { - return x.ValidityDuration - } - return 0 -} - -func (x *IstioCertificateRequest) GetMetadata() *Struct { - if x != nil { - return x.Metadata - } - return nil -} - -// Certificate response message. -type IstioCertificateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // PEM-encoded certificate chain. - // The leaf cert is the first element, and the root cert is the last element. - CertChain []string `protobuf:"bytes,1,rep,name=cert_chain,json=certChain,proto3" json:"cert_chain,omitempty"` -} - -func (x *IstioCertificateResponse) Reset() { - *x = IstioCertificateResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_istio_v1_auth_ca_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IstioCertificateResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IstioCertificateResponse) ProtoMessage() {} - -func (x *IstioCertificateResponse) ProtoReflect() protoreflect.Message { - mi := &file_istio_v1_auth_ca_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IstioCertificateResponse.ProtoReflect.Descriptor instead. -func (*IstioCertificateResponse) Descriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{1} -} - -func (x *IstioCertificateResponse) GetCertChain() []string { - if x != nil { - return x.CertChain - } - return nil -} - -// Duplicated to avoid dependnecy to struct.proto -// `Struct` represents a structured data value, consisting of fields -// which map to dynamically typed values. In some languages, `Struct` -// might be supported by a native representation. For example, in -// scripting languages like JS a struct is represented as an -// object. The details of that representation are described together -// with the proto support for the language. -// -// The JSON representation for `Struct` is JSON object. -type Struct struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Unordered map of dynamically typed values. - Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Struct) Reset() { - *x = Struct{} - if protoimpl.UnsafeEnabled { - mi := &file_istio_v1_auth_ca_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Struct) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Struct) ProtoMessage() {} - -func (x *Struct) ProtoReflect() protoreflect.Message { - mi := &file_istio_v1_auth_ca_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Struct.ProtoReflect.Descriptor instead. -func (*Struct) Descriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{2} -} - -func (x *Struct) GetFields() map[string]*Value { - if x != nil { - return x.Fields - } - return nil -} - -// `Value` represents a dynamically typed value which can be either -// null, a number, a string, a boolean, a recursive struct value, or a -// list of values. A producer of value is expected to set one of that -// variants, absence of any variant indicates an error. -// -// The JSON representation for `Value` is JSON value. -type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The kind of value. - // - // Types that are assignable to Kind: - // *Value_NullValue - // *Value_NumberValue - // *Value_StringValue - // *Value_BoolValue - // *Value_StructValue - // *Value_ListValue - Kind isValue_Kind `protobuf_oneof:"kind"` -} - -func (x *Value) Reset() { - *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_istio_v1_auth_ca_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Value) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Value) ProtoMessage() {} - -func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_istio_v1_auth_ca_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Value.ProtoReflect.Descriptor instead. -func (*Value) Descriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{3} -} - -func (m *Value) GetKind() isValue_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *Value) GetNullValue() NullValue { - if x, ok := x.GetKind().(*Value_NullValue); ok { - return x.NullValue - } - return NullValue_NULL_VALUE -} - -func (x *Value) GetNumberValue() float64 { - if x, ok := x.GetKind().(*Value_NumberValue); ok { - return x.NumberValue - } - return 0 -} - -func (x *Value) GetStringValue() string { - if x, ok := x.GetKind().(*Value_StringValue); ok { - return x.StringValue - } - return "" -} - -func (x *Value) GetBoolValue() bool { - if x, ok := x.GetKind().(*Value_BoolValue); ok { - return x.BoolValue - } - return false -} - -func (x *Value) GetStructValue() *Struct { - if x, ok := x.GetKind().(*Value_StructValue); ok { - return x.StructValue - } - return nil -} - -func (x *Value) GetListValue() *ListValue { - if x, ok := x.GetKind().(*Value_ListValue); ok { - return x.ListValue - } - return nil -} - -type isValue_Kind interface { - isValue_Kind() -} - -type Value_NullValue struct { - // Represents a null value. - NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=istio.v1.auth.NullValue,oneof"` -} - -type Value_NumberValue struct { - // Represents a double value. - NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,proto3,oneof"` -} - -type Value_StringValue struct { - // Represents a string value. - StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"` -} - -type Value_BoolValue struct { - // Represents a boolean value. - BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"` -} - -type Value_StructValue struct { - // Represents a structured value. - StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,proto3,oneof"` -} - -type Value_ListValue struct { - // Represents a repeated `Value`. - ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,proto3,oneof"` -} - -func (*Value_NullValue) isValue_Kind() {} - -func (*Value_NumberValue) isValue_Kind() {} - -func (*Value_StringValue) isValue_Kind() {} - -func (*Value_BoolValue) isValue_Kind() {} - -func (*Value_StructValue) isValue_Kind() {} - -func (*Value_ListValue) isValue_Kind() {} - -// `ListValue` is a wrapper around a repeated field of values. -// -// The JSON representation for `ListValue` is JSON array. -type ListValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Repeated field of dynamically typed values. - Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` -} - -func (x *ListValue) Reset() { - *x = ListValue{} - if protoimpl.UnsafeEnabled { - mi := &file_istio_v1_auth_ca_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListValue) ProtoMessage() {} - -func (x *ListValue) ProtoReflect() protoreflect.Message { - mi := &file_istio_v1_auth_ca_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListValue.ProtoReflect.Descriptor instead. -func (*ListValue) Descriptor() ([]byte, []int) { - return file_istio_v1_auth_ca_proto_rawDescGZIP(), []int{4} -} - -func (x *ListValue) GetValues() []*Value { - if x != nil { - return x.Values - } - return nil -} - -var File_istio_v1_auth_ca_proto protoreflect.FileDescriptor - -var file_istio_v1_auth_ca_proto_rawDesc = []byte{ - 0x0a, 0x16, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, - 0x63, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x22, 0x8b, 0x01, 0x0a, 0x17, 0x49, 0x73, 0x74, 0x69, - 0x6f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x73, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x63, 0x73, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, - 0x79, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x39, 0x0a, 0x18, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x63, 0x65, 0x72, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x22, 0x94, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x39, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x4f, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, - 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xac, 0x02, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, - 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x39, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x2a, 0x1b, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, - 0x0a, 0x0a, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x32, 0x81, - 0x01, 0x0a, 0x17, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x66, 0x0a, 0x11, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, - 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, - 0x49, 0x73, 0x74, 0x69, 0x6f, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x76, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x75, 0x67, 0x61, 0x74, 0x65, 0x2f, 0x67, - 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2f, 0x76, - 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_istio_v1_auth_ca_proto_rawDescOnce sync.Once - file_istio_v1_auth_ca_proto_rawDescData = file_istio_v1_auth_ca_proto_rawDesc -) - -func file_istio_v1_auth_ca_proto_rawDescGZIP() []byte { - file_istio_v1_auth_ca_proto_rawDescOnce.Do(func() { - file_istio_v1_auth_ca_proto_rawDescData = protoimpl.X.CompressGZIP(file_istio_v1_auth_ca_proto_rawDescData) - }) - return file_istio_v1_auth_ca_proto_rawDescData -} - -var file_istio_v1_auth_ca_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_istio_v1_auth_ca_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_istio_v1_auth_ca_proto_goTypes = []interface{}{ - (NullValue)(0), // 0: istio.v1.auth.NullValue - (*IstioCertificateRequest)(nil), // 1: istio.v1.auth.IstioCertificateRequest - (*IstioCertificateResponse)(nil), // 2: istio.v1.auth.IstioCertificateResponse - (*Struct)(nil), // 3: istio.v1.auth.Struct - (*Value)(nil), // 4: istio.v1.auth.Value - (*ListValue)(nil), // 5: istio.v1.auth.ListValue - nil, // 6: istio.v1.auth.Struct.FieldsEntry -} -var file_istio_v1_auth_ca_proto_depIdxs = []int32{ - 3, // 0: istio.v1.auth.IstioCertificateRequest.metadata:type_name -> istio.v1.auth.Struct - 6, // 1: istio.v1.auth.Struct.fields:type_name -> istio.v1.auth.Struct.FieldsEntry - 0, // 2: istio.v1.auth.Value.null_value:type_name -> istio.v1.auth.NullValue - 3, // 3: istio.v1.auth.Value.struct_value:type_name -> istio.v1.auth.Struct - 5, // 4: istio.v1.auth.Value.list_value:type_name -> istio.v1.auth.ListValue - 4, // 5: istio.v1.auth.ListValue.values:type_name -> istio.v1.auth.Value - 4, // 6: istio.v1.auth.Struct.FieldsEntry.value:type_name -> istio.v1.auth.Value - 1, // 7: istio.v1.auth.IstioCertificateService.CreateCertificate:input_type -> istio.v1.auth.IstioCertificateRequest - 2, // 8: istio.v1.auth.IstioCertificateService.CreateCertificate:output_type -> istio.v1.auth.IstioCertificateResponse - 8, // [8:9] is the sub-list for method output_type - 7, // [7:8] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_istio_v1_auth_ca_proto_init() } -func file_istio_v1_auth_ca_proto_init() { - if File_istio_v1_auth_ca_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_istio_v1_auth_ca_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IstioCertificateRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_istio_v1_auth_ca_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IstioCertificateResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_istio_v1_auth_ca_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Struct); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_istio_v1_auth_ca_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_istio_v1_auth_ca_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_istio_v1_auth_ca_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*Value_NullValue)(nil), - (*Value_NumberValue)(nil), - (*Value_StringValue)(nil), - (*Value_BoolValue)(nil), - (*Value_StructValue)(nil), - (*Value_ListValue)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_istio_v1_auth_ca_proto_rawDesc, - NumEnums: 1, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_istio_v1_auth_ca_proto_goTypes, - DependencyIndexes: file_istio_v1_auth_ca_proto_depIdxs, - EnumInfos: file_istio_v1_auth_ca_proto_enumTypes, - MessageInfos: file_istio_v1_auth_ca_proto_msgTypes, - }.Build() - File_istio_v1_auth_ca_proto = out.File - file_istio_v1_auth_ca_proto_rawDesc = nil - file_istio_v1_auth_ca_proto_goTypes = nil - file_istio_v1_auth_ca_proto_depIdxs = nil -} diff --git a/gen/proto/konectivity.pb.go b/gen/proto/konectivity.pb.go deleted file mode 100644 index 1adc543..0000000 --- a/gen/proto/konectivity.pb.go +++ /dev/null @@ -1,865 +0,0 @@ -// Copyright The Kubernetes Authors. -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: konectivity.proto - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type PacketType int32 - -const ( - PacketType_DIAL_REQ PacketType = 0 - PacketType_DIAL_RSP PacketType = 1 - PacketType_CLOSE_REQ PacketType = 2 - PacketType_CLOSE_RSP PacketType = 3 - PacketType_DATA PacketType = 4 - PacketType_DIAL_CLS PacketType = 5 -) - -// Enum value maps for PacketType. -var ( - PacketType_name = map[int32]string{ - 0: "DIAL_REQ", - 1: "DIAL_RSP", - 2: "CLOSE_REQ", - 3: "CLOSE_RSP", - 4: "DATA", - 5: "DIAL_CLS", - } - PacketType_value = map[string]int32{ - "DIAL_REQ": 0, - "DIAL_RSP": 1, - "CLOSE_REQ": 2, - "CLOSE_RSP": 3, - "DATA": 4, - "DIAL_CLS": 5, - } -) - -func (x PacketType) Enum() *PacketType { - p := new(PacketType) - *p = x - return p -} - -func (x PacketType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PacketType) Descriptor() protoreflect.EnumDescriptor { - return file_konectivity_proto_enumTypes[0].Descriptor() -} - -func (PacketType) Type() protoreflect.EnumType { - return &file_konectivity_proto_enumTypes[0] -} - -func (x PacketType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use PacketType.Descriptor instead. -func (PacketType) EnumDescriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{0} -} - -type Error int32 - -const ( - Error_EOF Error = 0 // ... -) - -// Enum value maps for Error. -var ( - Error_name = map[int32]string{ - 0: "EOF", - } - Error_value = map[string]int32{ - "EOF": 0, - } -) - -func (x Error) Enum() *Error { - p := new(Error) - *p = x - return p -} - -func (x Error) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Error) Descriptor() protoreflect.EnumDescriptor { - return file_konectivity_proto_enumTypes[1].Descriptor() -} - -func (Error) Type() protoreflect.EnumType { - return &file_konectivity_proto_enumTypes[1] -} - -func (x Error) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Error.Descriptor instead. -func (Error) EnumDescriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{1} -} - -type Packet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type PacketType `protobuf:"varint,1,opt,name=type,proto3,enum=PacketType" json:"type,omitempty"` - // Types that are assignable to Payload: - // *Packet_DialRequest - // *Packet_DialResponse - // *Packet_Data - // *Packet_CloseRequest - // *Packet_CloseResponse - // *Packet_CloseDial - Payload isPacket_Payload `protobuf_oneof:"payload"` -} - -func (x *Packet) Reset() { - *x = Packet{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Packet) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Packet) ProtoMessage() {} - -func (x *Packet) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Packet.ProtoReflect.Descriptor instead. -func (*Packet) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{0} -} - -func (x *Packet) GetType() PacketType { - if x != nil { - return x.Type - } - return PacketType_DIAL_REQ -} - -func (m *Packet) GetPayload() isPacket_Payload { - if m != nil { - return m.Payload - } - return nil -} - -func (x *Packet) GetDialRequest() *DialRequest { - if x, ok := x.GetPayload().(*Packet_DialRequest); ok { - return x.DialRequest - } - return nil -} - -func (x *Packet) GetDialResponse() *DialResponse { - if x, ok := x.GetPayload().(*Packet_DialResponse); ok { - return x.DialResponse - } - return nil -} - -func (x *Packet) GetData() *Data { - if x, ok := x.GetPayload().(*Packet_Data); ok { - return x.Data - } - return nil -} - -func (x *Packet) GetCloseRequest() *CloseRequest { - if x, ok := x.GetPayload().(*Packet_CloseRequest); ok { - return x.CloseRequest - } - return nil -} - -func (x *Packet) GetCloseResponse() *CloseResponse { - if x, ok := x.GetPayload().(*Packet_CloseResponse); ok { - return x.CloseResponse - } - return nil -} - -func (x *Packet) GetCloseDial() *CloseDial { - if x, ok := x.GetPayload().(*Packet_CloseDial); ok { - return x.CloseDial - } - return nil -} - -type isPacket_Payload interface { - isPacket_Payload() -} - -type Packet_DialRequest struct { - DialRequest *DialRequest `protobuf:"bytes,2,opt,name=dialRequest,proto3,oneof"` -} - -type Packet_DialResponse struct { - DialResponse *DialResponse `protobuf:"bytes,3,opt,name=dialResponse,proto3,oneof"` -} - -type Packet_Data struct { - Data *Data `protobuf:"bytes,4,opt,name=data,proto3,oneof"` -} - -type Packet_CloseRequest struct { - CloseRequest *CloseRequest `protobuf:"bytes,5,opt,name=closeRequest,proto3,oneof"` -} - -type Packet_CloseResponse struct { - CloseResponse *CloseResponse `protobuf:"bytes,6,opt,name=closeResponse,proto3,oneof"` -} - -type Packet_CloseDial struct { - CloseDial *CloseDial `protobuf:"bytes,7,opt,name=closeDial,proto3,oneof"` -} - -func (*Packet_DialRequest) isPacket_Payload() {} - -func (*Packet_DialResponse) isPacket_Payload() {} - -func (*Packet_Data) isPacket_Payload() {} - -func (*Packet_CloseRequest) isPacket_Payload() {} - -func (*Packet_CloseResponse) isPacket_Payload() {} - -func (*Packet_CloseDial) isPacket_Payload() {} - -type DialRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // tcp or udp? - Protocol string `protobuf:"bytes,1,opt,name=protocol,proto3" json:"protocol,omitempty"` - // node:port - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - // random id for client, maybe should be longer - Random int64 `protobuf:"varint,3,opt,name=random,proto3" json:"random,omitempty"` -} - -func (x *DialRequest) Reset() { - *x = DialRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DialRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DialRequest) ProtoMessage() {} - -func (x *DialRequest) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DialRequest.ProtoReflect.Descriptor instead. -func (*DialRequest) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{1} -} - -func (x *DialRequest) GetProtocol() string { - if x != nil { - return x.Protocol - } - return "" -} - -func (x *DialRequest) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *DialRequest) GetRandom() int64 { - if x != nil { - return x.Random - } - return 0 -} - -type DialResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // error failed reason; enum? - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - // connectID indicates the identifier of the connection - ConnectID int64 `protobuf:"varint,2,opt,name=connectID,proto3" json:"connectID,omitempty"` - // random copied from DialRequest - Random int64 `protobuf:"varint,3,opt,name=random,proto3" json:"random,omitempty"` -} - -func (x *DialResponse) Reset() { - *x = DialResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DialResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DialResponse) ProtoMessage() {} - -func (x *DialResponse) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DialResponse.ProtoReflect.Descriptor instead. -func (*DialResponse) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{2} -} - -func (x *DialResponse) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -func (x *DialResponse) GetConnectID() int64 { - if x != nil { - return x.ConnectID - } - return 0 -} - -func (x *DialResponse) GetRandom() int64 { - if x != nil { - return x.Random - } - return 0 -} - -type CloseRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // connectID of the stream to close - ConnectID int64 `protobuf:"varint,1,opt,name=connectID,proto3" json:"connectID,omitempty"` -} - -func (x *CloseRequest) Reset() { - *x = CloseRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloseRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloseRequest) ProtoMessage() {} - -func (x *CloseRequest) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloseRequest.ProtoReflect.Descriptor instead. -func (*CloseRequest) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{3} -} - -func (x *CloseRequest) GetConnectID() int64 { - if x != nil { - return x.ConnectID - } - return 0 -} - -type CloseResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // error message - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - // connectID indicates the identifier of the connection - ConnectID int64 `protobuf:"varint,2,opt,name=connectID,proto3" json:"connectID,omitempty"` -} - -func (x *CloseResponse) Reset() { - *x = CloseResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloseResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloseResponse) ProtoMessage() {} - -func (x *CloseResponse) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloseResponse.ProtoReflect.Descriptor instead. -func (*CloseResponse) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{4} -} - -func (x *CloseResponse) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -func (x *CloseResponse) GetConnectID() int64 { - if x != nil { - return x.ConnectID - } - return 0 -} - -type CloseDial struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // random id of the DialRequest - Random int64 `protobuf:"varint,1,opt,name=random,proto3" json:"random,omitempty"` -} - -func (x *CloseDial) Reset() { - *x = CloseDial{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CloseDial) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloseDial) ProtoMessage() {} - -func (x *CloseDial) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CloseDial.ProtoReflect.Descriptor instead. -func (*CloseDial) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{5} -} - -func (x *CloseDial) GetRandom() int64 { - if x != nil { - return x.Random - } - return 0 -} - -type Data struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // connectID to connect to - ConnectID int64 `protobuf:"varint,1,opt,name=connectID,proto3" json:"connectID,omitempty"` - // error message if error happens - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` - // stream data - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *Data) Reset() { - *x = Data{} - if protoimpl.UnsafeEnabled { - mi := &file_konectivity_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Data) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Data) ProtoMessage() {} - -func (x *Data) ProtoReflect() protoreflect.Message { - mi := &file_konectivity_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Data.ProtoReflect.Descriptor instead. -func (*Data) Descriptor() ([]byte, []int) { - return file_konectivity_proto_rawDescGZIP(), []int{6} -} - -func (x *Data) GetConnectID() int64 { - if x != nil { - return x.ConnectID - } - return 0 -} - -func (x *Data) GetError() string { - if x != nil { - return x.Error - } - return "" -} - -func (x *Data) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -var File_konectivity_proto protoreflect.FileDescriptor - -var file_konectivity_proto_rawDesc = []byte{ - 0x0a, 0x11, 0x6b, 0x6f, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x22, 0xd1, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1f, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0b, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x30, 0x0a, 0x0b, 0x64, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x44, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x33, 0x0a, 0x0c, 0x64, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x44, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x69, 0x61, 0x6c, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x05, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x33, 0x0a, 0x0c, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x43, 0x6c, 0x6f, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x0d, 0x63, 0x6c, 0x6f, 0x73, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, - 0x00, 0x52, 0x0d, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2a, 0x0a, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x69, 0x61, 0x6c, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x69, 0x61, 0x6c, 0x48, - 0x00, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x69, 0x61, 0x6c, 0x42, 0x09, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x5b, 0x0a, 0x0b, 0x44, 0x69, 0x61, 0x6c, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x61, - 0x6e, 0x64, 0x6f, 0x6d, 0x22, 0x5a, 0x0a, 0x0c, 0x44, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x64, - 0x6f, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x22, 0x2c, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x22, 0x43, - 0x0a, 0x0d, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x22, 0x23, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x44, 0x69, 0x61, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x06, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x22, 0x4e, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x49, 0x44, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x5e, 0x0a, 0x0a, 0x50, 0x61, 0x63, 0x6b, - 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x41, 0x4c, 0x5f, 0x52, - 0x45, 0x51, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x41, 0x4c, 0x5f, 0x52, 0x53, 0x50, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x10, - 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x5f, 0x52, 0x53, 0x50, 0x10, 0x03, - 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, - 0x41, 0x4c, 0x5f, 0x43, 0x4c, 0x53, 0x10, 0x05, 0x2a, 0x10, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x4f, 0x46, 0x10, 0x00, 0x32, 0x2f, 0x0a, 0x0c, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x05, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x12, 0x07, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x1a, 0x07, 0x2e, 0x50, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x32, 0x31, 0x0a, 0x0c, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x07, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x07, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x1a, - 0x07, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x42, 0x24, - 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x75, 0x67, 0x61, 0x74, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_konectivity_proto_rawDescOnce sync.Once - file_konectivity_proto_rawDescData = file_konectivity_proto_rawDesc -) - -func file_konectivity_proto_rawDescGZIP() []byte { - file_konectivity_proto_rawDescOnce.Do(func() { - file_konectivity_proto_rawDescData = protoimpl.X.CompressGZIP(file_konectivity_proto_rawDescData) - }) - return file_konectivity_proto_rawDescData -} - -var file_konectivity_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_konectivity_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_konectivity_proto_goTypes = []interface{}{ - (PacketType)(0), // 0: PacketType - (Error)(0), // 1: Error - (*Packet)(nil), // 2: Packet - (*DialRequest)(nil), // 3: DialRequest - (*DialResponse)(nil), // 4: DialResponse - (*CloseRequest)(nil), // 5: CloseRequest - (*CloseResponse)(nil), // 6: CloseResponse - (*CloseDial)(nil), // 7: CloseDial - (*Data)(nil), // 8: Data -} -var file_konectivity_proto_depIdxs = []int32{ - 0, // 0: Packet.type:type_name -> PacketType - 3, // 1: Packet.dialRequest:type_name -> DialRequest - 4, // 2: Packet.dialResponse:type_name -> DialResponse - 8, // 3: Packet.data:type_name -> Data - 5, // 4: Packet.closeRequest:type_name -> CloseRequest - 6, // 5: Packet.closeResponse:type_name -> CloseResponse - 7, // 6: Packet.closeDial:type_name -> CloseDial - 2, // 7: ProxyService.Proxy:input_type -> Packet - 2, // 8: AgentService.Connect:input_type -> Packet - 2, // 9: ProxyService.Proxy:output_type -> Packet - 2, // 10: AgentService.Connect:output_type -> Packet - 9, // [9:11] is the sub-list for method output_type - 7, // [7:9] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_konectivity_proto_init() } -func file_konectivity_proto_init() { - if File_konectivity_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_konectivity_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Packet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DialRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DialResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloseRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloseResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CloseDial); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_konectivity_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Data); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_konectivity_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*Packet_DialRequest)(nil), - (*Packet_DialResponse)(nil), - (*Packet_Data)(nil), - (*Packet_CloseRequest)(nil), - (*Packet_CloseResponse)(nil), - (*Packet_CloseDial)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_konectivity_proto_rawDesc, - NumEnums: 2, - NumMessages: 7, - NumExtensions: 0, - NumServices: 2, - }, - GoTypes: file_konectivity_proto_goTypes, - DependencyIndexes: file_konectivity_proto_depIdxs, - EnumInfos: file_konectivity_proto_enumTypes, - MessageInfos: file_konectivity_proto_msgTypes, - }.Build() - File_konectivity_proto = out.File - file_konectivity_proto_rawDesc = nil - file_konectivity_proto_goTypes = nil - file_konectivity_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/destination_rule.pb.go b/gen/proto/networking/v1beta1/destination_rule.pb.go deleted file mode 100644 index c1566e7..0000000 --- a/gen/proto/networking/v1beta1/destination_rule.pb.go +++ /dev/null @@ -1,2983 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/destination_rule.proto - -// $schema: istio.networking.v1beta1.DestinationRule -// $title: Destination Rule -// $description: Configuration affecting load balancing, outlier detection, etc. -// $location: https://istio.io/docs/reference/config/networking/destination-rule.html -// $aliases: [/docs/reference/config/networking/v1beta1/destination-rule] -// $mode: none - -// `DestinationRule` defines policies that apply to traffic intended for a -// service after routing has occurred. These rules specify configuration -// for load balancing, connection pool size from the sidecar, and outlier -// detection settings to detect and evict unhealthy hosts from the load -// balancing pool. For example, a simple load balancing policy for the -// ratings service would look as follows: -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// ``` -// {{}} -// {{}} -// -// Version specific policies can be specified by defining a named -// `subset` and overriding the settings specified at the service level. The -// following rule uses a round robin load balancing policy for all traffic -// going to a subset named testversion that is composed of endpoints (e.g., -// pods) with labels (version:v3). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// **Note:** Policies specified for subsets will not take effect until -// a route rule explicitly sends traffic to this subset. -// -// Traffic policies can be customized to specific ports as well. The -// following rule uses the least connection load balancing policy for all -// traffic to port 80, while uses a round robin load balancing setting for -// traffic to the port 9080. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings-port -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: # Apply to all ports -// portLevelSettings: -// - port: -// number: 80 -// loadBalancer: -// simple: LEAST_CONN -// - port: -// number: 9080 -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings-port -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: # Apply to all ports -// portLevelSettings: -// - port: -// number: 80 -// loadBalancer: -// simple: LEAST_CONN -// - port: -// number: 9080 -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Standard load balancing algorithms that require no tuning. -type LoadBalancerSettings_SimpleLB int32 - -const ( - // Round Robin policy. Default - LoadBalancerSettings_ROUND_ROBIN LoadBalancerSettings_SimpleLB = 0 - // The least request load balancer uses an O(1) algorithm which selects - // two random healthy hosts and picks the host which has fewer active - // requests. - LoadBalancerSettings_LEAST_CONN LoadBalancerSettings_SimpleLB = 1 - // The random load balancer selects a random healthy host. The random - // load balancer generally performs better than round robin if no health - // checking policy is configured. - LoadBalancerSettings_RANDOM LoadBalancerSettings_SimpleLB = 2 - // This option will forward the connection to the original IP address - // requested by the caller without doing any form of load - // balancing. This option must be used with care. It is meant for - // advanced use cases. Refer to Original Destination load balancer in - // Envoy for further details. - LoadBalancerSettings_PASSTHROUGH LoadBalancerSettings_SimpleLB = 3 -) - -// Enum value maps for LoadBalancerSettings_SimpleLB. -var ( - LoadBalancerSettings_SimpleLB_name = map[int32]string{ - 0: "ROUND_ROBIN", - 1: "LEAST_CONN", - 2: "RANDOM", - 3: "PASSTHROUGH", - } - LoadBalancerSettings_SimpleLB_value = map[string]int32{ - "ROUND_ROBIN": 0, - "LEAST_CONN": 1, - "RANDOM": 2, - "PASSTHROUGH": 3, - } -) - -func (x LoadBalancerSettings_SimpleLB) Enum() *LoadBalancerSettings_SimpleLB { - p := new(LoadBalancerSettings_SimpleLB) - *p = x - return p -} - -func (x LoadBalancerSettings_SimpleLB) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (LoadBalancerSettings_SimpleLB) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_destination_rule_proto_enumTypes[0].Descriptor() -} - -func (LoadBalancerSettings_SimpleLB) Type() protoreflect.EnumType { - return &file_networking_v1beta1_destination_rule_proto_enumTypes[0] -} - -func (x LoadBalancerSettings_SimpleLB) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use LoadBalancerSettings_SimpleLB.Descriptor instead. -func (LoadBalancerSettings_SimpleLB) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{3, 0} -} - -// Policy for upgrading http1.1 connections to http2. -type ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy int32 - -const ( - // Use the global default. - ConnectionPoolSettings_HTTPSettings_DEFAULT ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy = 0 - // Do not upgrade the connection to http2. - // This opt-out option overrides the default. - ConnectionPoolSettings_HTTPSettings_DO_NOT_UPGRADE ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy = 1 - // Upgrade the connection to http2. - // This opt-in option overrides the default. - ConnectionPoolSettings_HTTPSettings_UPGRADE ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy = 2 -) - -// Enum value maps for ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy. -var ( - ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy_name = map[int32]string{ - 0: "DEFAULT", - 1: "DO_NOT_UPGRADE", - 2: "UPGRADE", - } - ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy_value = map[string]int32{ - "DEFAULT": 0, - "DO_NOT_UPGRADE": 1, - "UPGRADE": 2, - } -) - -func (x ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) Enum() *ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy { - p := new(ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) - *p = x - return p -} - -func (x ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_destination_rule_proto_enumTypes[1].Descriptor() -} - -func (ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) Type() protoreflect.EnumType { - return &file_networking_v1beta1_destination_rule_proto_enumTypes[1] -} - -func (x ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy.Descriptor instead. -func (ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{4, 1, 0} -} - -// TLS connection mode -type ClientTLSSettings_TLSmode int32 - -const ( - // Do not setup a TLS connection to the upstream endpoint. - ClientTLSSettings_DISABLE ClientTLSSettings_TLSmode = 0 - // Originate a TLS connection to the upstream endpoint. - ClientTLSSettings_SIMPLE ClientTLSSettings_TLSmode = 1 - // Secure connections to the upstream using mutual TLS by presenting - // client certificates for authentication. - ClientTLSSettings_MUTUAL ClientTLSSettings_TLSmode = 2 - // Secure connections to the upstream using mutual TLS by presenting - // client certificates for authentication. - // Compared to Mutual mode, this mode uses certificates generated - // automatically by Istio for mTLS authentication. When this mode is - // used, all other fields in `ClientTLSSettings` should be empty. - ClientTLSSettings_ISTIO_MUTUAL ClientTLSSettings_TLSmode = 3 -) - -// Enum value maps for ClientTLSSettings_TLSmode. -var ( - ClientTLSSettings_TLSmode_name = map[int32]string{ - 0: "DISABLE", - 1: "SIMPLE", - 2: "MUTUAL", - 3: "ISTIO_MUTUAL", - } - ClientTLSSettings_TLSmode_value = map[string]int32{ - "DISABLE": 0, - "SIMPLE": 1, - "MUTUAL": 2, - "ISTIO_MUTUAL": 3, - } -) - -func (x ClientTLSSettings_TLSmode) Enum() *ClientTLSSettings_TLSmode { - p := new(ClientTLSSettings_TLSmode) - *p = x - return p -} - -func (x ClientTLSSettings_TLSmode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ClientTLSSettings_TLSmode) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_destination_rule_proto_enumTypes[2].Descriptor() -} - -func (ClientTLSSettings_TLSmode) Type() protoreflect.EnumType { - return &file_networking_v1beta1_destination_rule_proto_enumTypes[2] -} - -func (x ClientTLSSettings_TLSmode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ClientTLSSettings_TLSmode.Descriptor instead. -func (ClientTLSSettings_TLSmode) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{6, 0} -} - -// DestinationRule defines policies that apply to traffic intended for a service -// after routing has occurred. -// -// -// -// -// -type DestinationRule struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of a service from the service registry. Service - // names are looked up from the platform's service registry (e.g., - // Kubernetes services, Consul services, etc.) and from the hosts - // declared by [ServiceEntries](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry). Rules defined for - // services that do not exist in the service registry will be ignored. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews" will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. _To avoid - // potential misconfigurations, it is recommended to always use fully - // qualified domain names over short names._ - // - // Note that the host field applies to both HTTP and TCP services. - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // Traffic policies to apply (load balancing policy, connection pool - // sizes, outlier detection). - TrafficPolicy *TrafficPolicy `protobuf:"bytes,2,opt,name=traffic_policy,json=trafficPolicy,proto3" json:"traffic_policy,omitempty"` - // One or more named sets that represent individual versions of a - // service. Traffic policies can be overridden at subset level. - Subsets []*Subset `protobuf:"bytes,3,rep,name=subsets,proto3" json:"subsets,omitempty"` - // A list of namespaces to which this destination rule is exported. - // The resolution of a destination rule to apply to a service occurs in the - // context of a hierarchy of namespaces. Exporting a destination rule allows - // it to be included in the resolution hierarchy for services in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of destination rules - // across namespace boundaries. - // - // If no namespaces are specified then the destination rule is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the destination rule is declared in. Similarly, the value "*" is reserved and - // defines an export to all namespaces. - ExportTo []string `protobuf:"bytes,4,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"` -} - -func (x *DestinationRule) Reset() { - *x = DestinationRule{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DestinationRule) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DestinationRule) ProtoMessage() {} - -func (x *DestinationRule) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DestinationRule.ProtoReflect.Descriptor instead. -func (*DestinationRule) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{0} -} - -func (x *DestinationRule) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *DestinationRule) GetTrafficPolicy() *TrafficPolicy { - if x != nil { - return x.TrafficPolicy - } - return nil -} - -func (x *DestinationRule) GetSubsets() []*Subset { - if x != nil { - return x.Subsets - } - return nil -} - -func (x *DestinationRule) GetExportTo() []string { - if x != nil { - return x.ExportTo - } - return nil -} - -// Traffic policies to apply for a specific destination, across all -// destination ports. See DestinationRule for examples. -type TrafficPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Settings controlling the load balancer algorithms. - LoadBalancer *LoadBalancerSettings `protobuf:"bytes,1,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` - // Settings controlling the volume of connections to an upstream service - ConnectionPool *ConnectionPoolSettings `protobuf:"bytes,2,opt,name=connection_pool,json=connectionPool,proto3" json:"connection_pool,omitempty"` - // Settings controlling eviction of unhealthy hosts from the load balancing pool - OutlierDetection *OutlierDetection `protobuf:"bytes,3,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` - // TLS related settings for connections to the upstream service. - Tls *ClientTLSSettings `protobuf:"bytes,4,opt,name=tls,proto3" json:"tls,omitempty"` - // Traffic policies specific to individual ports. Note that port level - // settings will override the destination-level settings. Traffic - // settings specified at the destination-level will not be inherited when - // overridden by port-level settings, i.e. default values will be applied - // to fields omitted in port-level traffic policies. - PortLevelSettings []*TrafficPolicy_PortTrafficPolicy `protobuf:"bytes,5,rep,name=port_level_settings,json=portLevelSettings,proto3" json:"port_level_settings,omitempty"` -} - -func (x *TrafficPolicy) Reset() { - *x = TrafficPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrafficPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrafficPolicy) ProtoMessage() {} - -func (x *TrafficPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrafficPolicy.ProtoReflect.Descriptor instead. -func (*TrafficPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{1} -} - -func (x *TrafficPolicy) GetLoadBalancer() *LoadBalancerSettings { - if x != nil { - return x.LoadBalancer - } - return nil -} - -func (x *TrafficPolicy) GetConnectionPool() *ConnectionPoolSettings { - if x != nil { - return x.ConnectionPool - } - return nil -} - -func (x *TrafficPolicy) GetOutlierDetection() *OutlierDetection { - if x != nil { - return x.OutlierDetection - } - return nil -} - -func (x *TrafficPolicy) GetTls() *ClientTLSSettings { - if x != nil { - return x.Tls - } - return nil -} - -func (x *TrafficPolicy) GetPortLevelSettings() []*TrafficPolicy_PortTrafficPolicy { - if x != nil { - return x.PortLevelSettings - } - return nil -} - -// A subset of endpoints of a service. Subsets can be used for scenarios -// like A/B testing, or routing to a specific version of a service. Refer -// to [VirtualService](https://istio.io/docs/reference/config/networking/virtual-service/#VirtualService) documentation for examples of using -// subsets in these scenarios. In addition, traffic policies defined at the -// service-level can be overridden at a subset-level. The following rule -// uses a round robin load balancing policy for all traffic going to a -// subset named testversion that is composed of endpoints (e.g., pods) with -// labels (version:v3). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// **Note:** Policies specified for subsets will not take effect until -// a route rule explicitly sends traffic to this subset. -// -// One or more labels are typically required to identify the subset destination, -// however, when the corresponding DestinationRule represents a host that -// supports multiple SNI hosts (e.g., an egress gateway), a subset without labels -// may be meaningful. In this case a traffic policy with [ClientTLSSettings](#ClientTLSSettings) -// can be used to identify a specific SNI host corresponding to the named subset. -type Subset struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the subset. The service name and the subset name can - // be used for traffic splitting in a route rule. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Labels apply a filter over the endpoints of a service in the - // service registry. See route rules for examples of usage. - Labels map[string]string `protobuf:"bytes,2,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Traffic policies that apply to this subset. Subsets inherit the - // traffic policies specified at the DestinationRule level. Settings - // specified at the subset level will override the corresponding settings - // specified at the DestinationRule level. - TrafficPolicy *TrafficPolicy `protobuf:"bytes,3,opt,name=traffic_policy,json=trafficPolicy,proto3" json:"traffic_policy,omitempty"` -} - -func (x *Subset) Reset() { - *x = Subset{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Subset) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Subset) ProtoMessage() {} - -func (x *Subset) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Subset.ProtoReflect.Descriptor instead. -func (*Subset) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{2} -} - -func (x *Subset) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Subset) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *Subset) GetTrafficPolicy() *TrafficPolicy { - if x != nil { - return x.TrafficPolicy - } - return nil -} - -// Load balancing policies to apply for a specific destination. See Envoy's -// load balancing -// [documentation](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancing) -// for more details. -// -// For example, the following rule uses a round robin load balancing policy -// for all traffic going to the ratings service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// The following example sets up sticky sessions for the ratings service -// hashing-based load balancer for the same ratings service using the -// the User cookie as the hash key. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s -// ``` -// {{}} -// {{}} -// -type LoadBalancerSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Upstream load balancing policy. - // - // Types that are assignable to LbPolicy: - // *LoadBalancerSettings_Simple - // *LoadBalancerSettings_ConsistentHash - LbPolicy isLoadBalancerSettings_LbPolicy `protobuf_oneof:"lb_policy"` - // Locality load balancer settings, this will override mesh wide settings in entirety, meaning no merging would be performed - // between this object and the object one in MeshConfig - LocalityLbSetting *LocalityLoadBalancerSetting `protobuf:"bytes,3,opt,name=locality_lb_setting,json=localityLbSetting,proto3" json:"locality_lb_setting,omitempty"` -} - -func (x *LoadBalancerSettings) Reset() { - *x = LoadBalancerSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerSettings) ProtoMessage() {} - -func (x *LoadBalancerSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerSettings.ProtoReflect.Descriptor instead. -func (*LoadBalancerSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{3} -} - -func (m *LoadBalancerSettings) GetLbPolicy() isLoadBalancerSettings_LbPolicy { - if m != nil { - return m.LbPolicy - } - return nil -} - -func (x *LoadBalancerSettings) GetSimple() LoadBalancerSettings_SimpleLB { - if x, ok := x.GetLbPolicy().(*LoadBalancerSettings_Simple); ok { - return x.Simple - } - return LoadBalancerSettings_ROUND_ROBIN -} - -func (x *LoadBalancerSettings) GetConsistentHash() *LoadBalancerSettings_ConsistentHashLB { - if x, ok := x.GetLbPolicy().(*LoadBalancerSettings_ConsistentHash); ok { - return x.ConsistentHash - } - return nil -} - -func (x *LoadBalancerSettings) GetLocalityLbSetting() *LocalityLoadBalancerSetting { - if x != nil { - return x.LocalityLbSetting - } - return nil -} - -type isLoadBalancerSettings_LbPolicy interface { - isLoadBalancerSettings_LbPolicy() -} - -type LoadBalancerSettings_Simple struct { - Simple LoadBalancerSettings_SimpleLB `protobuf:"varint,1,opt,name=simple,proto3,enum=istio.networking.v1beta1.LoadBalancerSettings_SimpleLB,oneof"` -} - -type LoadBalancerSettings_ConsistentHash struct { - ConsistentHash *LoadBalancerSettings_ConsistentHashLB `protobuf:"bytes,2,opt,name=consistent_hash,json=consistentHash,proto3,oneof"` -} - -func (*LoadBalancerSettings_Simple) isLoadBalancerSettings_LbPolicy() {} - -func (*LoadBalancerSettings_ConsistentHash) isLoadBalancerSettings_LbPolicy() {} - -// Connection pool settings for an upstream host. The settings apply to -// each individual host in the upstream service. See Envoy's [circuit -// breaker](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking) -// for more details. Connection pool settings can be applied at the TCP -// level as well as at HTTP level. -// -// For example, the following rule sets a limit of 100 connections to redis -// service called myredissrv with a connect timeout of 30ms -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-redis -// spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-redis -// spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s -// ``` -// {{}} -// {{}} -// -type ConnectionPoolSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Settings common to both HTTP and TCP upstream connections. - Tcp *ConnectionPoolSettings_TCPSettings `protobuf:"bytes,1,opt,name=tcp,proto3" json:"tcp,omitempty"` - // HTTP connection pool settings. - Http *ConnectionPoolSettings_HTTPSettings `protobuf:"bytes,2,opt,name=http,proto3" json:"http,omitempty"` -} - -func (x *ConnectionPoolSettings) Reset() { - *x = ConnectionPoolSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionPoolSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionPoolSettings) ProtoMessage() {} - -func (x *ConnectionPoolSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionPoolSettings.ProtoReflect.Descriptor instead. -func (*ConnectionPoolSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{4} -} - -func (x *ConnectionPoolSettings) GetTcp() *ConnectionPoolSettings_TCPSettings { - if x != nil { - return x.Tcp - } - return nil -} - -func (x *ConnectionPoolSettings) GetHttp() *ConnectionPoolSettings_HTTPSettings { - if x != nil { - return x.Http - } - return nil -} - -// A Circuit breaker implementation that tracks the status of each -// individual host in the upstream service. Applicable to both HTTP and -// TCP services. For HTTP services, hosts that continually return 5xx -// errors for API calls are ejected from the pool for a pre-defined period -// of time. For TCP services, connection timeouts or connection -// failures to a given host counts as an error when measuring the -// consecutive errors metric. See Envoy's [outlier -// detection](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier) -// for more details. -// -// The following rule sets a connection pool size of 100 HTTP1 connections -// with no more than 10 req/connection to the "reviews" service. In addition, -// it sets a limit of 1000 concurrent HTTP2 requests and configures upstream -// hosts to be scanned every 5 mins so that any host that fails 7 consecutive -// times with a 502, 503, or 504 error code will be ejected for 15 minutes. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-cb-policy -// spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-cb-policy -// spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m -// ``` -// {{}} -// {{}} -// -type OutlierDetection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Number of errors before a host is ejected from the connection - // pool. Defaults to 5. When the upstream host is accessed over HTTP, a - // 502, 503, or 504 return code qualifies as an error. When the upstream host - // is accessed over an opaque TCP connection, connect timeouts and - // connection error/failure events qualify as an error. - // $hide_from_docs - // - // Deprecated: Do not use. - ConsecutiveErrors int32 `protobuf:"varint,1,opt,name=consecutive_errors,json=consecutiveErrors,proto3" json:"consecutive_errors,omitempty"` - // Determines whether to distinguish local origin failures from external errors. If set to true - // consecutive_local_origin_failure is taken into account for outlier detection calculations. - // This should be used when you want to derive the outlier detection status based on the errors - // seen locally such as failure to connect, timeout while connecting etc. rather than the status code - // retuned by upstream service. This is especially useful when the upstream service explicitly returns - // a 5xx for some requests and you want to ignore those responses from upstream service while determining - // the outlier detection status of a host. - // Defaults to false. - SplitExternalLocalOriginErrors bool `protobuf:"varint,8,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 split_external_local_origin_errors - // is set to true. - ConsecutiveLocalOriginFailures *wrapperspb.UInt32Value `protobuf:"bytes,9,opt,name=consecutive_local_origin_failures,json=consecutiveLocalOriginFailures,proto3" json:"consecutive_local_origin_failures,omitempty"` - // Number of gateway errors before a host is ejected from the connection pool. - // When the upstream host is accessed over HTTP, a 502, 503, or 504 return - // code qualifies as a gateway error. When the upstream host is accessed over - // an opaque TCP connection, connect timeouts and connection error/failure - // events qualify as a gateway error. - // This feature is disabled by default or when set to the value 0. - // - // Note that consecutive_gateway_errors and consecutive_5xx_errors can be - // used separately or together. Because the errors counted by - // consecutive_gateway_errors are also included in consecutive_5xx_errors, - // if the value of consecutive_gateway_errors is greater than or equal to - // the value of consecutive_5xx_errors, consecutive_gateway_errors will have - // no effect. - ConsecutiveGatewayErrors *wrapperspb.UInt32Value `protobuf:"bytes,6,opt,name=consecutive_gateway_errors,json=consecutiveGatewayErrors,proto3" json:"consecutive_gateway_errors,omitempty"` - // Number of 5xx errors before a host is ejected from the connection pool. - // When the upstream host is accessed over an opaque TCP connection, connect - // timeouts, connection error/failure and request failure events qualify as a - // 5xx error. - // This feature defaults to 5 but can be disabled by setting the value to 0. - // - // Note that consecutive_gateway_errors and consecutive_5xx_errors can be - // used separately or together. Because the errors counted by - // consecutive_gateway_errors are also included in consecutive_5xx_errors, - // if the value of consecutive_gateway_errors is greater than or equal to - // the value of consecutive_5xx_errors, consecutive_gateway_errors will have - // no effect. - Consecutive_5XxErrors *wrapperspb.UInt32Value `protobuf:"bytes,7,opt,name=consecutive_5xx_errors,json=consecutive5xxErrors,proto3" json:"consecutive_5xx_errors,omitempty"` - // Time interval between ejection sweep analysis. format: - // 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s. - Interval *durationpb.Duration `protobuf:"bytes,2,opt,name=interval,proto3" json:"interval,omitempty"` - // Minimum ejection duration. A host will remain ejected for a period - // equal to the product of minimum ejection duration and the number of - // times the host has been ejected. This technique allows the system to - // automatically increase the ejection period for unhealthy upstream - // servers. format: 1h/1m/1s/1ms. MUST BE >=1ms. Default is 30s. - BaseEjectionTime *durationpb.Duration `protobuf:"bytes,3,opt,name=base_ejection_time,json=baseEjectionTime,proto3" json:"base_ejection_time,omitempty"` - // Maximum % of hosts in the load balancing pool for the upstream - // service that can be ejected. Defaults to 10%. - MaxEjectionPercent int32 `protobuf:"varint,4,opt,name=max_ejection_percent,json=maxEjectionPercent,proto3" json:"max_ejection_percent,omitempty"` - // Outlier detection will be enabled as long as the associated load balancing - // pool has at least min_health_percent hosts in healthy mode. When the - // percentage of healthy hosts in the load balancing pool drops below this - // threshold, outlier detection will be disabled and the proxy will load balance - // across all hosts in the pool (healthy and unhealthy). The threshold can be - // disabled by setting it to 0%. The default is 0% as it's not typically - // applicable in k8s environments with few pods per service. - MinHealthPercent int32 `protobuf:"varint,5,opt,name=min_health_percent,json=minHealthPercent,proto3" json:"min_health_percent,omitempty"` -} - -func (x *OutlierDetection) Reset() { - *x = OutlierDetection{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OutlierDetection) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OutlierDetection) ProtoMessage() {} - -func (x *OutlierDetection) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OutlierDetection.ProtoReflect.Descriptor instead. -func (*OutlierDetection) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{5} -} - -// Deprecated: Do not use. -func (x *OutlierDetection) GetConsecutiveErrors() int32 { - if x != nil { - return x.ConsecutiveErrors - } - return 0 -} - -func (x *OutlierDetection) GetSplitExternalLocalOriginErrors() bool { - if x != nil { - return x.SplitExternalLocalOriginErrors - } - return false -} - -func (x *OutlierDetection) GetConsecutiveLocalOriginFailures() *wrapperspb.UInt32Value { - if x != nil { - return x.ConsecutiveLocalOriginFailures - } - return nil -} - -func (x *OutlierDetection) GetConsecutiveGatewayErrors() *wrapperspb.UInt32Value { - if x != nil { - return x.ConsecutiveGatewayErrors - } - return nil -} - -func (x *OutlierDetection) GetConsecutive_5XxErrors() *wrapperspb.UInt32Value { - if x != nil { - return x.Consecutive_5XxErrors - } - return nil -} - -func (x *OutlierDetection) GetInterval() *durationpb.Duration { - if x != nil { - return x.Interval - } - return nil -} - -func (x *OutlierDetection) GetBaseEjectionTime() *durationpb.Duration { - if x != nil { - return x.BaseEjectionTime - } - return nil -} - -func (x *OutlierDetection) GetMaxEjectionPercent() int32 { - if x != nil { - return x.MaxEjectionPercent - } - return 0 -} - -func (x *OutlierDetection) GetMinHealthPercent() int32 { - if x != nil { - return x.MinHealthPercent - } - return 0 -} - -// SSL/TLS related settings for upstream connections. See Envoy's [TLS -// context](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto.html#common-tls-configuration) -// for more details. These settings are common to both HTTP and TCP upstreams. -// -// For example, the following rule configures a client to use mutual TLS -// for connections to upstream database cluster. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: db-mtls -// spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: db-mtls -// spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// {{}} -// -// The following rule configures a client to use TLS when talking to a -// foreign service whose domain matches *.foo.com. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: tls-foo -// spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: tls-foo -// spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE -// ``` -// {{}} -// {{}} -// -// The following rule configures a client to use Istio mutual TLS when talking -// to rating services. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: ratings-istio-mtls -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: ratings-istio-mtls -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL -// ``` -// {{}} -// {{}} -// -type ClientTLSSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Indicates whether connections to this port should be secured - // using TLS. The value of this field determines how TLS is enforced. - Mode ClientTLSSettings_TLSmode `protobuf:"varint,1,opt,name=mode,proto3,enum=istio.networking.v1beta1.ClientTLSSettings_TLSmode" json:"mode,omitempty"` - // REQUIRED if mode is `MUTUAL`. The path to the file holding the - // client-side TLS certificate to use. - // Should be empty if mode is `ISTIO_MUTUAL`. - ClientCertificate string `protobuf:"bytes,2,opt,name=client_certificate,json=clientCertificate,proto3" json:"client_certificate,omitempty"` - // REQUIRED if mode is `MUTUAL`. The path to the file holding the - // client's private key. - // Should be empty if mode is `ISTIO_MUTUAL`. - PrivateKey string `protobuf:"bytes,3,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` - // OPTIONAL: The path to the file containing certificate authority - // certificates to use in verifying a presented server certificate. If - // omitted, the proxy will not verify the server's certificate. - // Should be empty if mode is `ISTIO_MUTUAL`. - CaCertificates string `protobuf:"bytes,4,opt,name=ca_certificates,json=caCertificates,proto3" json:"ca_certificates,omitempty"` - // The name of the secret that holds the TLS certs for the - // client including the CA certificates. Secret must exist in the - // same namespace with the proxy using the certificates. - // The secret (of type `generic`)should contain the - // following keys and values: `key: `, - // `cert: `, `cacert: `. - // Here CACertificate is used to verify the server certificate. - // Secret of type tls for client certificates along with - // ca.crt key for CA certificates is also supported. - // Only one of client certificates and CA certificate - // or credentialName can be specified. - // - // **NOTE:** This field is currently applicable only at gateways. - // Sidecars will continue to use the certificate paths. - CredentialName string `protobuf:"bytes,7,opt,name=credential_name,json=credentialName,proto3" json:"credential_name,omitempty"` - // A list of alternate names to verify the subject identity in the - // certificate. If specified, the proxy will verify that the server - // certificate's subject alt name matches one of the specified values. - // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. - SubjectAltNames []string `protobuf:"bytes,5,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` - // SNI string to present to the server during TLS handshake. - Sni string `protobuf:"bytes,6,opt,name=sni,proto3" json:"sni,omitempty"` - // InsecureSkipVerify specifies whether the proxy should skip verifying the - // CA signature and SAN for the server certificate corresponding to the host. - // This flag should only be set if global CA signature verifcation is - // enabled, `VerifyCertAtClient` environmental variable is set to `true`, - // but no verification is desired for a specific host. If enabled with or - // without `VerifyCertAtClient` enabled, verification of the CA signature and - // SAN will be skipped. - // - // `InsecureSkipVerify` is `false` by default. - // `VerifyCertAtClient` is `false` by default in Istio version 1.9 but will - // be `true` by default in a later version where, going forward, it will be - // enabled by default. - InsecureSkipVerify *wrapperspb.BoolValue `protobuf:"bytes,8,opt,name=insecure_skip_verify,json=insecureSkipVerify,proto3" json:"insecure_skip_verify,omitempty"` -} - -func (x *ClientTLSSettings) Reset() { - *x = ClientTLSSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientTLSSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientTLSSettings) ProtoMessage() {} - -func (x *ClientTLSSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientTLSSettings.ProtoReflect.Descriptor instead. -func (*ClientTLSSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{6} -} - -func (x *ClientTLSSettings) GetMode() ClientTLSSettings_TLSmode { - if x != nil { - return x.Mode - } - return ClientTLSSettings_DISABLE -} - -func (x *ClientTLSSettings) GetClientCertificate() string { - if x != nil { - return x.ClientCertificate - } - return "" -} - -func (x *ClientTLSSettings) GetPrivateKey() string { - if x != nil { - return x.PrivateKey - } - return "" -} - -func (x *ClientTLSSettings) GetCaCertificates() string { - if x != nil { - return x.CaCertificates - } - return "" -} - -func (x *ClientTLSSettings) GetCredentialName() string { - if x != nil { - return x.CredentialName - } - return "" -} - -func (x *ClientTLSSettings) GetSubjectAltNames() []string { - if x != nil { - return x.SubjectAltNames - } - return nil -} - -func (x *ClientTLSSettings) GetSni() string { - if x != nil { - return x.Sni - } - return "" -} - -func (x *ClientTLSSettings) GetInsecureSkipVerify() *wrapperspb.BoolValue { - if x != nil { - return x.InsecureSkipVerify - } - return nil -} - -// Locality-weighted load balancing allows administrators to control the -// distribution of traffic to endpoints based on the localities of where the -// traffic originates and where it will terminate. These localities are -// specified using arbitrary labels that designate a hierarchy of localities in -// {region}/{zone}/{sub-zone} form. For additional detail refer to -// [Locality Weight](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) -// The following example shows how to setup locality weights mesh-wide. -// -// Given a mesh with workloads and their service deployed to "us-west/zone1/*" -// and "us-west/zone2/*". This example specifies that when traffic accessing a -// service originates from workloads in "us-west/zone1/*", 80% of the traffic -// will be sent to endpoints in "us-west/zone1/*", i.e the same zone, and the -// remaining 20% will go to endpoints in "us-west/zone2/*". This setup is -// intended to favor routing traffic to endpoints in the same locality. -// A similar setting is specified for traffic originating in "us-west/zone2/*". -// -// ```yaml -// distribute: -// - from: us-west/zone1/* -// to: -// "us-west/zone1/*": 80 -// "us-west/zone2/*": 20 -// - from: us-west/zone2/* -// to: -// "us-west/zone1/*": 20 -// "us-west/zone2/*": 80 -// ``` -// -// If the goal of the operator is not to distribute load across zones and -// regions but rather to restrict the regionality of failover to meet other -// operational requirements an operator can set a 'failover' policy instead of -// a 'distribute' policy. -// -// The following example sets up a locality failover policy for regions. -// Assume a service resides in zones within us-east, us-west & eu-west -// this example specifies that when endpoints within us-east become unhealthy -// traffic should failover to endpoints in any zone or sub-zone within eu-west -// and similarly us-west should failover to us-east. -// -// ```yaml -// failover: -// - from: us-east -// to: eu-west -// - from: us-west -// to: us-east -// ``` -// Locality load balancing settings. -type LocalityLoadBalancerSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional: only one of distribute, failover or failoverPriority can be set. - // Explicitly specify loadbalancing weight across different zones and geographical locations. - // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) - // If empty, the locality weight is set according to the endpoints number within it. - Distribute []*LocalityLoadBalancerSetting_Distribute `protobuf:"bytes,1,rep,name=distribute,proto3" json:"distribute,omitempty"` - // Optional: only one of distribute, failover or failoverPriority can be set. - // Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. - // Should be used together with OutlierDetection to detect unhealthy endpoints. - // Note: if no OutlierDetection specified, this will not take effect. - Failover []*LocalityLoadBalancerSetting_Failover `protobuf:"bytes,2,rep,name=failover,proto3" json:"failover,omitempty"` - // failoverPriority is an ordered list of labels used to sort endpoints to do priority based load balancing. - // This is to support traffic failover across different groups of endpoints. - // Suppose there are total N labels specified: - // - // 1. Endpoints matching all N labels with the client proxy have priority P(0) i.e. the highest priority. - // 2. Endpoints matching the first N-1 labels with the client proxy have priority P(1) i.e. second highest priority. - // 3. By extension of this logic, endpoints matching only the first label with the client proxy has priority P(N-1) i.e. second lowest priority. - // 4. All the other endpoints have priority P(N) i.e. lowest priority. - // - // Note: For a label to be considered for match, the previous labels must match, i.e. nth label would be considered matched only if first n-1 labels match. - // - // It can be any label specified on both client and server workloads. - // The following labels which have special semantic meaning are also supported: - // - // - `topology.istio.io/network` is used to match the network metadata of an endpoint, which can be specified by pod/namespace label `topology.istio.io/network`, sidecar env `ISTIO_META_NETWORK` or MeshNetworks. - // - `topology.istio.io/cluster` is used to match the clusterID of an endpoint, which can be specified by pod label `topology.istio.io/cluster` or pod env `ISTIO_META_CLUSTER_ID`. - // - `topology.kubernetes.io/region` is used to match the region metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/region` or the deprecated label `failure-domain.beta.kubernetes.io/region`. - // - `topology.kubernetes.io/zone` is used to match the zone metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/zone` or the deprecated label `failure-domain.beta.kubernetes.io/zone`. - // - `topology.istio.io/subzone` is used to match the subzone metadata of an endpoint, which maps to Istio node label `topology.istio.io/subzone`. - // - // The below topology config indicates the following priority levels: - // - // ```yaml - // failoverPriority: - // - "topology.istio.io/network" - // - "topology.kubernetes.io/region" - // - "topology.kubernetes.io/zone" - // - "topology.istio.io/subzone" - // ``` - // - // 1. endpoints match same [network, region, zone, subzone] label with the client proxy have the highest priority. - // 2. endpoints have same [network, region, zone] label but different [subzone] label with the client proxy have the second highest priority. - // 3. endpoints have same [network, region] label but different [zone] label with the client proxy have the third highest priority. - // 4. endpoints have same [network] but different [region] labels with the client proxy have the fourth highest priority. - // 5. all the other endpoints have the same lowest priority. - // - // Optional: only one of distribute, failover or failoverPriority can be set. - // And it should be used together with `OutlierDetection` to detect unhealthy endpoints, otherwise has no effect. - FailoverPriority []string `protobuf:"bytes,4,rep,name=failover_priority,json=failoverPriority,proto3" json:"failover_priority,omitempty"` - // enable locality load balancing, this is DestinationRule-level and will override mesh wide settings in entirety. - // e.g. true means that turn on locality load balancing for this DestinationRule no matter what mesh wide settings is. - Enabled *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=enabled,proto3" json:"enabled,omitempty"` -} - -func (x *LocalityLoadBalancerSetting) Reset() { - *x = LocalityLoadBalancerSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocalityLoadBalancerSetting) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocalityLoadBalancerSetting) ProtoMessage() {} - -func (x *LocalityLoadBalancerSetting) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LocalityLoadBalancerSetting.ProtoReflect.Descriptor instead. -func (*LocalityLoadBalancerSetting) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7} -} - -func (x *LocalityLoadBalancerSetting) GetDistribute() []*LocalityLoadBalancerSetting_Distribute { - if x != nil { - return x.Distribute - } - return nil -} - -func (x *LocalityLoadBalancerSetting) GetFailover() []*LocalityLoadBalancerSetting_Failover { - if x != nil { - return x.Failover - } - return nil -} - -func (x *LocalityLoadBalancerSetting) GetFailoverPriority() []string { - if x != nil { - return x.FailoverPriority - } - return nil -} - -func (x *LocalityLoadBalancerSetting) GetEnabled() *wrapperspb.BoolValue { - if x != nil { - return x.Enabled - } - return nil -} - -// Traffic policies that apply to specific ports of the service -type TrafficPolicy_PortTrafficPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Specifies the number of a port on the destination service - // on which this policy is being applied. - // - Port *PortSelector `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // Settings controlling the load balancer algorithms. - LoadBalancer *LoadBalancerSettings `protobuf:"bytes,2,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` - // Settings controlling the volume of connections to an upstream service - ConnectionPool *ConnectionPoolSettings `protobuf:"bytes,3,opt,name=connection_pool,json=connectionPool,proto3" json:"connection_pool,omitempty"` - // Settings controlling eviction of unhealthy hosts from the load balancing pool - OutlierDetection *OutlierDetection `protobuf:"bytes,4,opt,name=outlier_detection,json=outlierDetection,proto3" json:"outlier_detection,omitempty"` - // TLS related settings for connections to the upstream service. - Tls *ClientTLSSettings `protobuf:"bytes,5,opt,name=tls,proto3" json:"tls,omitempty"` -} - -func (x *TrafficPolicy_PortTrafficPolicy) Reset() { - *x = TrafficPolicy_PortTrafficPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TrafficPolicy_PortTrafficPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TrafficPolicy_PortTrafficPolicy) ProtoMessage() {} - -func (x *TrafficPolicy_PortTrafficPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TrafficPolicy_PortTrafficPolicy.ProtoReflect.Descriptor instead. -func (*TrafficPolicy_PortTrafficPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{1, 0} -} - -func (x *TrafficPolicy_PortTrafficPolicy) GetPort() *PortSelector { - if x != nil { - return x.Port - } - return nil -} - -func (x *TrafficPolicy_PortTrafficPolicy) GetLoadBalancer() *LoadBalancerSettings { - if x != nil { - return x.LoadBalancer - } - return nil -} - -func (x *TrafficPolicy_PortTrafficPolicy) GetConnectionPool() *ConnectionPoolSettings { - if x != nil { - return x.ConnectionPool - } - return nil -} - -func (x *TrafficPolicy_PortTrafficPolicy) GetOutlierDetection() *OutlierDetection { - if x != nil { - return x.OutlierDetection - } - return nil -} - -func (x *TrafficPolicy_PortTrafficPolicy) GetTls() *ClientTLSSettings { - if x != nil { - return x.Tls - } - return nil -} - -// Consistent Hash-based load balancing can be used to provide soft -// session affinity based on HTTP headers, cookies or other -// properties. The affinity to a particular destination host will be -// lost when one or more hosts are added/removed from the destination -// service. -type LoadBalancerSettings_ConsistentHashLB struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The hash key to use. - // - // Types that are assignable to HashKey: - // *LoadBalancerSettings_ConsistentHashLB_HttpHeaderName - // *LoadBalancerSettings_ConsistentHashLB_HttpCookie - // *LoadBalancerSettings_ConsistentHashLB_UseSourceIp - // *LoadBalancerSettings_ConsistentHashLB_HttpQueryParameterName - HashKey isLoadBalancerSettings_ConsistentHashLB_HashKey `protobuf_oneof:"hash_key"` - // The minimum number of virtual nodes to use for the hash - // ring. Defaults to 1024. Larger ring sizes result in more granular - // load distributions. If the number of hosts in the load balancing - // pool is larger than the ring size, each host will be assigned a - // single virtual node. - MinimumRingSize uint64 `protobuf:"varint,4,opt,name=minimum_ring_size,json=minimumRingSize,proto3" json:"minimum_ring_size,omitempty"` -} - -func (x *LoadBalancerSettings_ConsistentHashLB) Reset() { - *x = LoadBalancerSettings_ConsistentHashLB{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerSettings_ConsistentHashLB) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerSettings_ConsistentHashLB) ProtoMessage() {} - -func (x *LoadBalancerSettings_ConsistentHashLB) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerSettings_ConsistentHashLB.ProtoReflect.Descriptor instead. -func (*LoadBalancerSettings_ConsistentHashLB) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{3, 0} -} - -func (m *LoadBalancerSettings_ConsistentHashLB) GetHashKey() isLoadBalancerSettings_ConsistentHashLB_HashKey { - if m != nil { - return m.HashKey - } - return nil -} - -func (x *LoadBalancerSettings_ConsistentHashLB) GetHttpHeaderName() string { - if x, ok := x.GetHashKey().(*LoadBalancerSettings_ConsistentHashLB_HttpHeaderName); ok { - return x.HttpHeaderName - } - return "" -} - -func (x *LoadBalancerSettings_ConsistentHashLB) GetHttpCookie() *LoadBalancerSettings_ConsistentHashLB_HTTPCookie { - if x, ok := x.GetHashKey().(*LoadBalancerSettings_ConsistentHashLB_HttpCookie); ok { - return x.HttpCookie - } - return nil -} - -func (x *LoadBalancerSettings_ConsistentHashLB) GetUseSourceIp() bool { - if x, ok := x.GetHashKey().(*LoadBalancerSettings_ConsistentHashLB_UseSourceIp); ok { - return x.UseSourceIp - } - return false -} - -func (x *LoadBalancerSettings_ConsistentHashLB) GetHttpQueryParameterName() string { - if x, ok := x.GetHashKey().(*LoadBalancerSettings_ConsistentHashLB_HttpQueryParameterName); ok { - return x.HttpQueryParameterName - } - return "" -} - -func (x *LoadBalancerSettings_ConsistentHashLB) GetMinimumRingSize() uint64 { - if x != nil { - return x.MinimumRingSize - } - return 0 -} - -type isLoadBalancerSettings_ConsistentHashLB_HashKey interface { - isLoadBalancerSettings_ConsistentHashLB_HashKey() -} - -type LoadBalancerSettings_ConsistentHashLB_HttpHeaderName struct { - // Hash based on a specific HTTP header. - HttpHeaderName string `protobuf:"bytes,1,opt,name=http_header_name,json=httpHeaderName,proto3,oneof"` -} - -type LoadBalancerSettings_ConsistentHashLB_HttpCookie struct { - // Hash based on HTTP cookie. - HttpCookie *LoadBalancerSettings_ConsistentHashLB_HTTPCookie `protobuf:"bytes,2,opt,name=http_cookie,json=httpCookie,proto3,oneof"` -} - -type LoadBalancerSettings_ConsistentHashLB_UseSourceIp struct { - // Hash based on the source IP address. - // This is applicable for both TCP and HTTP connections. - UseSourceIp bool `protobuf:"varint,3,opt,name=use_source_ip,json=useSourceIp,proto3,oneof"` -} - -type LoadBalancerSettings_ConsistentHashLB_HttpQueryParameterName struct { - // Hash based on a specific HTTP query parameter. - HttpQueryParameterName string `protobuf:"bytes,5,opt,name=http_query_parameter_name,json=httpQueryParameterName,proto3,oneof"` -} - -func (*LoadBalancerSettings_ConsistentHashLB_HttpHeaderName) isLoadBalancerSettings_ConsistentHashLB_HashKey() { -} - -func (*LoadBalancerSettings_ConsistentHashLB_HttpCookie) isLoadBalancerSettings_ConsistentHashLB_HashKey() { -} - -func (*LoadBalancerSettings_ConsistentHashLB_UseSourceIp) isLoadBalancerSettings_ConsistentHashLB_HashKey() { -} - -func (*LoadBalancerSettings_ConsistentHashLB_HttpQueryParameterName) isLoadBalancerSettings_ConsistentHashLB_HashKey() { -} - -// Describes a HTTP cookie that will be used as the hash key for the -// Consistent Hash load balancer. If the cookie is not present, it will -// be generated. -type LoadBalancerSettings_ConsistentHashLB_HTTPCookie struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the cookie. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Path to set for the cookie. - Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` - // Lifetime of the cookie. - Ttl *durationpb.Duration `protobuf:"bytes,3,opt,name=ttl,proto3" json:"ttl,omitempty"` -} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Reset() { - *x = LoadBalancerSettings_ConsistentHashLB_HTTPCookie{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoMessage() {} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBalancerSettings_ConsistentHashLB_HTTPCookie.ProtoReflect.Descriptor instead. -func (*LoadBalancerSettings_ConsistentHashLB_HTTPCookie) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{3, 0, 0} -} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *LoadBalancerSettings_ConsistentHashLB_HTTPCookie) GetTtl() *durationpb.Duration { - if x != nil { - return x.Ttl - } - return nil -} - -// Settings common to both HTTP and TCP upstream connections. -type ConnectionPoolSettings_TCPSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Maximum number of HTTP1 /TCP connections to a destination host. Default 2^32-1. - MaxConnections int32 `protobuf:"varint,1,opt,name=max_connections,json=maxConnections,proto3" json:"max_connections,omitempty"` - // TCP connection timeout. format: - // 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s. - ConnectTimeout *durationpb.Duration `protobuf:"bytes,2,opt,name=connect_timeout,json=connectTimeout,proto3" json:"connect_timeout,omitempty"` - // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. - TcpKeepalive *ConnectionPoolSettings_TCPSettings_TcpKeepalive `protobuf:"bytes,3,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"` -} - -func (x *ConnectionPoolSettings_TCPSettings) Reset() { - *x = ConnectionPoolSettings_TCPSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionPoolSettings_TCPSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionPoolSettings_TCPSettings) ProtoMessage() {} - -func (x *ConnectionPoolSettings_TCPSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionPoolSettings_TCPSettings.ProtoReflect.Descriptor instead. -func (*ConnectionPoolSettings_TCPSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *ConnectionPoolSettings_TCPSettings) GetMaxConnections() int32 { - if x != nil { - return x.MaxConnections - } - return 0 -} - -func (x *ConnectionPoolSettings_TCPSettings) GetConnectTimeout() *durationpb.Duration { - if x != nil { - return x.ConnectTimeout - } - return nil -} - -func (x *ConnectionPoolSettings_TCPSettings) GetTcpKeepalive() *ConnectionPoolSettings_TCPSettings_TcpKeepalive { - if x != nil { - return x.TcpKeepalive - } - return nil -} - -// Settings applicable to HTTP1.1/HTTP2/GRPC connections. -type ConnectionPoolSettings_HTTPSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. - Http1MaxPendingRequests int32 `protobuf:"varint,1,opt,name=http1_max_pending_requests,json=http1MaxPendingRequests,proto3" json:"http1_max_pending_requests,omitempty"` - // Maximum number of requests to a backend. Default 2^32-1. - Http2MaxRequests int32 `protobuf:"varint,2,opt,name=http2_max_requests,json=http2MaxRequests,proto3" json:"http2_max_requests,omitempty"` - // Maximum number of requests per connection to a backend. Setting this - // parameter to 1 disables keep alive. Default 0, meaning "unlimited", - // up to 2^29. - MaxRequestsPerConnection int32 `protobuf:"varint,3,opt,name=max_requests_per_connection,json=maxRequestsPerConnection,proto3" json:"max_requests_per_connection,omitempty"` - // Maximum number of retries that can be outstanding to all hosts in a - // cluster at a given time. Defaults to 2^32-1. - MaxRetries int32 `protobuf:"varint,4,opt,name=max_retries,json=maxRetries,proto3" json:"max_retries,omitempty"` - // The idle timeout for upstream connection pool connections. The idle timeout - // is defined as the period in which there are no active requests. - // If not set, the default is 1 hour. 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. - // Note that request based timeouts mean that HTTP/2 PINGs will not - // keep the connection alive. Applies to both HTTP1.1 and HTTP2 connections. - IdleTimeout *durationpb.Duration `protobuf:"bytes,5,opt,name=idle_timeout,json=idleTimeout,proto3" json:"idle_timeout,omitempty"` - // Specify if http1.1 connection should be upgraded to http2 for the associated destination. - H2UpgradePolicy ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy `protobuf:"varint,6,opt,name=h2_upgrade_policy,json=h2UpgradePolicy,proto3,enum=istio.networking.v1beta1.ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy" json:"h2_upgrade_policy,omitempty"` - // If set to true, client protocol will be preserved while initiating connection to backend. - // Note that when this is set to true, h2_upgrade_policy will be ineffective i.e. the client - // connections will not be upgraded to http2. - UseClientProtocol bool `protobuf:"varint,7,opt,name=use_client_protocol,json=useClientProtocol,proto3" json:"use_client_protocol,omitempty"` -} - -func (x *ConnectionPoolSettings_HTTPSettings) Reset() { - *x = ConnectionPoolSettings_HTTPSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionPoolSettings_HTTPSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionPoolSettings_HTTPSettings) ProtoMessage() {} - -func (x *ConnectionPoolSettings_HTTPSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionPoolSettings_HTTPSettings.ProtoReflect.Descriptor instead. -func (*ConnectionPoolSettings_HTTPSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{4, 1} -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetHttp1MaxPendingRequests() int32 { - if x != nil { - return x.Http1MaxPendingRequests - } - return 0 -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetHttp2MaxRequests() int32 { - if x != nil { - return x.Http2MaxRequests - } - return 0 -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetMaxRequestsPerConnection() int32 { - if x != nil { - return x.MaxRequestsPerConnection - } - return 0 -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetMaxRetries() int32 { - if x != nil { - return x.MaxRetries - } - return 0 -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetIdleTimeout() *durationpb.Duration { - if x != nil { - return x.IdleTimeout - } - return nil -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetH2UpgradePolicy() ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy { - if x != nil { - return x.H2UpgradePolicy - } - return ConnectionPoolSettings_HTTPSettings_DEFAULT -} - -func (x *ConnectionPoolSettings_HTTPSettings) GetUseClientProtocol() bool { - if x != nil { - return x.UseClientProtocol - } - return false -} - -// TCP keepalive. -type ConnectionPoolSettings_TCPSettings_TcpKeepalive struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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.) - Probes uint32 `protobuf:"varint,1,opt,name=probes,proto3" json:"probes,omitempty"` - // The time duration 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.) - Time *durationpb.Duration `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` - // The time duration between keep-alive probes. - // Default is to use the OS level configuration - // (unless overridden, Linux defaults to 75s.) - Interval *durationpb.Duration `protobuf:"bytes,3,opt,name=interval,proto3" json:"interval,omitempty"` -} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) Reset() { - *x = ConnectionPoolSettings_TCPSettings_TcpKeepalive{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoMessage() {} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConnectionPoolSettings_TCPSettings_TcpKeepalive.ProtoReflect.Descriptor instead. -func (*ConnectionPoolSettings_TCPSettings_TcpKeepalive) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{4, 0, 0} -} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) GetProbes() uint32 { - if x != nil { - return x.Probes - } - return 0 -} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) GetTime() *durationpb.Duration { - if x != nil { - return x.Time - } - return nil -} - -func (x *ConnectionPoolSettings_TCPSettings_TcpKeepalive) GetInterval() *durationpb.Duration { - if x != nil { - return x.Interval - } - return nil -} - -// Describes how traffic originating in the 'from' zone or sub-zone is -// distributed over a set of 'to' zones. Syntax for specifying a zone is -// {region}/{zone}/{sub-zone} and terminal wildcards are allowed on any -// segment of the specification. Examples: -// -// `*` - matches all localities -// -// `us-west/*` - all zones and sub-zones within the us-west region -// -// `us-west/zone-1/*` - all sub-zones within us-west/zone-1 -type LocalityLoadBalancerSetting_Distribute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. - From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` - // Map of upstream localities to traffic distribution weights. The sum of - // all weights should be 100. Any locality not present will - // receive no traffic. - To map[string]uint32 `protobuf:"bytes,2,rep,name=to,proto3" json:"to,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` -} - -func (x *LocalityLoadBalancerSetting_Distribute) Reset() { - *x = LocalityLoadBalancerSetting_Distribute{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocalityLoadBalancerSetting_Distribute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocalityLoadBalancerSetting_Distribute) ProtoMessage() {} - -func (x *LocalityLoadBalancerSetting_Distribute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LocalityLoadBalancerSetting_Distribute.ProtoReflect.Descriptor instead. -func (*LocalityLoadBalancerSetting_Distribute) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7, 0} -} - -func (x *LocalityLoadBalancerSetting_Distribute) GetFrom() string { - if x != nil { - return x.From - } - return "" -} - -func (x *LocalityLoadBalancerSetting_Distribute) GetTo() map[string]uint32 { - if x != nil { - return x.To - } - return nil -} - -// Specify the traffic failover policy across regions. Since zone and sub-zone -// failover is supported by default this only needs to be specified for -// regions when the operator needs to constrain traffic failover so that -// the default behavior of failing over to any endpoint globally does not -// apply. This is useful when failing over traffic across regions would not -// improve service health or may need to be restricted for other reasons -// like regulatory controls. -type LocalityLoadBalancerSetting_Failover struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Originating region. - From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` - // Destination region the traffic will fail over to when endpoints in - // the 'from' region becomes unhealthy. - To string `protobuf:"bytes,2,opt,name=to,proto3" json:"to,omitempty"` -} - -func (x *LocalityLoadBalancerSetting_Failover) Reset() { - *x = LocalityLoadBalancerSetting_Failover{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocalityLoadBalancerSetting_Failover) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocalityLoadBalancerSetting_Failover) ProtoMessage() {} - -func (x *LocalityLoadBalancerSetting_Failover) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_destination_rule_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LocalityLoadBalancerSetting_Failover.ProtoReflect.Descriptor instead. -func (*LocalityLoadBalancerSetting_Failover) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_destination_rule_proto_rawDescGZIP(), []int{7, 1} -} - -func (x *LocalityLoadBalancerSetting_Failover) GetFrom() string { - if x != nil { - return x.From - } - return "" -} - -func (x *LocalityLoadBalancerSetting_Failover) GetTo() string { - if x != nil { - return x.To - } - return "" -} - -var File_networking_v1beta1_destination_rule_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_destination_rule_proto_rawDesc = []byte{ - 0x0a, 0x29, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, - 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xd4, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x75, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x4e, - 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, - 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3a, - 0x0a, 0x07, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, - 0x74, 0x52, 0x07, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, - 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x6f, 0x22, 0xdc, 0x06, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x53, 0x0a, 0x0d, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x52, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x12, 0x59, - 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6f, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, - 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x57, 0x0a, 0x11, 0x6f, 0x75, 0x74, - 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x6c, - 0x73, 0x12, 0x69, 0x0a, 0x13, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x5f, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, - 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x11, 0x70, 0x6f, 0x72, 0x74, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x1a, 0x97, 0x03, 0x0a, - 0x11, 0x50, 0x6f, 0x72, 0x74, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x3a, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x53, - 0x0a, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x57, - 0x0a, 0x11, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, - 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x73, 0x65, - 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcd, 0x06, 0x0a, - 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x6a, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x4c, 0x42, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x61, 0x73, 0x68, 0x12, 0x65, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, - 0x5f, 0x6c, 0x62, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x4c, 0x62, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x1a, 0xb7, 0x03, 0x0a, 0x10, - 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, - 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x68, 0x74, - 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x0b, - 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x4a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x4c, 0x42, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x75, - 0x73, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x70, 0x12, 0x3b, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x68, 0x74, 0x74, 0x70, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6d, 0x0a, 0x0a, 0x48, 0x54, - 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x68, 0x61, 0x73, - 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x48, 0x0a, 0x08, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, - 0x42, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, - 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0f, - 0x0a, 0x0b, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x03, 0x42, - 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0xbd, 0x08, 0x0a, - 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4e, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x51, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0xf9, 0x02, 0x0a, 0x0b, 0x54, - 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, - 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x63, 0x70, 0x5f, 0x6b, - 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x63, 0x70, - 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x0c, 0x74, 0x63, 0x70, 0x4b, 0x65, - 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, 0x54, 0x63, 0x70, 0x4b, - 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, - 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, - 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x83, 0x04, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x68, 0x74, 0x74, 0x70, 0x31, - 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x68, 0x74, 0x74, - 0x70, 0x31, 0x4d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x74, 0x74, 0x70, 0x32, 0x5f, 0x6d, 0x61, - 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x10, 0x68, 0x74, 0x74, 0x70, 0x32, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, - 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x12, 0x79, 0x0a, 0x11, 0x68, 0x32, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, - 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x32, 0x55, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x68, 0x32, 0x55, 0x70, - 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x75, - 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75, 0x73, 0x65, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x3f, 0x0a, 0x0f, 0x48, - 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0b, - 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, - 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x01, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, 0x05, 0x0a, - 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x45, 0x72, - 0x72, 0x6f, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x1e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, - 0x12, 0x67, 0x0a, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x66, 0x61, 0x69, - 0x6c, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1e, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, - 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x35, 0x78, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, - 0x12, 0x47, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, - 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, - 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xd2, 0x03, 0x0a, 0x11, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x4d, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, - 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, - 0x64, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, - 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, - 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, - 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, - 0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, - 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, - 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, - 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, - 0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa2, - 0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x60, - 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x12, 0x5a, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, - 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, - 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, - 0xb1, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, - 0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07, - 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x74, 0x6f, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_destination_rule_proto_rawDescOnce sync.Once - file_networking_v1beta1_destination_rule_proto_rawDescData = file_networking_v1beta1_destination_rule_proto_rawDesc -) - -func file_networking_v1beta1_destination_rule_proto_rawDescGZIP() []byte { - file_networking_v1beta1_destination_rule_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_destination_rule_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_destination_rule_proto_rawDescData) - }) - return file_networking_v1beta1_destination_rule_proto_rawDescData -} - -var file_networking_v1beta1_destination_rule_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_networking_v1beta1_destination_rule_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_networking_v1beta1_destination_rule_proto_goTypes = []interface{}{ - (LoadBalancerSettings_SimpleLB)(0), // 0: istio.networking.v1beta1.LoadBalancerSettings.SimpleLB - (ConnectionPoolSettings_HTTPSettings_H2UpgradePolicy)(0), // 1: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy - (ClientTLSSettings_TLSmode)(0), // 2: istio.networking.v1beta1.ClientTLSSettings.TLSmode - (*DestinationRule)(nil), // 3: istio.networking.v1beta1.DestinationRule - (*TrafficPolicy)(nil), // 4: istio.networking.v1beta1.TrafficPolicy - (*Subset)(nil), // 5: istio.networking.v1beta1.Subset - (*LoadBalancerSettings)(nil), // 6: istio.networking.v1beta1.LoadBalancerSettings - (*ConnectionPoolSettings)(nil), // 7: istio.networking.v1beta1.ConnectionPoolSettings - (*OutlierDetection)(nil), // 8: istio.networking.v1beta1.OutlierDetection - (*ClientTLSSettings)(nil), // 9: istio.networking.v1beta1.ClientTLSSettings - (*LocalityLoadBalancerSetting)(nil), // 10: istio.networking.v1beta1.LocalityLoadBalancerSetting - (*TrafficPolicy_PortTrafficPolicy)(nil), // 11: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy - nil, // 12: istio.networking.v1beta1.Subset.LabelsEntry - (*LoadBalancerSettings_ConsistentHashLB)(nil), // 13: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB - (*LoadBalancerSettings_ConsistentHashLB_HTTPCookie)(nil), // 14: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie - (*ConnectionPoolSettings_TCPSettings)(nil), // 15: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings - (*ConnectionPoolSettings_HTTPSettings)(nil), // 16: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings - (*ConnectionPoolSettings_TCPSettings_TcpKeepalive)(nil), // 17: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive - (*LocalityLoadBalancerSetting_Distribute)(nil), // 18: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute - (*LocalityLoadBalancerSetting_Failover)(nil), // 19: istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover - nil, // 20: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry - (*wrapperspb.UInt32Value)(nil), // 21: google.protobuf.UInt32Value - (*durationpb.Duration)(nil), // 22: google.protobuf.Duration - (*wrapperspb.BoolValue)(nil), // 23: google.protobuf.BoolValue - (*PortSelector)(nil), // 24: istio.networking.v1beta1.PortSelector -} -var file_networking_v1beta1_destination_rule_proto_depIdxs = []int32{ - 4, // 0: istio.networking.v1beta1.DestinationRule.traffic_policy:type_name -> istio.networking.v1beta1.TrafficPolicy - 5, // 1: istio.networking.v1beta1.DestinationRule.subsets:type_name -> istio.networking.v1beta1.Subset - 6, // 2: istio.networking.v1beta1.TrafficPolicy.load_balancer:type_name -> istio.networking.v1beta1.LoadBalancerSettings - 7, // 3: istio.networking.v1beta1.TrafficPolicy.connection_pool:type_name -> istio.networking.v1beta1.ConnectionPoolSettings - 8, // 4: istio.networking.v1beta1.TrafficPolicy.outlier_detection:type_name -> istio.networking.v1beta1.OutlierDetection - 9, // 5: istio.networking.v1beta1.TrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings - 11, // 6: istio.networking.v1beta1.TrafficPolicy.port_level_settings:type_name -> istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy - 12, // 7: istio.networking.v1beta1.Subset.labels:type_name -> istio.networking.v1beta1.Subset.LabelsEntry - 4, // 8: istio.networking.v1beta1.Subset.traffic_policy:type_name -> istio.networking.v1beta1.TrafficPolicy - 0, // 9: istio.networking.v1beta1.LoadBalancerSettings.simple:type_name -> istio.networking.v1beta1.LoadBalancerSettings.SimpleLB - 13, // 10: istio.networking.v1beta1.LoadBalancerSettings.consistent_hash:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB - 10, // 11: istio.networking.v1beta1.LoadBalancerSettings.locality_lb_setting:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting - 15, // 12: istio.networking.v1beta1.ConnectionPoolSettings.tcp:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings - 16, // 13: istio.networking.v1beta1.ConnectionPoolSettings.http:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings - 21, // 14: istio.networking.v1beta1.OutlierDetection.consecutive_local_origin_failures:type_name -> google.protobuf.UInt32Value - 21, // 15: istio.networking.v1beta1.OutlierDetection.consecutive_gateway_errors:type_name -> google.protobuf.UInt32Value - 21, // 16: istio.networking.v1beta1.OutlierDetection.consecutive_5xx_errors:type_name -> google.protobuf.UInt32Value - 22, // 17: istio.networking.v1beta1.OutlierDetection.interval:type_name -> google.protobuf.Duration - 22, // 18: istio.networking.v1beta1.OutlierDetection.base_ejection_time:type_name -> google.protobuf.Duration - 2, // 19: istio.networking.v1beta1.ClientTLSSettings.mode:type_name -> istio.networking.v1beta1.ClientTLSSettings.TLSmode - 23, // 20: istio.networking.v1beta1.ClientTLSSettings.insecure_skip_verify:type_name -> google.protobuf.BoolValue - 18, // 21: istio.networking.v1beta1.LocalityLoadBalancerSetting.distribute:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute - 19, // 22: istio.networking.v1beta1.LocalityLoadBalancerSetting.failover:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Failover - 23, // 23: istio.networking.v1beta1.LocalityLoadBalancerSetting.enabled:type_name -> google.protobuf.BoolValue - 24, // 24: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.port:type_name -> istio.networking.v1beta1.PortSelector - 6, // 25: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.load_balancer:type_name -> istio.networking.v1beta1.LoadBalancerSettings - 7, // 26: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.connection_pool:type_name -> istio.networking.v1beta1.ConnectionPoolSettings - 8, // 27: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.outlier_detection:type_name -> istio.networking.v1beta1.OutlierDetection - 9, // 28: istio.networking.v1beta1.TrafficPolicy.PortTrafficPolicy.tls:type_name -> istio.networking.v1beta1.ClientTLSSettings - 14, // 29: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.http_cookie:type_name -> istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie - 22, // 30: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration - 22, // 31: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration - 17, // 32: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive - 22, // 33: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration - 1, // 34: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy - 22, // 35: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration - 22, // 36: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration - 20, // 37: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry - 38, // [38:38] is the sub-list for method output_type - 38, // [38:38] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_destination_rule_proto_init() } -func file_networking_v1beta1_destination_rule_proto_init() { - if File_networking_v1beta1_destination_rule_proto != nil { - return - } - file_networking_v1beta1_virtual_service_proto_init() - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_destination_rule_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DestinationRule); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Subset); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionPoolSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutlierDetection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientTLSSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalityLoadBalancerSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TrafficPolicy_PortTrafficPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerSettings_ConsistentHashLB); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LoadBalancerSettings_ConsistentHashLB_HTTPCookie); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionPoolSettings_TCPSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionPoolSettings_HTTPSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConnectionPoolSettings_TCPSettings_TcpKeepalive); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalityLoadBalancerSetting_Distribute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalityLoadBalancerSetting_Failover); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_networking_v1beta1_destination_rule_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*LoadBalancerSettings_Simple)(nil), - (*LoadBalancerSettings_ConsistentHash)(nil), - } - file_networking_v1beta1_destination_rule_proto_msgTypes[10].OneofWrappers = []interface{}{ - (*LoadBalancerSettings_ConsistentHashLB_HttpHeaderName)(nil), - (*LoadBalancerSettings_ConsistentHashLB_HttpCookie)(nil), - (*LoadBalancerSettings_ConsistentHashLB_UseSourceIp)(nil), - (*LoadBalancerSettings_ConsistentHashLB_HttpQueryParameterName)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_destination_rule_proto_rawDesc, - NumEnums: 3, - NumMessages: 18, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_destination_rule_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_destination_rule_proto_depIdxs, - EnumInfos: file_networking_v1beta1_destination_rule_proto_enumTypes, - MessageInfos: file_networking_v1beta1_destination_rule_proto_msgTypes, - }.Build() - File_networking_v1beta1_destination_rule_proto = out.File - file_networking_v1beta1_destination_rule_proto_rawDesc = nil - file_networking_v1beta1_destination_rule_proto_goTypes = nil - file_networking_v1beta1_destination_rule_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/gateway.pb.go b/gen/proto/networking/v1beta1/gateway.pb.go deleted file mode 100644 index 805ae48..0000000 --- a/gen/proto/networking/v1beta1/gateway.pb.go +++ /dev/null @@ -1,1345 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/gateway.proto - -// $schema: istio.networking.v1beta1.Gateway -// $title: Gateway -// $description: Configuration affecting edge load balancer. -// $location: https://istio.io/docs/reference/config/networking/gateway.html -// $aliases: [/docs/reference/config/networking/v1beta1/gateway] -// $mode: none - -// `Gateway` describes a load balancer operating at the edge of the mesh -// receiving incoming or outgoing HTTP/TCP connections. The specification -// describes a set of ports that should be exposed, the type of protocol to -// use, SNI configuration for the load balancer, etc. -// -// For example, the following Gateway configuration sets up a proxy to act -// as a load balancer exposing port 80 and 9080 (http), 443 (https), -// 9443(https) and port 2379 (TCP) for ingress. The gateway will be -// applied to the proxy running on a pod with labels `app: -// my-gateway-controller`. While Istio will configure the proxy to listen -// on these ports, it is the responsibility of the user to ensure that -// external traffic to these ports are allowed into the mesh. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// httpsRedirect: true # sends 301 redirect for http requests -// - port: -// number: 443 -// name: https-443 -// protocol: HTTPS -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// mode: SIMPLE # enables HTTPS on this port -// serverCertificate: /etc/certs/servercert.pem -// privateKey: /etc/certs/privatekey.pem -// - port: -// number: 9443 -// name: https-9443 -// protocol: HTTPS -// hosts: -// - "bookinfo-namespace/*.bookinfo.com" -// tls: -// mode: SIMPLE # enables HTTPS on this port -// credentialName: bookinfo-secret # fetches certs from Kubernetes secret -// - port: -// number: 9080 -// name: http-wildcard -// protocol: HTTP -// hosts: -// - "*" -// - port: -// number: 2379 # to expose internal service via external port 2379 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// httpsRedirect: true # sends 301 redirect for http requests -// - port: -// number: 443 -// name: https-443 -// protocol: HTTPS -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// mode: SIMPLE # enables HTTPS on this port -// serverCertificate: /etc/certs/servercert.pem -// privateKey: /etc/certs/privatekey.pem -// - port: -// number: 9443 -// name: https-9443 -// protocol: HTTPS -// hosts: -// - "bookinfo-namespace/*.bookinfo.com" -// tls: -// mode: SIMPLE # enables HTTPS on this port -// credentialName: bookinfo-secret # fetches certs from Kubernetes secret -// - port: -// number: 9080 -// name: http-wildcard -// protocol: HTTP -// hosts: -// - "*" -// - port: -// number: 2379 # to expose internal service via external port 2379 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// The Gateway specification above describes the L4-L6 properties of a load -// balancer. A `VirtualService` can then be bound to a gateway to control -// the forwarding of traffic arriving at a particular host or gateway port. -// -// For example, the following VirtualService splits traffic for -// `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`, -// `http://uk.bookinfo.com:9080/reviews`, -// `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of -// an internal reviews service on port 9080. In addition, requests -// containing the cookie "user: dev-123" will be sent to special port 7777 -// in the qa version. The same rule is also applicable inside the mesh for -// requests to the "reviews.prod.svc.cluster.local" service. This rule is -// applicable across ports 443, 9080. Note that `http://uk.bookinfo.com` -// gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-rule -// namespace: bookinfo-namespace -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// - uk.bookinfo.com -// - eu.bookinfo.com -// gateways: -// - some-config-namespace/my-gateway -// - mesh # applies to all the sidecars in the mesh -// http: -// - match: -// - headers: -// cookie: -// exact: "user=dev-123" -// route: -// - destination: -// port: -// number: 7777 -// host: reviews.qa.svc.cluster.local -// - match: -// - uri: -// prefix: /reviews/ -// route: -// - destination: -// port: -// number: 9080 # can be omitted if it's the only port for reviews -// host: reviews.prod.svc.cluster.local -// weight: 80 -// - destination: -// host: reviews.qa.svc.cluster.local -// weight: 20 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-rule -// namespace: bookinfo-namespace -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// - uk.bookinfo.com -// - eu.bookinfo.com -// gateways: -// - some-config-namespace/my-gateway -// - mesh # applies to all the sidecars in the mesh -// http: -// - match: -// - headers: -// cookie: -// exact: "user=dev-123" -// route: -// - destination: -// port: -// number: 7777 -// host: reviews.qa.svc.cluster.local -// - match: -// - uri: -// prefix: /reviews/ -// route: -// - destination: -// port: -// number: 9080 # can be omitted if it's the only port for reviews -// host: reviews.prod.svc.cluster.local -// weight: 80 -// - destination: -// host: reviews.qa.svc.cluster.local -// weight: 20 -// ``` -// {{}} -// {{}} -// -// The following VirtualService forwards traffic arriving at (external) -// port 27017 to internal Mongo server on port 5555. This rule is not -// applicable internally in the mesh as the gateway list omits the -// reserved name `mesh`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// namespace: bookinfo-namespace -// spec: -// hosts: -// - mongosvr.prod.svc.cluster.local # name of internal Mongo service -// gateways: -// - some-config-namespace/my-gateway # can omit the namespace if gateway is in same namespace as virtual service. -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.prod.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// namespace: bookinfo-namespace -// spec: -// hosts: -// - mongosvr.prod.svc.cluster.local # name of internal Mongo service -// gateways: -// - some-config-namespace/my-gateway # can omit the namespace if gateway is in same namespace as virtual service. -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.prod.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// {{}} -// -// It is possible to restrict the set of virtual services that can bind to -// a gateway server using the namespace/hostname syntax in the hosts field. -// For example, the following Gateway allows any virtual service in the ns1 -// namespace to bind to it, while restricting only the virtual service with -// foo.bar.com host in the ns2 namespace to bind to it. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "ns1/*" -// - "ns2/foo.bar.com" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "ns1/*" -// - "ns2/foo.bar.com" -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// TLS modes enforced by the proxy -type ServerTLSSettings_TLSmode int32 - -const ( - // The SNI string presented by the client will be used as the - // match criterion in a VirtualService TLS route to determine - // the destination service from the service registry. - ServerTLSSettings_PASSTHROUGH ServerTLSSettings_TLSmode = 0 - // Secure connections with standard TLS semantics. - ServerTLSSettings_SIMPLE ServerTLSSettings_TLSmode = 1 - // Secure connections to the downstream using mutual TLS by - // presenting server certificates for authentication. - ServerTLSSettings_MUTUAL ServerTLSSettings_TLSmode = 2 - // Similar to the passthrough mode, except servers with this TLS - // mode do not require an associated VirtualService to map from - // the SNI value to service in the registry. The destination - // details such as the service/subset/port are encoded in the - // SNI value. The proxy will forward to the upstream (Envoy) - // cluster (a group of endpoints) specified by the SNI - // value. This server is typically used to provide connectivity - // between services in disparate L3 networks that otherwise do - // not have direct connectivity between their respective - // endpoints. Use of this mode assumes that both the source and - // the destination are using Istio mTLS to secure traffic. - ServerTLSSettings_AUTO_PASSTHROUGH ServerTLSSettings_TLSmode = 3 - // Secure connections from the downstream using mutual TLS by - // presenting server certificates for authentication. Compared - // to Mutual mode, this mode uses certificates, representing - // gateway workload identity, generated automatically by Istio - // for mTLS authentication. When this mode is used, all other - // fields in `TLSOptions` should be empty. - ServerTLSSettings_ISTIO_MUTUAL ServerTLSSettings_TLSmode = 4 -) - -// Enum value maps for ServerTLSSettings_TLSmode. -var ( - ServerTLSSettings_TLSmode_name = map[int32]string{ - 0: "PASSTHROUGH", - 1: "SIMPLE", - 2: "MUTUAL", - 3: "AUTO_PASSTHROUGH", - 4: "ISTIO_MUTUAL", - } - ServerTLSSettings_TLSmode_value = map[string]int32{ - "PASSTHROUGH": 0, - "SIMPLE": 1, - "MUTUAL": 2, - "AUTO_PASSTHROUGH": 3, - "ISTIO_MUTUAL": 4, - } -) - -func (x ServerTLSSettings_TLSmode) Enum() *ServerTLSSettings_TLSmode { - p := new(ServerTLSSettings_TLSmode) - *p = x - return p -} - -func (x ServerTLSSettings_TLSmode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServerTLSSettings_TLSmode) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_gateway_proto_enumTypes[0].Descriptor() -} - -func (ServerTLSSettings_TLSmode) Type() protoreflect.EnumType { - return &file_networking_v1beta1_gateway_proto_enumTypes[0] -} - -func (x ServerTLSSettings_TLSmode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServerTLSSettings_TLSmode.Descriptor instead. -func (ServerTLSSettings_TLSmode) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{3, 0} -} - -// TLS protocol versions. -type ServerTLSSettings_TLSProtocol int32 - -const ( - // Automatically choose the optimal TLS version. - ServerTLSSettings_TLS_AUTO ServerTLSSettings_TLSProtocol = 0 - // TLS version 1.0 - ServerTLSSettings_TLSV1_0 ServerTLSSettings_TLSProtocol = 1 - // TLS version 1.1 - ServerTLSSettings_TLSV1_1 ServerTLSSettings_TLSProtocol = 2 - // TLS version 1.2 - ServerTLSSettings_TLSV1_2 ServerTLSSettings_TLSProtocol = 3 - // TLS version 1.3 - ServerTLSSettings_TLSV1_3 ServerTLSSettings_TLSProtocol = 4 -) - -// Enum value maps for ServerTLSSettings_TLSProtocol. -var ( - ServerTLSSettings_TLSProtocol_name = map[int32]string{ - 0: "TLS_AUTO", - 1: "TLSV1_0", - 2: "TLSV1_1", - 3: "TLSV1_2", - 4: "TLSV1_3", - } - ServerTLSSettings_TLSProtocol_value = map[string]int32{ - "TLS_AUTO": 0, - "TLSV1_0": 1, - "TLSV1_1": 2, - "TLSV1_2": 3, - "TLSV1_3": 4, - } -) - -func (x ServerTLSSettings_TLSProtocol) Enum() *ServerTLSSettings_TLSProtocol { - p := new(ServerTLSSettings_TLSProtocol) - *p = x - return p -} - -func (x ServerTLSSettings_TLSProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServerTLSSettings_TLSProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_gateway_proto_enumTypes[1].Descriptor() -} - -func (ServerTLSSettings_TLSProtocol) Type() protoreflect.EnumType { - return &file_networking_v1beta1_gateway_proto_enumTypes[1] -} - -func (x ServerTLSSettings_TLSProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServerTLSSettings_TLSProtocol.Descriptor instead. -func (ServerTLSSettings_TLSProtocol) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{3, 1} -} - -// Gateway describes a load balancer operating at the edge of the mesh -// receiving incoming or outgoing HTTP/TCP connections. -// -// -// -// -// -type Gateway struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A list of server specifications. - Servers []*Server `protobuf:"bytes,1,rep,name=servers,proto3" json:"servers,omitempty"` - // One or more labels that indicate a specific set of pods/VMs - // on which this gateway configuration should be applied. - // By default workloads are searched across all namespaces based on label selectors. - // This implies that a gateway resource in the namespace "foo" can select pods in - // the namespace "bar" based on labels. - // This behavior can be controlled via the `PILOT_SCOPE_GATEWAY_TO_NAMESPACE` - // environment variable in istiod. If this variable is set - // to true, the scope of label search is restricted to the configuration - // namespace in which the the resource is present. In other words, the Gateway - // resource must reside in the same namespace as the gateway workload - // instance. - // If selector is nil, the Gateway will be applied to all workloads. - Selector map[string]string `protobuf:"bytes,2,rep,name=selector,proto3" json:"selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Gateway) Reset() { - *x = Gateway{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Gateway) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Gateway) ProtoMessage() {} - -func (x *Gateway) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Gateway.ProtoReflect.Descriptor instead. -func (*Gateway) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{0} -} - -func (x *Gateway) GetServers() []*Server { - if x != nil { - return x.Servers - } - return nil -} - -func (x *Gateway) GetSelector() map[string]string { - if x != nil { - return x.Selector - } - return nil -} - -// `Server` describes the properties of the proxy on a given load balancer -// port. For example, -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-ingress -// spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-ingress -// spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// Another example -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-tcp-ingress -// spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-tcp-ingress -// spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// The following is an example of TLS configuration for port 443 -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-tls-ingress -// spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-tls-ingress -// spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert -// ``` -// {{}} -// {{}} -// -type Server struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The Port on which the proxy should listen for incoming - // connections. - Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The ip or the Unix domain socket to which the listener should be bound - // to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` - // (Linux abstract namespace). When using Unix domain sockets, the port - // number should be 0. - // This can be used to restrict the reachability of this server to be gateway internal only. - // This is typically used when a gateway needs to communicate to another mesh service - // e.g. publishing metrics. In such case, the server created with the - // specified bind will not be available to external gateway clients. - Bind string `protobuf:"bytes,4,opt,name=bind,proto3" json:"bind,omitempty"` - // One or more hosts exposed by this gateway. - // While typically applicable to - // HTTP services, it can also be used for TCP services using TLS with SNI. - // A host is specified as a `dnsName` with an optional `namespace/` prefix. - // The `dnsName` should be specified using FQDN format, optionally including - // a wildcard character in the left-most component (e.g., `prod/*.example.com`). - // Set the `dnsName` to `*` to select all `VirtualService` hosts from the - // specified namespace (e.g.,`prod/*`). - // - // The `namespace` can be set to `*` or `.`, representing any or the current - // namespace, respectively. For example, `*/foo.example.com` selects the - // service from any available namespace while `./foo.example.com` only selects - // the service from the namespace of the sidecar. The default, if no `namespace/` - // is specified, is `*/`, that is, select services from any namespace. - // Any associated `DestinationRule` in the selected namespace will also be used. - // - // A `VirtualService` must be bound to the gateway and must have one or - // more hosts that match the hosts specified in a server. The match - // could be an exact match or a suffix match with the server's hosts. For - // example, if the server's hosts specifies `*.example.com`, a - // `VirtualService` with hosts `dev.example.com` or `prod.example.com` will - // match. However, a `VirtualService` with host `example.com` or - // `newexample.com` will not match. - // - // NOTE: Only virtual services exported to the gateway's namespace - // (e.g., `exportTo` value of `*`) can be referenced. - // Private configurations (e.g., `exportTo` set to `.`) will not be - // available. Refer to the `exportTo` setting in `VirtualService`, - // `DestinationRule`, and `ServiceEntry` configurations for details. - Hosts []string `protobuf:"bytes,2,rep,name=hosts,proto3" json:"hosts,omitempty"` - // Set of TLS related options that govern the server's behavior. Use - // these options to control if all http requests should be redirected to - // https, and the TLS modes to use. - Tls *ServerTLSSettings `protobuf:"bytes,3,opt,name=tls,proto3" json:"tls,omitempty"` - // The loopback IP endpoint or Unix domain socket to which traffic should - // be forwarded to by default. Format should be `127.0.0.1:PORT` or - // `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace). - // NOT IMPLEMENTED. - // $hide_from_docs - DefaultEndpoint string `protobuf:"bytes,5,opt,name=default_endpoint,json=defaultEndpoint,proto3" json:"default_endpoint,omitempty"` - // An optional name of the server, when set must be unique across all servers. - // This will be used for variety of purposes like prefixing stats generated with - // this name etc. - Name string `protobuf:"bytes,6,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *Server) Reset() { - *x = Server{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Server) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Server) ProtoMessage() {} - -func (x *Server) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Server.ProtoReflect.Descriptor instead. -func (*Server) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{1} -} - -func (x *Server) GetPort() *Port { - if x != nil { - return x.Port - } - return nil -} - -func (x *Server) GetBind() string { - if x != nil { - return x.Bind - } - return "" -} - -func (x *Server) GetHosts() []string { - if x != nil { - return x.Hosts - } - return nil -} - -func (x *Server) GetTls() *ServerTLSSettings { - if x != nil { - return x.Tls - } - return nil -} - -func (x *Server) GetDefaultEndpoint() string { - if x != nil { - return x.DefaultEndpoint - } - return "" -} - -func (x *Server) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -// Port describes the properties of a specific port of a service. -type Port struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A valid non-negative integer port number. - Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` - // The protocol exposed on the port. - // MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS. - // TLS implies the connection will be routed based on the SNI header to - // the destination without terminating the TLS connection. - Protocol string `protobuf:"bytes,2,opt,name=protocol,proto3" json:"protocol,omitempty"` - // Label assigned to the port. - Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` - // The port number on the endpoint where the traffic will be - // received. Applicable only when used with ServiceEntries. - TargetPort uint32 `protobuf:"varint,4,opt,name=target_port,json=targetPort,proto3" json:"target_port,omitempty"` -} - -func (x *Port) Reset() { - *x = Port{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Port) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Port) ProtoMessage() {} - -func (x *Port) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Port.ProtoReflect.Descriptor instead. -func (*Port) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{2} -} - -func (x *Port) GetNumber() uint32 { - if x != nil { - return x.Number - } - return 0 -} - -func (x *Port) GetProtocol() string { - if x != nil { - return x.Protocol - } - return "" -} - -func (x *Port) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Port) GetTargetPort() uint32 { - if x != nil { - return x.TargetPort - } - return 0 -} - -type ServerTLSSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // If set to true, the load balancer will send a 301 redirect for - // all http connections, asking the clients to use HTTPS. - HttpsRedirect bool `protobuf:"varint,1,opt,name=https_redirect,json=httpsRedirect,proto3" json:"https_redirect,omitempty"` - // Optional: Indicates whether connections to this port should be - // secured using TLS. The value of this field determines how TLS is - // enforced. - Mode ServerTLSSettings_TLSmode `protobuf:"varint,2,opt,name=mode,proto3,enum=istio.networking.v1beta1.ServerTLSSettings_TLSmode" json:"mode,omitempty"` - // REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file - // holding the server-side TLS certificate to use. - ServerCertificate string `protobuf:"bytes,3,opt,name=server_certificate,json=serverCertificate,proto3" json:"server_certificate,omitempty"` - // REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file - // holding the server's private key. - PrivateKey string `protobuf:"bytes,4,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` - // REQUIRED if mode is `MUTUAL`. The path to a file containing - // certificate authority certificates to use in verifying a presented - // client side certificate. - CaCertificates string `protobuf:"bytes,5,opt,name=ca_certificates,json=caCertificates,proto3" json:"ca_certificates,omitempty"` - // For gateways running on Kubernetes, the name of the secret that - // holds the TLS certs including the CA certificates. Applicable - // only on Kubernetes. The secret (of type `generic`) should - // contain the following keys and values: `key: - // ` and `cert: `. For mutual TLS, - // `cacert: ` can be provided in the same secret or - // a separate secret named `-cacert`. - // Secret of type tls for server certificates along with - // ca.crt key for CA certificates is also supported. - // Only one of server certificates and CA certificate - // or credentialName can be specified. - CredentialName string `protobuf:"bytes,10,opt,name=credential_name,json=credentialName,proto3" json:"credential_name,omitempty"` - // A list of alternate names to verify the subject identity in the - // certificate presented by the client. - SubjectAltNames []string `protobuf:"bytes,6,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of - // authorized client certificates. - // Note: When both verify_certificate_hash and verify_certificate_spki - // are specified, a hash matching either value will result in the - // certificate being accepted. - VerifyCertificateSpki []string `protobuf:"bytes,11,rep,name=verify_certificate_spki,json=verifyCertificateSpki,proto3" json:"verify_certificate_spki,omitempty"` - // An optional list of hex-encoded SHA-256 hashes of the - // authorized client certificates. Both simple and colon separated - // formats are acceptable. - // Note: When both verify_certificate_hash and verify_certificate_spki - // are specified, a hash matching either value will result in the - // certificate being accepted. - VerifyCertificateHash []string `protobuf:"bytes,12,rep,name=verify_certificate_hash,json=verifyCertificateHash,proto3" json:"verify_certificate_hash,omitempty"` - // Optional: Minimum TLS protocol version. - MinProtocolVersion ServerTLSSettings_TLSProtocol `protobuf:"varint,7,opt,name=min_protocol_version,json=minProtocolVersion,proto3,enum=istio.networking.v1beta1.ServerTLSSettings_TLSProtocol" json:"min_protocol_version,omitempty"` - // Optional: Maximum TLS protocol version. - MaxProtocolVersion ServerTLSSettings_TLSProtocol `protobuf:"varint,8,opt,name=max_protocol_version,json=maxProtocolVersion,proto3,enum=istio.networking.v1beta1.ServerTLSSettings_TLSProtocol" json:"max_protocol_version,omitempty"` - // Optional: If specified, only support the specified cipher list. - // Otherwise default to the default cipher list supported by Envoy. - CipherSuites []string `protobuf:"bytes,9,rep,name=cipher_suites,json=cipherSuites,proto3" json:"cipher_suites,omitempty"` -} - -func (x *ServerTLSSettings) Reset() { - *x = ServerTLSSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerTLSSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerTLSSettings) ProtoMessage() {} - -func (x *ServerTLSSettings) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_gateway_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServerTLSSettings.ProtoReflect.Descriptor instead. -func (*ServerTLSSettings) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_gateway_proto_rawDescGZIP(), []int{3} -} - -func (x *ServerTLSSettings) GetHttpsRedirect() bool { - if x != nil { - return x.HttpsRedirect - } - return false -} - -func (x *ServerTLSSettings) GetMode() ServerTLSSettings_TLSmode { - if x != nil { - return x.Mode - } - return ServerTLSSettings_PASSTHROUGH -} - -func (x *ServerTLSSettings) GetServerCertificate() string { - if x != nil { - return x.ServerCertificate - } - return "" -} - -func (x *ServerTLSSettings) GetPrivateKey() string { - if x != nil { - return x.PrivateKey - } - return "" -} - -func (x *ServerTLSSettings) GetCaCertificates() string { - if x != nil { - return x.CaCertificates - } - return "" -} - -func (x *ServerTLSSettings) GetCredentialName() string { - if x != nil { - return x.CredentialName - } - return "" -} - -func (x *ServerTLSSettings) GetSubjectAltNames() []string { - if x != nil { - return x.SubjectAltNames - } - return nil -} - -func (x *ServerTLSSettings) GetVerifyCertificateSpki() []string { - if x != nil { - return x.VerifyCertificateSpki - } - return nil -} - -func (x *ServerTLSSettings) GetVerifyCertificateHash() []string { - if x != nil { - return x.VerifyCertificateHash - } - return nil -} - -func (x *ServerTLSSettings) GetMinProtocolVersion() ServerTLSSettings_TLSProtocol { - if x != nil { - return x.MinProtocolVersion - } - return ServerTLSSettings_TLS_AUTO -} - -func (x *ServerTLSSettings) GetMaxProtocolVersion() ServerTLSSettings_TLSProtocol { - if x != nil { - return x.MaxProtocolVersion - } - return ServerTLSSettings_TLS_AUTO -} - -func (x *ServerTLSSettings) GetCipherSuites() []string { - if x != nil { - return x.CipherSuites - } - return nil -} - -var File_networking_v1beta1_gateway_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_gateway_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xdb, 0x01, - 0x0a, 0x07, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x40, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x08, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, - 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x3b, - 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf0, 0x01, 0x0a, 0x06, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x6f, 0x72, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x62, 0x69, 0x6e, 0x64, 0x12, 0x1a, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, - 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x81, - 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1c, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, - 0x72, 0x74, 0x22, 0xe9, 0x06, 0x0a, 0x11, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x4c, 0x53, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x5f, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0d, 0x68, 0x74, 0x74, 0x70, 0x73, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, - 0x47, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, - 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, - 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, - 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x6b, - 0x69, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x53, 0x70, 0x6b, 0x69, 0x12, 0x36, - 0x0a, 0x17, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x15, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x69, 0x0a, 0x14, 0x6d, 0x69, 0x6e, 0x5f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x12, 0x6d, - 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x69, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, - 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x53, 0x75, 0x69, 0x74, 0x65, - 0x73, 0x22, 0x5a, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, - 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x50, 0x41, - 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c, 0x49, - 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x04, 0x22, 0x4f, 0x0a, - 0x0b, 0x54, 0x4c, 0x53, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x0c, 0x0a, 0x08, - 0x54, 0x4c, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, - 0x53, 0x56, 0x31, 0x5f, 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x56, 0x31, - 0x5f, 0x31, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x56, 0x31, 0x5f, 0x32, 0x10, - 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x56, 0x31, 0x5f, 0x33, 0x10, 0x04, 0x42, 0x21, - 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_gateway_proto_rawDescOnce sync.Once - file_networking_v1beta1_gateway_proto_rawDescData = file_networking_v1beta1_gateway_proto_rawDesc -) - -func file_networking_v1beta1_gateway_proto_rawDescGZIP() []byte { - file_networking_v1beta1_gateway_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_gateway_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_gateway_proto_rawDescData) - }) - return file_networking_v1beta1_gateway_proto_rawDescData -} - -var file_networking_v1beta1_gateway_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_networking_v1beta1_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_networking_v1beta1_gateway_proto_goTypes = []interface{}{ - (ServerTLSSettings_TLSmode)(0), // 0: istio.networking.v1beta1.ServerTLSSettings.TLSmode - (ServerTLSSettings_TLSProtocol)(0), // 1: istio.networking.v1beta1.ServerTLSSettings.TLSProtocol - (*Gateway)(nil), // 2: istio.networking.v1beta1.Gateway - (*Server)(nil), // 3: istio.networking.v1beta1.Server - (*Port)(nil), // 4: istio.networking.v1beta1.Port - (*ServerTLSSettings)(nil), // 5: istio.networking.v1beta1.ServerTLSSettings - nil, // 6: istio.networking.v1beta1.Gateway.SelectorEntry -} -var file_networking_v1beta1_gateway_proto_depIdxs = []int32{ - 3, // 0: istio.networking.v1beta1.Gateway.servers:type_name -> istio.networking.v1beta1.Server - 6, // 1: istio.networking.v1beta1.Gateway.selector:type_name -> istio.networking.v1beta1.Gateway.SelectorEntry - 4, // 2: istio.networking.v1beta1.Server.port:type_name -> istio.networking.v1beta1.Port - 5, // 3: istio.networking.v1beta1.Server.tls:type_name -> istio.networking.v1beta1.ServerTLSSettings - 0, // 4: istio.networking.v1beta1.ServerTLSSettings.mode:type_name -> istio.networking.v1beta1.ServerTLSSettings.TLSmode - 1, // 5: istio.networking.v1beta1.ServerTLSSettings.min_protocol_version:type_name -> istio.networking.v1beta1.ServerTLSSettings.TLSProtocol - 1, // 6: istio.networking.v1beta1.ServerTLSSettings.max_protocol_version:type_name -> istio.networking.v1beta1.ServerTLSSettings.TLSProtocol - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_gateway_proto_init() } -func file_networking_v1beta1_gateway_proto_init() { - if File_networking_v1beta1_gateway_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_gateway_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Gateway); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_gateway_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Server); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_gateway_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Port); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_gateway_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerTLSSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_gateway_proto_rawDesc, - NumEnums: 2, - NumMessages: 5, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_gateway_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_gateway_proto_depIdxs, - EnumInfos: file_networking_v1beta1_gateway_proto_enumTypes, - MessageInfos: file_networking_v1beta1_gateway_proto_msgTypes, - }.Build() - File_networking_v1beta1_gateway_proto = out.File - file_networking_v1beta1_gateway_proto_rawDesc = nil - file_networking_v1beta1_gateway_proto_goTypes = nil - file_networking_v1beta1_gateway_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/proxy_config.pb.go b/gen/proto/networking/v1beta1/proxy_config.pb.go deleted file mode 100644 index 828022b..0000000 --- a/gen/proto/networking/v1beta1/proxy_config.pb.go +++ /dev/null @@ -1,386 +0,0 @@ -// Copyright 2021 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/proxy_config.proto - -// $schema: istio.networking.v1beta1.ProxyConfig -// $title: ProxyConfig -// $description: Provides configuration for individual workloads. -// $location: https://istio.io/docs/reference/config/networking/proxy-config.html -// $aliases: [/docs/reference/config/networking/v1beta1/proxy-config] -// $mode: file - -// `ProxyConfig` exposes proxy level configuration options. `ProxyConfig` can be configured on a per-workload basis, -// a per-namespace basis, or mesh-wide. `ProxyConfig` is not a required resource; there are default values in place, which are documented -// inline with each field. -// -// **NOTE**: fields in ProxyConfig are not dynamically configured - changes will require restart of workloads to take effect. -// -// For any namespace, including the root configuration namespace, it is only valid -// to have a single workload selector-less `ProxyConfig` resource. -// -// For resources with a workload selector, it is only valid to have one resource selecting -// any given workload. -// -// For mesh level configuration, put the resource in the root configuration namespace for -// your Istio installation *without* a workload selector: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: my-proxyconfig -// namespace: istio-system -// spec: -// concurrency: 0 -// image: -// type: distroless -// ``` -// -// For namespace level configuration, put the resource in the desired namespace without a workload selector: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: my-ns-proxyconfig -// namespace: user-namespace -// spec: -// concurrency: 0 -// ``` -// -// For workload level configuration, set the `selector` field on the `ProxyConfig` resource: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: per-workload-proxyconfig -// namespace: example -// spec: -// selector: -// labels: -// app: ratings -// concurrency: 0 -// image: -// type: debug -// ``` -// -// If a `ProxyConfig` CR is defined that matches a workload it will merge with its `proxy.istio.io/config` annotation if present, -// with the CR taking precedence over the annotation for overlapping fields. Similarly, if a mesh wide `ProxyConfig` CR is defined and -// `meshConfig.DefaultConfig` is set, the two resources will be merged with the CR taking precedence for overlapping fields. -// - -package v1beta1 - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - v1beta1 "istio.io/api/type/v1beta1" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// `ProxyConfig` exposes proxy level configuration options. -// -// -// -// -type ProxyConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. Selectors specify the set of pods/VMs on which this `ProxyConfig` resource should be applied. - // If not set, the `ProxyConfig` resource will be applied to all workloads in the namespace where this resource is defined. - Selector *v1beta1.WorkloadSelector `protobuf:"bytes,1,opt,name=selector,proto3" json:"selector,omitempty"` - // The number of worker threads to run. - // If unset, defaults to 2. If set to 0, this will be configured to use all cores on the machine using - // CPU requests and limits to choose a value, with limits taking precedence over requests. - Concurrency *wrapperspb.Int32Value `protobuf:"bytes,2,opt,name=concurrency,proto3" json:"concurrency,omitempty"` - // Additional environment variables for the proxy. - // Names starting with `ISTIO_META_` will be included in the generated bootstrap configuration and sent to the XDS server. - EnvironmentVariables map[string]string `protobuf:"bytes,3,rep,name=environment_variables,json=environmentVariables,proto3" json:"environment_variables,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Specifies the details of the proxy image. - Image *ProxyImage `protobuf:"bytes,4,opt,name=image,proto3" json:"image,omitempty"` -} - -func (x *ProxyConfig) Reset() { - *x = ProxyConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_proxy_config_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProxyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProxyConfig) ProtoMessage() {} - -func (x *ProxyConfig) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_proxy_config_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProxyConfig.ProtoReflect.Descriptor instead. -func (*ProxyConfig) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_proxy_config_proto_rawDescGZIP(), []int{0} -} - -func (x *ProxyConfig) GetSelector() *v1beta1.WorkloadSelector { - if x != nil { - return x.Selector - } - return nil -} - -func (x *ProxyConfig) GetConcurrency() *wrapperspb.Int32Value { - if x != nil { - return x.Concurrency - } - return nil -} - -func (x *ProxyConfig) GetEnvironmentVariables() map[string]string { - if x != nil { - return x.EnvironmentVariables - } - return nil -} - -func (x *ProxyConfig) GetImage() *ProxyImage { - if x != nil { - return x.Image - } - return nil -} - -// The following values are used to construct proxy image url. -// $hub/$image_name/$tag-$image_type -// example: docker.io/istio/proxyv2:1.11.1 or docker.io/istio/proxyv2:1.11.1-distroless -// This information was previously part of the Values API. -type ProxyImage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The image type of the image. - // Istio publishes default, debug, and distroless images. - // Other values are allowed if those image types (example: centos) are published to the specified hub. - // supported values: default, debug, distroless. - ImageType string `protobuf:"bytes,1,opt,name=image_type,json=imageType,proto3" json:"image_type,omitempty"` -} - -func (x *ProxyImage) Reset() { - *x = ProxyImage{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_proxy_config_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProxyImage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProxyImage) ProtoMessage() {} - -func (x *ProxyImage) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_proxy_config_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProxyImage.ProtoReflect.Descriptor instead. -func (*ProxyImage) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_proxy_config_proto_rawDescGZIP(), []int{1} -} - -func (x *ProxyImage) GetImageType() string { - if x != nil { - return x.ImageType - } - return "" -} - -var File_networking_v1beta1_proxy_config_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_proxy_config_proto_rawDesc = []byte{ - 0x0a, 0x25, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1b, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x89, - 0x03, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, - 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x12, - 0x74, 0x0a, 0x15, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x14, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x1a, 0x47, 0x0a, 0x19, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2b, 0x0a, 0x0a, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, - 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_proxy_config_proto_rawDescOnce sync.Once - file_networking_v1beta1_proxy_config_proto_rawDescData = file_networking_v1beta1_proxy_config_proto_rawDesc -) - -func file_networking_v1beta1_proxy_config_proto_rawDescGZIP() []byte { - file_networking_v1beta1_proxy_config_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_proxy_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_proxy_config_proto_rawDescData) - }) - return file_networking_v1beta1_proxy_config_proto_rawDescData -} - -var file_networking_v1beta1_proxy_config_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_networking_v1beta1_proxy_config_proto_goTypes = []interface{}{ - (*ProxyConfig)(nil), // 0: istio.networking.v1beta1.ProxyConfig - (*ProxyImage)(nil), // 1: istio.networking.v1beta1.ProxyImage - nil, // 2: istio.networking.v1beta1.ProxyConfig.EnvironmentVariablesEntry - (*v1beta1.WorkloadSelector)(nil), // 3: istio.type.v1beta1.WorkloadSelector - (*wrapperspb.Int32Value)(nil), // 4: google.protobuf.Int32Value -} -var file_networking_v1beta1_proxy_config_proto_depIdxs = []int32{ - 3, // 0: istio.networking.v1beta1.ProxyConfig.selector:type_name -> istio.type.v1beta1.WorkloadSelector - 4, // 1: istio.networking.v1beta1.ProxyConfig.concurrency:type_name -> google.protobuf.Int32Value - 2, // 2: istio.networking.v1beta1.ProxyConfig.environment_variables:type_name -> istio.networking.v1beta1.ProxyConfig.EnvironmentVariablesEntry - 1, // 3: istio.networking.v1beta1.ProxyConfig.image:type_name -> istio.networking.v1beta1.ProxyImage - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_proxy_config_proto_init() } -func file_networking_v1beta1_proxy_config_proto_init() { - if File_networking_v1beta1_proxy_config_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_proxy_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProxyConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_proxy_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProxyImage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_proxy_config_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_proxy_config_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_proxy_config_proto_depIdxs, - MessageInfos: file_networking_v1beta1_proxy_config_proto_msgTypes, - }.Build() - File_networking_v1beta1_proxy_config_proto = out.File - file_networking_v1beta1_proxy_config_proto_rawDesc = nil - file_networking_v1beta1_proxy_config_proto_goTypes = nil - file_networking_v1beta1_proxy_config_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/service_entry.pb.go b/gen/proto/networking/v1beta1/service_entry.pb.go deleted file mode 100644 index d7d43c1..0000000 --- a/gen/proto/networking/v1beta1/service_entry.pb.go +++ /dev/null @@ -1,1295 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/service_entry.proto - -// $schema: istio.networking.v1beta1.ServiceEntry -// $title: Service Entry -// $description: Configuration affecting service registry. -// $location: https://istio.io/docs/reference/config/networking/service-entry.html -// $aliases: [/docs/reference/config/networking/v1beta1/service-entry] -// $mode: none - -// `ServiceEntry` enables adding additional entries into Istio's -// internal service registry, so that auto-discovered services in the -// mesh can access/route to these manually specified services. A -// service entry describes the properties of a service (DNS name, -// VIPs, ports, protocols, endpoints). These services could be -// external to the mesh (e.g., web APIs) or mesh-internal services -// that are not part of the platform's service registry (e.g., a set -// of VMs talking to services in Kubernetes). In addition, the -// endpoints of a service entry can also be dynamically selected by -// using the `workloadSelector` field. These endpoints can be VM -// workloads declared using the `WorkloadEntry` object or Kubernetes -// pods. The ability to select both pods and VMs under a single -// service allows for migration of services from VMs to Kubernetes -// without having to change the existing DNS names associated with the -// services. -// -// The following example declares a few external APIs accessed by internal -// applications over HTTPS. The sidecar inspects the SNI value in the -// ClientHello message to route to the appropriate external service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-https -// spec: -// hosts: -// - api.dropboxapi.com -// - www.googleapis.com -// - api.facebook.com -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-https -// spec: -// hosts: -// - api.dropboxapi.com -// - www.googleapis.com -// - api.facebook.com -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// The following configuration adds a set of MongoDB instances running on -// unmanaged VMs to Istio's registry, so that these services can be treated -// as any other service in the mesh. The associated DestinationRule is used -// to initiate mTLS connections to the database instances. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-mongocluster -// spec: -// hosts: -// - mymongodb.somedomain # not used -// addresses: -// - 192.192.192.192/24 # VIPs -// ports: -// - number: 27018 -// name: mongodb -// protocol: MONGO -// location: MESH_INTERNAL -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-mongocluster -// spec: -// hosts: -// - mymongodb.somedomain # not used -// addresses: -// - 192.192.192.192/24 # VIPs -// ports: -// - number: 27018 -// name: mongodb -// protocol: MONGO -// location: MESH_INTERNAL -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// ``` -// {{}} -// {{}} -// -// and the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: mtls-mongocluster -// spec: -// host: mymongodb.somedomain -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: mtls-mongocluster -// spec: -// host: mymongodb.somedomain -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// {{}} -// -// The following example uses a combination of service entry and TLS -// routing in a virtual service to steer traffic based on the SNI value to -// an internal egress firewall. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-redirect -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: NONE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-redirect -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: NONE -// ``` -// {{}} -// {{}} -// -// And the associated VirtualService to route based on the SNI value. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: tls-routing -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// tls: -// - match: -// - sniHosts: -// - wikipedia.org -// - "*.wikipedia.org" -// route: -// - destination: -// host: internal-egress-firewall.ns1.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: tls-routing -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// tls: -// - match: -// - sniHosts: -// - wikipedia.org -// - "*.wikipedia.org" -// route: -// - destination: -// host: internal-egress-firewall.ns1.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// The virtual service with TLS match serves to override the default SNI -// match. In the absence of a virtual service, traffic will be forwarded to -// the wikipedia domains. -// -// The following example demonstrates the use of a dedicated egress gateway -// through which all external service traffic is forwarded. -// The 'exportTo' field allows for control over the visibility of a service -// declaration to other namespaces in the mesh. By default, a service is exported -// to all namespaces. The following example restricts the visibility to the -// current namespace, represented by ".", so that it cannot be used by other -// namespaces. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-httpbin -// namespace : egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "." -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-httpbin -// namespace : egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "." -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// Define a gateway to handle all egress traffic. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: istio-egressgateway -// namespace: istio-system -// spec: -// selector: -// istio: egressgateway -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: istio-egressgateway -// namespace: istio-system -// spec: -// selector: -// istio: egressgateway -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// And the associated `VirtualService` to route from the sidecar to the -// gateway service (`istio-egressgateway.istio-system.svc.cluster.local`), as -// well as route from the gateway to the external service. Note that the -// virtual service is exported to all namespaces enabling them to route traffic -// through the gateway to the external service. Forcing traffic to go through -// a managed middle proxy like this is a common practice. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: gateway-routing -// namespace: egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "*" -// gateways: -// - mesh -// - istio-egressgateway -// http: -// - match: -// - port: 80 -// gateways: -// - mesh -// route: -// - destination: -// host: istio-egressgateway.istio-system.svc.cluster.local -// - match: -// - port: 80 -// gateways: -// - istio-egressgateway -// route: -// - destination: -// host: example.com -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: gateway-routing -// namespace: egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "*" -// gateways: -// - mesh -// - istio-egressgateway -// http: -// - match: -// - port: 80 -// gateways: -// - mesh -// route: -// - destination: -// host: istio-egressgateway.istio-system.svc.cluster.local -// - match: -// - port: 80 -// gateways: -// - istio-egressgateway -// route: -// - destination: -// host: example.com -// ``` -// {{}} -// {{}} -// -// The following example demonstrates the use of wildcards in the hosts for -// external services. If the connection has to be routed to the IP address -// requested by the application (i.e. application resolves DNS and attempts -// to connect to a specific IP), the discovery mode must be set to `NONE`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-wildcard-example -// spec: -// hosts: -// - "*.bar.com" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: NONE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-wildcard-example -// spec: -// hosts: -// - "*.bar.com" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: NONE -// ``` -// {{}} -// {{}} -// -// The following example demonstrates a service that is available via a -// Unix Domain Socket on the host of the client. The resolution must be -// set to STATIC to use Unix address endpoints. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: unix-domain-socket-example -// spec: -// hosts: -// - "example.unix.local" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: unix:///var/run/example/socket -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: unix-domain-socket-example -// spec: -// hosts: -// - "example.unix.local" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: unix:///var/run/example/socket -// ``` -// {{}} -// {{}} -// -// For HTTP-based services, it is possible to create a `VirtualService` -// backed by multiple DNS addressable endpoints. In such a scenario, the -// application can use the `HTTP_PROXY` environment variable to transparently -// reroute API calls for the `VirtualService` to a chosen backend. For -// example, the following configuration creates a non-existent external -// service called foo.bar.com backed by three domains: us.foo.bar.com:8080, -// uk.foo.bar.com:9080, and in.foo.bar.com:7080 -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-dns -// spec: -// hosts: -// - foo.bar.com -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// endpoints: -// - address: us.foo.bar.com -// ports: -// http: 8080 -// - address: uk.foo.bar.com -// ports: -// http: 9080 -// - address: in.foo.bar.com -// ports: -// http: 7080 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-dns -// spec: -// hosts: -// - foo.bar.com -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// endpoints: -// - address: us.foo.bar.com -// ports: -// http: 8080 -// - address: uk.foo.bar.com -// ports: -// http: 9080 -// - address: in.foo.bar.com -// ports: -// http: 7080 -// ``` -// {{}} -// {{}} -// -// With `HTTP_PROXY=http://localhost/`, calls from the application to -// `http://foo.bar.com` will be load balanced across the three domains -// specified above. In other words, a call to `http://foo.bar.com/baz` would -// be translated to `http://uk.foo.bar.com/baz`. -// -// The following example illustrates the usage of a `ServiceEntry` -// containing a subject alternate name -// whose format conforms to the [SPIFFE standard](https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md): -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: httpbin -// namespace : httpbin-ns -// spec: -// hosts: -// - example.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// subjectAltNames: -// - "spiffe://cluster.local/ns/httpbin-ns/sa/httpbin-service-account" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: httpbin -// namespace : httpbin-ns -// spec: -// hosts: -// - example.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// subjectAltNames: -// - "spiffe://cluster.local/ns/httpbin-ns/sa/httpbin-service-account" -// ``` -// {{}} -// {{}} -// -// The following example demonstrates the use of `ServiceEntry` with a -// `workloadSelector` to handle the migration of a service -// `details.bookinfo.com` from VMs to Kubernetes. The service has two -// VM-based instances with sidecars as well as a set of Kubernetes -// pods managed by a standard deployment object. Consumers of this -// service in the mesh will be automatically load balanced across the -// VMs and Kubernetes. VM for the `details.bookinfo.com` -// service. This VM has sidecar installed and bootstrapped using the -// `details-legacy` service account. The sidecar receives HTTP traffic -// on port 80 (wrapped in istio mutual TLS) and forwards it to the -// application on the localhost on the same port. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-vm-1 -// spec: -// serviceAccount: details -// address: 2.2.2.2 -// labels: -// app: details -// instance-id: vm1 -// --- -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-vm-2 -// spec: -// serviceAccount: details -// address: 3.3.3.3 -// labels: -// app: details -// instance-id: vm2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-vm-1 -// spec: -// serviceAccount: details -// address: 2.2.2.2 -// labels: -// app: details -// instance-id: vm1 -// --- -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-vm-2 -// spec: -// serviceAccount: details -// address: 3.3.3.3 -// labels: -// app: details -// instance-id: vm2 -// ``` -// {{}} -// {{}} -// -// Assuming there is also a Kubernetes deployment with pod labels -// `app: details` using the same service account `details`, the -// following service entry declares a service spanning both VMs and -// Kubernetes: -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// workloadSelector: -// labels: -// app: details -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// workloadSelector: -// labels: -// app: details -// ``` -// {{}} -// {{}} - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Location specifies whether the service is part of Istio mesh or -// outside the mesh. Location determines the behavior of several -// features, such as service-to-service mTLS authentication, policy -// enforcement, etc. When communicating with services outside the mesh, -// Istio's mTLS authentication is disabled, and policy enforcement is -// performed on the client-side as opposed to server-side. -type ServiceEntry_Location int32 - -const ( - // Signifies that the service is external to the mesh. Typically used - // to indicate external services consumed through APIs. - ServiceEntry_MESH_EXTERNAL ServiceEntry_Location = 0 - // Signifies that the service is part of the mesh. Typically used to - // indicate services added explicitly as part of expanding the service - // mesh to include unmanaged infrastructure (e.g., VMs added to a - // Kubernetes based service mesh). - ServiceEntry_MESH_INTERNAL ServiceEntry_Location = 1 -) - -// Enum value maps for ServiceEntry_Location. -var ( - ServiceEntry_Location_name = map[int32]string{ - 0: "MESH_EXTERNAL", - 1: "MESH_INTERNAL", - } - ServiceEntry_Location_value = map[string]int32{ - "MESH_EXTERNAL": 0, - "MESH_INTERNAL": 1, - } -) - -func (x ServiceEntry_Location) Enum() *ServiceEntry_Location { - p := new(ServiceEntry_Location) - *p = x - return p -} - -func (x ServiceEntry_Location) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceEntry_Location) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_service_entry_proto_enumTypes[0].Descriptor() -} - -func (ServiceEntry_Location) Type() protoreflect.EnumType { - return &file_networking_v1beta1_service_entry_proto_enumTypes[0] -} - -func (x ServiceEntry_Location) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceEntry_Location.Descriptor instead. -func (ServiceEntry_Location) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_service_entry_proto_rawDescGZIP(), []int{0, 0} -} - -// Resolution determines how the proxy will resolve the IP addresses of -// the network endpoints associated with the service, so that it can -// route to one of them. The resolution mode specified here has no impact -// on how the application resolves the IP address associated with the -// service. The application may still have to use DNS to resolve the -// service to an IP so that the outbound traffic can be captured by the -// Proxy. Alternatively, for HTTP services, the application could -// directly communicate with the proxy (e.g., by setting HTTP_PROXY) to -// talk to these services. -type ServiceEntry_Resolution int32 - -const ( - // Assume that incoming connections have already been resolved (to a - // specific destination IP address). Such connections are typically - // routed via the proxy using mechanisms such as IP table REDIRECT/ - // eBPF. After performing any routing related transformations, the - // proxy will forward the connection to the IP address to which the - // connection was bound. - ServiceEntry_NONE ServiceEntry_Resolution = 0 - // Use the static IP addresses specified in endpoints (see below) as the - // backing instances associated with the service. - ServiceEntry_STATIC ServiceEntry_Resolution = 1 - // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. If no endpoints are specified, the proxy - // will resolve the DNS address specified in the hosts field, if - // wildcards are not used. If endpoints are specified, the DNS - // addresses specified in the endpoints will be resolved to determine - // the destination IP address. DNS resolution cannot be used with Unix - // domain socket endpoints. - ServiceEntry_DNS ServiceEntry_Resolution = 2 - // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the - // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections - // made to hosts will be retained even if DNS records change frequently - // eliminating draining connection pools and connection cycling. - // This is best suited for large web scale services that - // must be accessed via DNS. The proxy will resolve the DNS address - // specified in the hosts field, if wildcards are not used. DNS resolution - // cannot be used with Unix domain socket endpoints. - ServiceEntry_DNS_ROUND_ROBIN ServiceEntry_Resolution = 3 -) - -// Enum value maps for ServiceEntry_Resolution. -var ( - ServiceEntry_Resolution_name = map[int32]string{ - 0: "NONE", - 1: "STATIC", - 2: "DNS", - 3: "DNS_ROUND_ROBIN", - } - ServiceEntry_Resolution_value = map[string]int32{ - "NONE": 0, - "STATIC": 1, - "DNS": 2, - "DNS_ROUND_ROBIN": 3, - } -) - -func (x ServiceEntry_Resolution) Enum() *ServiceEntry_Resolution { - p := new(ServiceEntry_Resolution) - *p = x - return p -} - -func (x ServiceEntry_Resolution) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ServiceEntry_Resolution) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_service_entry_proto_enumTypes[1].Descriptor() -} - -func (ServiceEntry_Resolution) Type() protoreflect.EnumType { - return &file_networking_v1beta1_service_entry_proto_enumTypes[1] -} - -func (x ServiceEntry_Resolution) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ServiceEntry_Resolution.Descriptor instead. -func (ServiceEntry_Resolution) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_service_entry_proto_rawDescGZIP(), []int{0, 1} -} - -// ServiceEntry enables adding additional entries into Istio's internal -// service registry. -// -// -// -// -// -type ServiceEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The hosts associated with the ServiceEntry. Could be a DNS - // name with wildcard prefix. - // - // 1. The hosts field is used to select matching hosts in VirtualServices and DestinationRules. - // 2. For HTTP traffic the HTTP Host/Authority header will be matched against the hosts field. - // 3. For HTTPs or TLS traffic containing Server Name Indication (SNI), the SNI value - // will be matched against the hosts field. - // - // **NOTE 1:** When resolution is set to type DNS and no endpoints - // are specified, the host field will be used as the DNS name of the - // endpoint to route traffic to. - // - // **NOTE 2:** If the hostname matches with the name of a service - // from another service registry such as Kubernetes that also - // supplies its own set of endpoints, the ServiceEntry will be - // treated as a decorator of the existing Kubernetes - // service. Properties in the service entry will be added to the - // Kubernetes service if applicable. Currently, the only the - // following additional properties will be considered by `istiod`: - // - // 1. subjectAltNames: In addition to verifying the SANs of the - // service accounts associated with the pods of the service, the - // SANs specified here will also be verified. - // - Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"` - // The virtual IP addresses associated with the service. Could be CIDR - // prefix. For HTTP traffic, generated route configurations will include http route - // domains for both the `addresses` and `hosts` field values and the destination will - // be identified based on the HTTP Host/Authority header. - // If one or more IP addresses are specified, - // the incoming traffic will be identified as belonging to this service - // if the destination IP matches the IP/CIDRs specified in the addresses - // field. If the Addresses field is empty, traffic will be identified - // solely based on the destination port. In such scenarios, the port on - // which the service is being accessed must not be shared by any other - // service in the mesh. In other words, the sidecar will behave as a - // simple TCP proxy, forwarding incoming traffic on a specified port to - // the specified destination endpoint IP/host. Unix domain socket - // addresses are not supported in this field. - Addresses []string `protobuf:"bytes,2,rep,name=addresses,proto3" json:"addresses,omitempty"` - // The ports associated with the external service. If the - // Endpoints are Unix domain socket addresses, there must be exactly one - // port. - Ports []*Port `protobuf:"bytes,3,rep,name=ports,proto3" json:"ports,omitempty"` - // Specify whether the service should be considered external to the mesh - // or part of the mesh. - Location ServiceEntry_Location `protobuf:"varint,4,opt,name=location,proto3,enum=istio.networking.v1beta1.ServiceEntry_Location" json:"location,omitempty"` - // Service discovery mode for the hosts. Care must be taken - // when setting the resolution mode to NONE for a TCP port without - // accompanying IP addresses. In such cases, traffic to any IP on - // said port will be allowed (i.e. `0.0.0.0:`). - Resolution ServiceEntry_Resolution `protobuf:"varint,5,opt,name=resolution,proto3,enum=istio.networking.v1beta1.ServiceEntry_Resolution" json:"resolution,omitempty"` - // One or more endpoints associated with the service. Only one of - // `endpoints` or `workloadSelector` can be specified. - Endpoints []*WorkloadEntry `protobuf:"bytes,6,rep,name=endpoints,proto3" json:"endpoints,omitempty"` - // Applicable only for MESH_INTERNAL services. Only one of - // `endpoints` or `workloadSelector` can be specified. Selects one - // or more Kubernetes pods or VM workloads (specified using - // `WorkloadEntry`) based on their labels. The `WorkloadEntry` object - // representing the VMs should be defined in the same namespace as - // the ServiceEntry. - WorkloadSelector *WorkloadSelector `protobuf:"bytes,9,opt,name=workload_selector,json=workloadSelector,proto3" json:"workload_selector,omitempty"` - // A list of namespaces to which this service is exported. Exporting a service - // allows it to be used by sidecars, gateways and virtual services defined in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of services across - // namespace boundaries. - // - // If no namespaces are specified then the service is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the service is declared in. Similarly the value "*" is reserved and - // defines an export to all namespaces. - // - // For a Kubernetes Service, the equivalent effect can be achieved by setting - // the annotation "networking.istio.io/exportTo" to a comma-separated list - // of namespace names. - ExportTo []string `protobuf:"bytes,7,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"` - // If specified, the proxy will verify that the server certificate's - // subject alternate name matches one of the specified values. - // - // NOTE: When using the workloadEntry with workloadSelectors, the - // service account specified in the workloadEntry will also be used - // to derive the additional subject alternate names that should be - // verified. - SubjectAltNames []string `protobuf:"bytes,8,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` -} - -func (x *ServiceEntry) Reset() { - *x = ServiceEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_service_entry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServiceEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServiceEntry) ProtoMessage() {} - -func (x *ServiceEntry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_service_entry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ServiceEntry.ProtoReflect.Descriptor instead. -func (*ServiceEntry) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_service_entry_proto_rawDescGZIP(), []int{0} -} - -func (x *ServiceEntry) GetHosts() []string { - if x != nil { - return x.Hosts - } - return nil -} - -func (x *ServiceEntry) GetAddresses() []string { - if x != nil { - return x.Addresses - } - return nil -} - -func (x *ServiceEntry) GetPorts() []*Port { - if x != nil { - return x.Ports - } - return nil -} - -func (x *ServiceEntry) GetLocation() ServiceEntry_Location { - if x != nil { - return x.Location - } - return ServiceEntry_MESH_EXTERNAL -} - -func (x *ServiceEntry) GetResolution() ServiceEntry_Resolution { - if x != nil { - return x.Resolution - } - return ServiceEntry_NONE -} - -func (x *ServiceEntry) GetEndpoints() []*WorkloadEntry { - if x != nil { - return x.Endpoints - } - return nil -} - -func (x *ServiceEntry) GetWorkloadSelector() *WorkloadSelector { - if x != nil { - return x.WorkloadSelector - } - return nil -} - -func (x *ServiceEntry) GetExportTo() []string { - if x != nil { - return x.ExportTo - } - return nil -} - -func (x *ServiceEntry) GetSubjectAltNames() []string { - if x != nil { - return x.SubjectAltNames - } - return nil -} - -var File_networking_v1beta1_service_entry_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_service_entry_proto_rawDesc = []byte{ - 0x0a, 0x26, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x6e, 0x74, - 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, - 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x87, 0x05, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x1a, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1c, 0x0a, - 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x70, - 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x57, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, - 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x57, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, - 0x09, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x6f, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x30, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, - 0x4e, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4d, 0x45, 0x53, 0x48, 0x5f, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x22, 0x40, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, 0x49, 0x43, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, - 0x44, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x4e, 0x53, 0x5f, 0x52, 0x4f, 0x55, - 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, 0x10, 0x03, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_service_entry_proto_rawDescOnce sync.Once - file_networking_v1beta1_service_entry_proto_rawDescData = file_networking_v1beta1_service_entry_proto_rawDesc -) - -func file_networking_v1beta1_service_entry_proto_rawDescGZIP() []byte { - file_networking_v1beta1_service_entry_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_service_entry_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_service_entry_proto_rawDescData) - }) - return file_networking_v1beta1_service_entry_proto_rawDescData -} - -var file_networking_v1beta1_service_entry_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_networking_v1beta1_service_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_networking_v1beta1_service_entry_proto_goTypes = []interface{}{ - (ServiceEntry_Location)(0), // 0: istio.networking.v1beta1.ServiceEntry.Location - (ServiceEntry_Resolution)(0), // 1: istio.networking.v1beta1.ServiceEntry.Resolution - (*ServiceEntry)(nil), // 2: istio.networking.v1beta1.ServiceEntry - (*Port)(nil), // 3: istio.networking.v1beta1.Port - (*WorkloadEntry)(nil), // 4: istio.networking.v1beta1.WorkloadEntry - (*WorkloadSelector)(nil), // 5: istio.networking.v1beta1.WorkloadSelector -} -var file_networking_v1beta1_service_entry_proto_depIdxs = []int32{ - 3, // 0: istio.networking.v1beta1.ServiceEntry.ports:type_name -> istio.networking.v1beta1.Port - 0, // 1: istio.networking.v1beta1.ServiceEntry.location:type_name -> istio.networking.v1beta1.ServiceEntry.Location - 1, // 2: istio.networking.v1beta1.ServiceEntry.resolution:type_name -> istio.networking.v1beta1.ServiceEntry.Resolution - 4, // 3: istio.networking.v1beta1.ServiceEntry.endpoints:type_name -> istio.networking.v1beta1.WorkloadEntry - 5, // 4: istio.networking.v1beta1.ServiceEntry.workload_selector:type_name -> istio.networking.v1beta1.WorkloadSelector - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_service_entry_proto_init() } -func file_networking_v1beta1_service_entry_proto_init() { - if File_networking_v1beta1_service_entry_proto != nil { - return - } - file_networking_v1beta1_gateway_proto_init() - file_networking_v1beta1_sidecar_proto_init() - file_networking_v1beta1_workload_entry_proto_init() - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_service_entry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServiceEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_service_entry_proto_rawDesc, - NumEnums: 2, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_service_entry_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_service_entry_proto_depIdxs, - EnumInfos: file_networking_v1beta1_service_entry_proto_enumTypes, - MessageInfos: file_networking_v1beta1_service_entry_proto_msgTypes, - }.Build() - File_networking_v1beta1_service_entry_proto = out.File - file_networking_v1beta1_service_entry_proto_rawDesc = nil - file_networking_v1beta1_service_entry_proto_goTypes = nil - file_networking_v1beta1_service_entry_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/sidecar.pb.go b/gen/proto/networking/v1beta1/sidecar.pb.go deleted file mode 100644 index f034ba4..0000000 --- a/gen/proto/networking/v1beta1/sidecar.pb.go +++ /dev/null @@ -1,1242 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/sidecar.proto - -// $schema: istio.networking.v1beta1.Sidecar -// $title: Sidecar -// $description: Configuration affecting network reachability of a sidecar. -// $location: https://istio.io/docs/reference/config/networking/sidecar.html -// $aliases: [/docs/reference/config/networking/v1beta1/sidecar] -// $mode: none - -// `Sidecar` describes the configuration of the sidecar proxy that mediates -// inbound and outbound communication to the workload instance it is attached to. By -// default, Istio will program all sidecar proxies in the mesh with the -// necessary configuration required to reach every workload instance in the mesh, as -// well as accept traffic on all the ports associated with the -// workload. The `Sidecar` configuration provides a way to fine tune the set of -// ports, protocols that the proxy will accept when forwarding traffic to -// and from the workload. In addition, it is possible to restrict the set -// of services that the proxy can reach when forwarding outbound traffic -// from workload instances. -// -// Services and configuration in a mesh are organized into one or more -// namespaces (e.g., a Kubernetes namespace or a CF org/space). A `Sidecar` -// configuration in a namespace will apply to one or more workload instances in the same -// namespace, selected using the `workloadSelector` field. In the absence of a -// `workloadSelector`, it will apply to all workload instances in the same -// namespace. When determining the `Sidecar` configuration to be applied to a -// workload instance, preference will be given to the resource with a -// `workloadSelector` that selects this workload instance, over a `Sidecar` configuration -// without any `workloadSelector`. -// -// **NOTE 1**: *_Each namespace can have only one `Sidecar` -// configuration without any `workloadSelector`_ that specifies the -// default for all pods in that namespace*. It is recommended to use -// the name `default` for the namespace-wide sidecar. The behavior of -// the system is undefined if more than one selector-less `Sidecar` -// configurations exist in a given namespace. The behavior of the -// system is undefined if two or more `Sidecar` configurations with a -// `workloadSelector` select the same workload instance. -// -// **NOTE 2**: *_A `Sidecar` configuration in the `MeshConfig` -// [root namespace](https://istio.io/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig) -// will be applied by default to all namespaces without a `Sidecar` -// configuration_*. This global default `Sidecar` configuration should not have -// any `workloadSelector`. -// -// The example below declares a global default `Sidecar` configuration -// in the root namespace called `istio-config`, that configures -// sidecars in all namespaces to allow egress traffic only to other -// workloads in the same namespace as well as to services in the -// `istio-system` namespace. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: default -// namespace: istio-config -// spec: -// egress: -// - hosts: -// - "./*" -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: default -// namespace: istio-config -// spec: -// egress: -// - hosts: -// - "./*" -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// The example below declares a `Sidecar` configuration in the -// `prod-us1` namespace that overrides the global default defined -// above, and configures the sidecars in the namespace to allow egress -// traffic to public services in the `prod-us1`, `prod-apis`, and the -// `istio-system` namespaces. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: default -// namespace: prod-us1 -// spec: -// egress: -// - hosts: -// - "prod-us1/*" -// - "prod-apis/*" -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: default -// namespace: prod-us1 -// spec: -// egress: -// - hosts: -// - "prod-us1/*" -// - "prod-apis/*" -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// The following example declares a `Sidecar` configuration in the -// `prod-us1` namespace for all pods with labels `app: ratings` -// belonging to the `ratings.prod-us1` service. The workload accepts -// inbound HTTP traffic on port 9080. The traffic is then forwarded to -// the attached workload instance listening on a Unix domain -// socket. In the egress direction, in addition to the `istio-system` -// namespace, the sidecar proxies only HTTP traffic bound for port -// 9080 for services in the `prod-us1` namespace. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: ratings -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: ratings -// ingress: -// - port: -// number: 9080 -// protocol: HTTP -// name: somename -// defaultEndpoint: unix:///var/run/someuds.sock -// egress: -// - port: -// number: 9080 -// protocol: HTTP -// name: egresshttp -// hosts: -// - "prod-us1/*" -// - hosts: -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: ratings -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: ratings -// ingress: -// - port: -// number: 9080 -// protocol: HTTP -// name: somename -// defaultEndpoint: unix:///var/run/someuds.sock -// egress: -// - port: -// number: 9080 -// protocol: HTTP -// name: egresshttp -// hosts: -// - "prod-us1/*" -// - hosts: -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// If the workload is deployed without IPTables-based traffic capture, -// the `Sidecar` configuration is the only way to configure the ports -// on the proxy attached to the workload instance. The following -// example declares a `Sidecar` configuration in the `prod-us1` -// namespace for all pods with labels `app: productpage` belonging to -// the `productpage.prod-us1` service. Assuming that these pods are -// deployed without IPtable rules (i.e. the `istio-init` container) -// and the proxy metadata `ISTIO_META_INTERCEPTION_MODE` is set to -// `NONE`, the specification, below, allows such pods to receive HTTP -// traffic on port 9080 (wrapped inside Istio mutual TLS) and forward -// it to the application listening on `127.0.0.1:8080`. It also allows -// the application to communicate with a backing MySQL database on -// `127.0.0.1:3306`, that then gets proxied to the externally hosted -// MySQL service at `mysql.foo.com:3306`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: no-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - port: -// number: 9080 # binds to proxy_instance_ip:9080 (0.0.0.0:9080, if no unicast IP is available for the instance) -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE # not needed if metadata is set for entire proxy -// egress: -// - port: -// number: 3306 -// protocol: MYSQL -// name: egressmysql -// captureMode: NONE # not needed if metadata is set for entire proxy -// bind: 127.0.0.1 -// hosts: -// - "*/mysql.foo.com" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: no-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - port: -// number: 9080 # binds to proxy_instance_ip:9080 (0.0.0.0:9080, if no unicast IP is available for the instance) -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE # not needed if metadata is set for entire proxy -// egress: -// - port: -// number: 3306 -// protocol: MYSQL -// name: egressmysql -// captureMode: NONE # not needed if metadata is set for entire proxy -// bind: 127.0.0.1 -// hosts: -// - "*/mysql.foo.com" -// ``` -// {{}} -// {{}} -// -// And the associated service entry for routing to `mysql.foo.com:3306` -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-mysql -// namespace: ns1 -// spec: -// hosts: -// - mysql.foo.com -// ports: -// - number: 3306 -// name: mysql -// protocol: MYSQL -// location: MESH_EXTERNAL -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-mysql -// namespace: ns1 -// spec: -// hosts: -// - mysql.foo.com -// ports: -// - number: 3306 -// name: mysql -// protocol: MYSQL -// location: MESH_EXTERNAL -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// It is also possible to mix and match traffic capture modes in a single -// proxy. For example, consider a setup where internal services are on the -// `192.168.0.0/16` subnet. So, IP tables are setup on the VM to capture all -// outbound traffic on `192.168.0.0/16` subnet. Assume that the VM has an -// additional network interface on `172.16.0.0/16` subnet for inbound -// traffic. The following `Sidecar` configuration allows the VM to expose a -// listener on `172.16.1.32:80` (the VM's IP) for traffic arriving from the -// `172.16.0.0/16` subnet. -// -// **NOTE**: The `ISTIO_META_INTERCEPTION_MODE` metadata on the -// proxy in the VM should contain `REDIRECT` or `TPROXY` as its value, -// implying that IP tables based traffic capture is active. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: partial-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - bind: 172.16.1.32 -// port: -// number: 80 # binds to 172.16.1.32:80 -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE -// egress: -// # use the system detected defaults -// # sets up configuration to handle outbound traffic to services -// # in 192.168.0.0/16 subnet, based on information provided by the -// # service registry -// - captureMode: IPTABLES -// hosts: -// - "*/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: partial-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - bind: 172.16.1.32 -// port: -// number: 80 # binds to 172.16.1.32:80 -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE -// egress: -// # use the system detected defaults -// # sets up configuration to handle outbound traffic to services -// # in 192.168.0.0/16 subnet, based on information provided by the -// # service registry -// - captureMode: IPTABLES -// hosts: -// - "*/*" -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// `CaptureMode` describes how traffic to a listener is expected to be -// captured. Applicable only when the listener is bound to an IP. -type CaptureMode int32 - -const ( - // The default capture mode defined by the environment. - CaptureMode_DEFAULT CaptureMode = 0 - // Capture traffic using IPtables redirection. - CaptureMode_IPTABLES CaptureMode = 1 - // No traffic capture. When used in an egress listener, the application is - // expected to explicitly communicate with the listener port or Unix - // domain socket. When used in an ingress listener, care needs to be taken - // to ensure that the listener port is not in use by other processes on - // the host. - CaptureMode_NONE CaptureMode = 2 -) - -// Enum value maps for CaptureMode. -var ( - CaptureMode_name = map[int32]string{ - 0: "DEFAULT", - 1: "IPTABLES", - 2: "NONE", - } - CaptureMode_value = map[string]int32{ - "DEFAULT": 0, - "IPTABLES": 1, - "NONE": 2, - } -) - -func (x CaptureMode) Enum() *CaptureMode { - p := new(CaptureMode) - *p = x - return p -} - -func (x CaptureMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CaptureMode) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_sidecar_proto_enumTypes[0].Descriptor() -} - -func (CaptureMode) Type() protoreflect.EnumType { - return &file_networking_v1beta1_sidecar_proto_enumTypes[0] -} - -func (x CaptureMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use CaptureMode.Descriptor instead. -func (CaptureMode) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{0} -} - -type OutboundTrafficPolicy_Mode int32 - -const ( - // Outbound traffic will be restricted to services defined in the - // service registry as well as those defined through `ServiceEntry` configurations. - OutboundTrafficPolicy_REGISTRY_ONLY OutboundTrafficPolicy_Mode = 0 - // Outbound traffic to unknown destinations will be allowed, in case - // there are no services or `ServiceEntry` configurations for the destination port. - OutboundTrafficPolicy_ALLOW_ANY OutboundTrafficPolicy_Mode = 1 -) - -// Enum value maps for OutboundTrafficPolicy_Mode. -var ( - OutboundTrafficPolicy_Mode_name = map[int32]string{ - 0: "REGISTRY_ONLY", - 1: "ALLOW_ANY", - } - OutboundTrafficPolicy_Mode_value = map[string]int32{ - "REGISTRY_ONLY": 0, - "ALLOW_ANY": 1, - } -) - -func (x OutboundTrafficPolicy_Mode) Enum() *OutboundTrafficPolicy_Mode { - p := new(OutboundTrafficPolicy_Mode) - *p = x - return p -} - -func (x OutboundTrafficPolicy_Mode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (OutboundTrafficPolicy_Mode) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_sidecar_proto_enumTypes[1].Descriptor() -} - -func (OutboundTrafficPolicy_Mode) Type() protoreflect.EnumType { - return &file_networking_v1beta1_sidecar_proto_enumTypes[1] -} - -func (x OutboundTrafficPolicy_Mode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use OutboundTrafficPolicy_Mode.Descriptor instead. -func (OutboundTrafficPolicy_Mode) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{4, 0} -} - -// `Sidecar` describes the configuration of the sidecar proxy that mediates -// inbound and outbound communication of the workload instance to which it is -// attached. -// -// -// -// -// -type Sidecar struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Criteria used to select the specific set of pods/VMs on which this - // `Sidecar` configuration should be applied. If omitted, the `Sidecar` - // configuration will be applied to all workload instances in the same namespace. - WorkloadSelector *WorkloadSelector `protobuf:"bytes,1,opt,name=workload_selector,json=workloadSelector,proto3" json:"workload_selector,omitempty"` - // Ingress specifies the configuration of the sidecar for processing - // inbound traffic to the attached workload instance. If omitted, Istio will - // automatically configure the sidecar based on the information about the workload - // obtained from the orchestration platform (e.g., exposed ports, services, - // etc.). If specified, inbound ports are configured if and only if the - // workload instance is associated with a service. - Ingress []*IstioIngressListener `protobuf:"bytes,2,rep,name=ingress,proto3" json:"ingress,omitempty"` - // Egress specifies the configuration of the sidecar for processing - // outbound traffic from the attached workload instance to other - // services in the mesh. If not specified, inherits the system - // detected defaults from the namespace-wide or the global default Sidecar. - Egress []*IstioEgressListener `protobuf:"bytes,3,rep,name=egress,proto3" json:"egress,omitempty"` - // Configuration for the outbound traffic policy. If your - // application uses one or more external services that are not known - // apriori, setting the policy to `ALLOW_ANY` will cause the - // sidecars to route any unknown traffic originating from the - // application to its requested destination. If not specified, - // inherits the system detected defaults from the namespace-wide or - // the global default Sidecar. - OutboundTrafficPolicy *OutboundTrafficPolicy `protobuf:"bytes,4,opt,name=outbound_traffic_policy,json=outboundTrafficPolicy,proto3" json:"outbound_traffic_policy,omitempty"` -} - -func (x *Sidecar) Reset() { - *x = Sidecar{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Sidecar) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Sidecar) ProtoMessage() {} - -func (x *Sidecar) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Sidecar.ProtoReflect.Descriptor instead. -func (*Sidecar) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{0} -} - -func (x *Sidecar) GetWorkloadSelector() *WorkloadSelector { - if x != nil { - return x.WorkloadSelector - } - return nil -} - -func (x *Sidecar) GetIngress() []*IstioIngressListener { - if x != nil { - return x.Ingress - } - return nil -} - -func (x *Sidecar) GetEgress() []*IstioEgressListener { - if x != nil { - return x.Egress - } - return nil -} - -func (x *Sidecar) GetOutboundTrafficPolicy() *OutboundTrafficPolicy { - if x != nil { - return x.OutboundTrafficPolicy - } - return nil -} - -// `IstioIngressListener` specifies the properties of an inbound -// traffic listener on the sidecar proxy attached to a workload instance. -type IstioIngressListener struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The port associated with the listener. - Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in - // the bind field for ingress listeners. If omitted, Istio will - // automatically configure the defaults based on imported services - // and the workload instances to which this configuration is applied - // to. - Bind string `protobuf:"bytes,2,opt,name=bind,proto3" json:"bind,omitempty"` - // The captureMode option dictates how traffic to the listener is - // expected to be captured (or not). - CaptureMode CaptureMode `protobuf:"varint,3,opt,name=capture_mode,json=captureMode,proto3,enum=istio.networking.v1beta1.CaptureMode" json:"capture_mode,omitempty"` - // The IP endpoint or Unix domain socket to which - // traffic should be forwarded to. This configuration can be used to - // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` - // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` - DefaultEndpoint string `protobuf:"bytes,4,opt,name=default_endpoint,json=defaultEndpoint,proto3" json:"default_endpoint,omitempty"` - // Set of TLS related options that will enable TLS termination on the - // sidecar for requests originating from outside the mesh. - // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs - Tls *ServerTLSSettings `protobuf:"bytes,7,opt,name=tls,proto3" json:"tls,omitempty"` -} - -func (x *IstioIngressListener) Reset() { - *x = IstioIngressListener{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IstioIngressListener) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IstioIngressListener) ProtoMessage() {} - -func (x *IstioIngressListener) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IstioIngressListener.ProtoReflect.Descriptor instead. -func (*IstioIngressListener) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{1} -} - -func (x *IstioIngressListener) GetPort() *Port { - if x != nil { - return x.Port - } - return nil -} - -func (x *IstioIngressListener) GetBind() string { - if x != nil { - return x.Bind - } - return "" -} - -func (x *IstioIngressListener) GetCaptureMode() CaptureMode { - if x != nil { - return x.CaptureMode - } - return CaptureMode_DEFAULT -} - -func (x *IstioIngressListener) GetDefaultEndpoint() string { - if x != nil { - return x.DefaultEndpoint - } - return "" -} - -func (x *IstioIngressListener) GetTls() *ServerTLSSettings { - if x != nil { - return x.Tls - } - return nil -} - -// `IstioEgressListener` specifies the properties of an outbound traffic -// listener on the sidecar proxy attached to a workload instance. -type IstioEgressListener struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The port associated with the listener. If using Unix domain socket, - // use 0 as the port number, with a valid protocol. The port if - // specified, will be used as the default destination port associated - // with the imported hosts. If the port is omitted, Istio will infer the - // listener ports based on the imported hosts. Note that when multiple - // egress listeners are specified, where one or more listeners have - // specific ports while others have no port, the hosts exposed on a - // listener port will be based on the listener with the most specific - // port. - Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or - // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If - // omitted, Istio will automatically configure the defaults based on imported - // services, the workload instances to which this configuration is applied to and - // the captureMode. If captureMode is `NONE`, bind will default to - // 127.0.0.1. - Bind string `protobuf:"bytes,2,opt,name=bind,proto3" json:"bind,omitempty"` - // When the bind address is an IP, the captureMode option dictates - // how traffic to the listener is expected to be captured (or not). - // captureMode must be DEFAULT or `NONE` for Unix domain socket binds. - CaptureMode CaptureMode `protobuf:"varint,3,opt,name=capture_mode,json=captureMode,proto3,enum=istio.networking.v1beta1.CaptureMode" json:"capture_mode,omitempty"` - // One or more service hosts exposed by the listener - // in `namespace/dnsName` format. Services in the specified namespace - // matching `dnsName` will be exposed. - // The corresponding service can be a service in the service registry - // (e.g., a Kubernetes or cloud foundry service) or a service specified - // using a `ServiceEntry` or `VirtualService` configuration. Any - // associated `DestinationRule` in the same namespace will also be used. - // - // The `dnsName` should be specified using FQDN format, optionally including - // a wildcard character in the left-most component (e.g., `prod/*.example.com`). - // Set the `dnsName` to `*` to select all services from the specified namespace - // (e.g., `prod/*`). - // - // The `namespace` can be set to `*`, `.`, or `~`, representing any, the current, - // or no namespace, respectively. For example, `*/foo.example.com` selects the - // service from any available namespace while `./foo.example.com` only selects - // the service from the namespace of the sidecar. If a host is set to `*/*`, - // Istio will configure the sidecar to be able to reach every service in the - // mesh that is exported to the sidecar's namespace. The value `~/*` can be used - // to completely trim the configuration for sidecars that simply receive traffic - // and respond, but make no outbound connections of their own. - // - // NOTE: Only services and configuration artifacts exported to the sidecar's - // namespace (e.g., `exportTo` value of `*`) can be referenced. - // Private configurations (e.g., `exportTo` set to `.`) will - // not be available. Refer to the `exportTo` setting in `VirtualService`, - // `DestinationRule`, and `ServiceEntry` configurations for details. - Hosts []string `protobuf:"bytes,4,rep,name=hosts,proto3" json:"hosts,omitempty"` -} - -func (x *IstioEgressListener) Reset() { - *x = IstioEgressListener{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *IstioEgressListener) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*IstioEgressListener) ProtoMessage() {} - -func (x *IstioEgressListener) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use IstioEgressListener.ProtoReflect.Descriptor instead. -func (*IstioEgressListener) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{2} -} - -func (x *IstioEgressListener) GetPort() *Port { - if x != nil { - return x.Port - } - return nil -} - -func (x *IstioEgressListener) GetBind() string { - if x != nil { - return x.Bind - } - return "" -} - -func (x *IstioEgressListener) GetCaptureMode() CaptureMode { - if x != nil { - return x.CaptureMode - } - return CaptureMode_DEFAULT -} - -func (x *IstioEgressListener) GetHosts() []string { - if x != nil { - return x.Hosts - } - return nil -} - -// `WorkloadSelector` specifies the criteria used to determine if the -// `Gateway`, `Sidecar`, `EnvoyFilter`, or `ServiceEntry` -// configuration can be applied to a proxy. The matching criteria -// includes the metadata associated with a proxy, workload instance -// info such as labels attached to the pod/VM, or any other info that -// the proxy provides to Istio during the initial handshake. If -// multiple conditions are specified, all conditions need to match in -// order for the workload instance to be selected. Currently, only -// label based selection mechanism is supported. -type WorkloadSelector struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // One or more labels that indicate a specific set of pods/VMs - // on which the configuration should be applied. The scope of - // label search is restricted to the configuration namespace in which the - // the resource is present. - Labels map[string]string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *WorkloadSelector) Reset() { - *x = WorkloadSelector{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadSelector) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadSelector) ProtoMessage() {} - -func (x *WorkloadSelector) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadSelector.ProtoReflect.Descriptor instead. -func (*WorkloadSelector) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{3} -} - -func (x *WorkloadSelector) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -// `OutboundTrafficPolicy` sets the default behavior of the sidecar for -// handling outbound traffic from the application. -// If your application uses one or more external -// services that are not known apriori, setting the policy to `ALLOW_ANY` -// will cause the sidecars to route any unknown traffic originating from -// the application to its requested destination. Users are strongly -// encouraged to use `ServiceEntry` configurations to explicitly declare any external -// dependencies, instead of using `ALLOW_ANY`, so that traffic to these -// services can be monitored. -type OutboundTrafficPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mode OutboundTrafficPolicy_Mode `protobuf:"varint,1,opt,name=mode,proto3,enum=istio.networking.v1beta1.OutboundTrafficPolicy_Mode" json:"mode,omitempty"` - // Specifies the details of the egress proxy to which unknown - // traffic should be forwarded to from the sidecar. Valid only if - // the mode is set to ALLOW_ANY. If not specified when the mode is - // ALLOW_ANY, the sidecar will send the unknown traffic directly to - // the IP requested by the application. - // - // ** NOTE 1**: The specified egress host must be imported in the - // egress section for the traffic forwarding to work. - // - // ** NOTE 2**: An Envoy based egress gateway is unlikely to be able - // to handle plain text TCP connections forwarded from the sidecar. - // Envoy's dynamic forward proxy can handle only HTTP and TLS - // connections. - // $hide_from_docs - EgressProxy *Destination `protobuf:"bytes,2,opt,name=egress_proxy,json=egressProxy,proto3" json:"egress_proxy,omitempty"` -} - -func (x *OutboundTrafficPolicy) Reset() { - *x = OutboundTrafficPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *OutboundTrafficPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*OutboundTrafficPolicy) ProtoMessage() {} - -func (x *OutboundTrafficPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_sidecar_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use OutboundTrafficPolicy.ProtoReflect.Descriptor instead. -func (*OutboundTrafficPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_sidecar_proto_rawDescGZIP(), []int{4} -} - -func (x *OutboundTrafficPolicy) GetMode() OutboundTrafficPolicy_Mode { - if x != nil { - return x.Mode - } - return OutboundTrafficPolicy_REGISTRY_ONLY -} - -func (x *OutboundTrafficPolicy) GetEgressProxy() *Destination { - if x != nil { - return x.EgressProxy - } - return nil -} - -var File_networking_v1beta1_sidecar_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_sidecar_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, 0x69, 0x64, 0x65, 0x63, 0x61, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, - 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0x02, 0x0a, 0x07, 0x53, 0x69, - 0x64, 0x65, 0x63, 0x61, 0x72, 0x12, 0x57, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x48, - 0x0a, 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x74, 0x69, 0x6f, - 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, - 0x07, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x06, 0x65, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x45, 0x67, 0x72, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x52, 0x06, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x67, 0x0a, 0x17, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x52, 0x15, 0x6f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x66, 0x66, - 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x22, - 0xc0, 0x02, 0x0a, 0x14, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x62, 0x69, 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, - 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x4d, - 0x6f, 0x64, 0x65, 0x52, 0x0b, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, - 0x12, 0x2f, 0x0a, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x3d, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, - 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x52, 0x14, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, - 0x6c, 0x73, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x49, 0x73, 0x74, 0x69, 0x6f, 0x45, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x62, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x62, 0x69, - 0x6e, 0x64, 0x12, 0x48, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x43, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x52, - 0x0b, 0x63, 0x61, 0x70, 0x74, 0x75, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x05, - 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x06, 0x10, 0x07, 0x52, 0x14, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x68, 0x6f, 0x73, 0x74, 0x5f, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x6c, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x10, 0x57, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, - 0x54, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x36, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0xd5, 0x01, 0x0a, 0x15, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x72, 0x61, - 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x48, 0x0a, 0x04, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x72, 0x61, 0x66, - 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, - 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0b, 0x65, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x22, 0x28, - 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, - 0x52, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, - 0x4f, 0x57, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x01, 0x2a, 0x32, 0x0a, 0x0b, 0x43, 0x61, 0x70, 0x74, - 0x75, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, - 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x50, 0x54, 0x41, 0x42, 0x4c, 0x45, 0x53, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x42, 0x21, 0x5a, 0x1f, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_sidecar_proto_rawDescOnce sync.Once - file_networking_v1beta1_sidecar_proto_rawDescData = file_networking_v1beta1_sidecar_proto_rawDesc -) - -func file_networking_v1beta1_sidecar_proto_rawDescGZIP() []byte { - file_networking_v1beta1_sidecar_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_sidecar_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_sidecar_proto_rawDescData) - }) - return file_networking_v1beta1_sidecar_proto_rawDescData -} - -var file_networking_v1beta1_sidecar_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_networking_v1beta1_sidecar_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_networking_v1beta1_sidecar_proto_goTypes = []interface{}{ - (CaptureMode)(0), // 0: istio.networking.v1beta1.CaptureMode - (OutboundTrafficPolicy_Mode)(0), // 1: istio.networking.v1beta1.OutboundTrafficPolicy.Mode - (*Sidecar)(nil), // 2: istio.networking.v1beta1.Sidecar - (*IstioIngressListener)(nil), // 3: istio.networking.v1beta1.IstioIngressListener - (*IstioEgressListener)(nil), // 4: istio.networking.v1beta1.IstioEgressListener - (*WorkloadSelector)(nil), // 5: istio.networking.v1beta1.WorkloadSelector - (*OutboundTrafficPolicy)(nil), // 6: istio.networking.v1beta1.OutboundTrafficPolicy - nil, // 7: istio.networking.v1beta1.WorkloadSelector.LabelsEntry - (*Port)(nil), // 8: istio.networking.v1beta1.Port - (*ServerTLSSettings)(nil), // 9: istio.networking.v1beta1.ServerTLSSettings - (*Destination)(nil), // 10: istio.networking.v1beta1.Destination -} -var file_networking_v1beta1_sidecar_proto_depIdxs = []int32{ - 5, // 0: istio.networking.v1beta1.Sidecar.workload_selector:type_name -> istio.networking.v1beta1.WorkloadSelector - 3, // 1: istio.networking.v1beta1.Sidecar.ingress:type_name -> istio.networking.v1beta1.IstioIngressListener - 4, // 2: istio.networking.v1beta1.Sidecar.egress:type_name -> istio.networking.v1beta1.IstioEgressListener - 6, // 3: istio.networking.v1beta1.Sidecar.outbound_traffic_policy:type_name -> istio.networking.v1beta1.OutboundTrafficPolicy - 8, // 4: istio.networking.v1beta1.IstioIngressListener.port:type_name -> istio.networking.v1beta1.Port - 0, // 5: istio.networking.v1beta1.IstioIngressListener.capture_mode:type_name -> istio.networking.v1beta1.CaptureMode - 9, // 6: istio.networking.v1beta1.IstioIngressListener.tls:type_name -> istio.networking.v1beta1.ServerTLSSettings - 8, // 7: istio.networking.v1beta1.IstioEgressListener.port:type_name -> istio.networking.v1beta1.Port - 0, // 8: istio.networking.v1beta1.IstioEgressListener.capture_mode:type_name -> istio.networking.v1beta1.CaptureMode - 7, // 9: istio.networking.v1beta1.WorkloadSelector.labels:type_name -> istio.networking.v1beta1.WorkloadSelector.LabelsEntry - 1, // 10: istio.networking.v1beta1.OutboundTrafficPolicy.mode:type_name -> istio.networking.v1beta1.OutboundTrafficPolicy.Mode - 10, // 11: istio.networking.v1beta1.OutboundTrafficPolicy.egress_proxy:type_name -> istio.networking.v1beta1.Destination - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_sidecar_proto_init() } -func file_networking_v1beta1_sidecar_proto_init() { - if File_networking_v1beta1_sidecar_proto != nil { - return - } - file_networking_v1beta1_gateway_proto_init() - file_networking_v1beta1_virtual_service_proto_init() - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_sidecar_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Sidecar); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_sidecar_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IstioIngressListener); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_sidecar_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IstioEgressListener); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_sidecar_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadSelector); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_sidecar_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OutboundTrafficPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_sidecar_proto_rawDesc, - NumEnums: 2, - NumMessages: 6, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_sidecar_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_sidecar_proto_depIdxs, - EnumInfos: file_networking_v1beta1_sidecar_proto_enumTypes, - MessageInfos: file_networking_v1beta1_sidecar_proto_msgTypes, - }.Build() - File_networking_v1beta1_sidecar_proto = out.File - file_networking_v1beta1_sidecar_proto_rawDesc = nil - file_networking_v1beta1_sidecar_proto_goTypes = nil - file_networking_v1beta1_sidecar_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/virtual_service.pb.go b/gen/proto/networking/v1beta1/virtual_service.pb.go deleted file mode 100644 index 84dbe2b..0000000 --- a/gen/proto/networking/v1beta1/virtual_service.pb.go +++ /dev/null @@ -1,4321 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/virtual_service.proto - -// $schema: istio.networking.v1beta1.VirtualService -// $title: Virtual Service -// $description: Configuration affecting label/content routing, sni routing, etc. -// $location: https://istio.io/docs/reference/config/networking/virtual-service.html -// $aliases: [/docs/reference/config/networking/v1beta1/virtual-service] -// $mode: none - -// Configuration affecting traffic routing. Here are a few terms useful to define -// in the context of traffic routing. -// -// `Service` a unit of application behavior bound to a unique name in a -// service registry. Services consist of multiple network *endpoints* -// implemented by workload instances running on pods, containers, VMs etc. -// -// `Service versions (a.k.a. subsets)` - In a continuous deployment -// scenario, for a given service, there can be distinct subsets of -// instances running different variants of the application binary. These -// variants are not necessarily different API versions. They could be -// iterative changes to the same service, deployed in different -// environments (prod, staging, dev, etc.). Common scenarios where this -// occurs include A/B testing, canary rollouts, etc. The choice of a -// particular version can be decided based on various criterion (headers, -// url, etc.) and/or by weights assigned to each version. Each service has -// a default version consisting of all its instances. -// -// `Source` - A downstream client calling a service. -// -// `Host` - The address used by a client when attempting to connect to a -// service. -// -// `Access model` - Applications address only the destination service -// (Host) without knowledge of individual service versions (subsets). The -// actual choice of the version is determined by the proxy/sidecar, enabling the -// application code to decouple itself from the evolution of dependent -// services. -// -// A `VirtualService` defines a set of traffic routing rules to apply when a host is -// addressed. Each routing rule defines matching criteria for traffic of a specific -// protocol. If the traffic is matched, then it is sent to a named destination service -// (or subset/version of it) defined in the registry. -// -// The source of traffic can also be matched in a routing rule. This allows routing -// to be customized for specific client contexts. -// -// The following example on Kubernetes, routes all HTTP traffic by default to -// pods of the reviews service with label "version: v1". In addition, -// HTTP requests with path starting with /wpcatalog/ or /consumercatalog/ will -// be rewritten to /newcatalog and sent to pods with label "version: v2". -// -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - name: "reviews-v2-routes" -// match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// - name: "reviews-v1-route" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - name: "reviews-v2-routes" -// match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// - name: "reviews-v1-route" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -// A subset/version of a route destination is identified with a reference -// to a named service subset which must be declared in a corresponding -// `DestinationRule`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type HTTPRedirect_RedirectPortSelection int32 - -const ( - HTTPRedirect_FROM_PROTOCOL_DEFAULT HTTPRedirect_RedirectPortSelection = 0 - HTTPRedirect_FROM_REQUEST_PORT HTTPRedirect_RedirectPortSelection = 1 -) - -// Enum value maps for HTTPRedirect_RedirectPortSelection. -var ( - HTTPRedirect_RedirectPortSelection_name = map[int32]string{ - 0: "FROM_PROTOCOL_DEFAULT", - 1: "FROM_REQUEST_PORT", - } - HTTPRedirect_RedirectPortSelection_value = map[string]int32{ - "FROM_PROTOCOL_DEFAULT": 0, - "FROM_REQUEST_PORT": 1, - } -) - -func (x HTTPRedirect_RedirectPortSelection) Enum() *HTTPRedirect_RedirectPortSelection { - p := new(HTTPRedirect_RedirectPortSelection) - *p = x - return p -} - -func (x HTTPRedirect_RedirectPortSelection) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (HTTPRedirect_RedirectPortSelection) Descriptor() protoreflect.EnumDescriptor { - return file_networking_v1beta1_virtual_service_proto_enumTypes[0].Descriptor() -} - -func (HTTPRedirect_RedirectPortSelection) Type() protoreflect.EnumType { - return &file_networking_v1beta1_virtual_service_proto_enumTypes[0] -} - -func (x HTTPRedirect_RedirectPortSelection) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use HTTPRedirect_RedirectPortSelection.Descriptor instead. -func (HTTPRedirect_RedirectPortSelection) EnumDescriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{12, 0} -} - -// Configuration affecting traffic routing. -// -// -// -// -// -type VirtualService struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The destination hosts to which traffic is being sent. Could - // be a DNS name with wildcard prefix or an IP address. Depending on the - // platform, short-names can also be used instead of a FQDN (i.e. has no - // dots in the name). In such a scenario, the FQDN of the host would be - // derived based on the underlying platform. - // - // A single VirtualService can be used to describe all the traffic - // properties of the corresponding hosts, including those for multiple - // HTTP and TCP ports. Alternatively, the traffic properties of a host - // can be defined using more than one VirtualService, with certain - // caveats. Refer to the - // [Operations Guide](https://istio.io/docs/ops/best-practices/traffic-management/#split-virtual-services) - // for details. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews" will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. _To avoid - // potential misconfigurations, it is recommended to always use fully - // qualified domain names over short names._ - // - // The hosts field applies to both HTTP and TCP services. Service inside - // the mesh, i.e., those found in the service registry, must always be - // referred to using their alphanumeric names. IP addresses are allowed - // only for services defined via the Gateway. - // - // *Note*: It must be empty for a delegate VirtualService. - Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"` - // The names of gateways and sidecars that should apply these routes. - // Gateways in other namespaces may be referred to by - // `/`; specifying a gateway with no - // namespace qualifier is the same as specifying the VirtualService's - // namespace. A single VirtualService is used for sidecars inside the mesh as - // well as for one or more gateways. The selection condition imposed by this - // field can be overridden using the source field in the match conditions - // of protocol-specific routes. The reserved word `mesh` is used to imply - // all the sidecars in the mesh. When this field is omitted, the default - // gateway (`mesh`) will be used, which would apply the rule to all - // sidecars in the mesh. If a list of gateway names is provided, the - // rules will apply only to the gateways. To apply the rules to both - // gateways and sidecars, specify `mesh` as one of the gateway names. - Gateways []string `protobuf:"bytes,2,rep,name=gateways,proto3" json:"gateways,omitempty"` - // An ordered list of route rules for HTTP traffic. HTTP routes will be - // applied to platform service ports named 'http-*'/'http2-*'/'grpc-*', gateway - // ports with protocol HTTP/HTTP2/GRPC/ TLS-terminated-HTTPS and service - // entry ports using HTTP/HTTP2/GRPC protocols. The first rule matching - // an incoming request is used. - Http []*HTTPRoute `protobuf:"bytes,3,rep,name=http,proto3" json:"http,omitempty"` - // An ordered list of route rule for non-terminated TLS & HTTPS - // traffic. Routing is typically performed using the SNI value presented - // by the ClientHello message. TLS routes will be applied to platform - // service ports named 'https-*', 'tls-*', unterminated gateway ports using - // HTTPS/TLS protocols (i.e. with "passthrough" TLS mode) and service - // entry ports using HTTPS/TLS protocols. The first rule matching an - // incoming request is used. NOTE: Traffic 'https-*' or 'tls-*' ports - // without associated virtual service will be treated as opaque TCP - // traffic. - Tls []*TLSRoute `protobuf:"bytes,5,rep,name=tls,proto3" json:"tls,omitempty"` - // An ordered list of route rules for opaque TCP traffic. TCP routes will - // be applied to any port that is not a HTTP or TLS port. The first rule - // matching an incoming request is used. - Tcp []*TCPRoute `protobuf:"bytes,4,rep,name=tcp,proto3" json:"tcp,omitempty"` - // A list of namespaces to which this virtual service is exported. Exporting a - // virtual service allows it to be used by sidecars and gateways defined in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of virtual services - // across namespace boundaries. - // - // If no namespaces are specified then the virtual service is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the virtual service is declared in. Similarly the value "*" is reserved and - // defines an export to all namespaces. - ExportTo []string `protobuf:"bytes,6,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"` -} - -func (x *VirtualService) Reset() { - *x = VirtualService{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *VirtualService) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*VirtualService) ProtoMessage() {} - -func (x *VirtualService) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use VirtualService.ProtoReflect.Descriptor instead. -func (*VirtualService) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{0} -} - -func (x *VirtualService) GetHosts() []string { - if x != nil { - return x.Hosts - } - return nil -} - -func (x *VirtualService) GetGateways() []string { - if x != nil { - return x.Gateways - } - return nil -} - -func (x *VirtualService) GetHttp() []*HTTPRoute { - if x != nil { - return x.Http - } - return nil -} - -func (x *VirtualService) GetTls() []*TLSRoute { - if x != nil { - return x.Tls - } - return nil -} - -func (x *VirtualService) GetTcp() []*TCPRoute { - if x != nil { - return x.Tcp - } - return nil -} - -func (x *VirtualService) GetExportTo() []string { - if x != nil { - return x.ExportTo - } - return nil -} - -// Destination indicates the network addressable service to which the -// request/connection will be sent after processing a routing rule. The -// destination.host should unambiguously refer to a service in the service -// registry. Istio's service registry is composed of all the services found -// in the platform's service registry (e.g., Kubernetes services, Consul -// services), as well as services declared through the -// [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry) resource. -// -// *Note for Kubernetes users*: When short names are used (e.g. "reviews" -// instead of "reviews.default.svc.cluster.local"), Istio will interpret -// the short name based on the namespace of the rule, not the service. A -// rule in the "default" namespace containing a host "reviews will be -// interpreted as "reviews.default.svc.cluster.local", irrespective of the -// actual namespace associated with the reviews service. _To avoid potential -// misconfigurations, it is recommended to always use fully qualified -// domain names over short names._ -// -// The following Kubernetes example routes all traffic by default to pods -// of the reviews service with label "version: v1" (i.e., subset v1), and -// some to subset v2, in a Kubernetes environment. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// namespace: foo -// spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// namespace: foo -// spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -// And the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// namespace: foo -// spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// namespace: foo -// spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// -// The following VirtualService sets a timeout of 5s for all calls to -// productpage.prod.svc.cluster.local service in Kubernetes. Notice that -// there are no subsets defined in this rule. Istio will fetch all -// instances of productpage.prod.svc.cluster.local service from the service -// registry and populate the sidecar's load balancing pool. Also, notice -// that this rule is set in the istio-system namespace but uses the fully -// qualified domain name of the productpage service, -// productpage.prod.svc.cluster.local. Therefore the rule's namespace does -// not have an impact in resolving the name of the productpage service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: my-productpage-rule -// namespace: istio-system -// spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: my-productpage-rule -// namespace: istio-system -// spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// To control routing for traffic bound to services outside the mesh, external -// services must first be added to Istio's internal service registry using the -// ServiceEntry resource. VirtualServices can then be defined to control traffic -// bound to these external services. For example, the following rules define a -// Service for wikipedia.org and set a timeout of 5s for HTTP requests. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-wikipedia -// spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS -// --- -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: my-wiki-rule -// spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-wikipedia -// spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS -// --- -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: my-wiki-rule -// spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org -// ``` -// {{}} -// {{}} -// -type Destination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of a service from the service registry. Service - // names are looked up from the platform's service registry (e.g., - // Kubernetes services, Consul services, etc.) and from the hosts - // declared by [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry). Traffic forwarded to - // destinations that are not found in either of the two, will be dropped. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. To avoid - // potential misconfiguration, it is recommended to always use fully - // qualified domain names over short names. - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // The name of a subset within the service. Applicable only to services - // within the mesh. The subset must be defined in a corresponding - // DestinationRule. - Subset string `protobuf:"bytes,2,opt,name=subset,proto3" json:"subset,omitempty"` - // Specifies the port on the host that is being addressed. If a service - // exposes only a single port it is not required to explicitly select the - // port. - Port *PortSelector `protobuf:"bytes,3,opt,name=port,proto3" json:"port,omitempty"` -} - -func (x *Destination) Reset() { - *x = Destination{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Destination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Destination) ProtoMessage() {} - -func (x *Destination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Destination.ProtoReflect.Descriptor instead. -func (*Destination) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{1} -} - -func (x *Destination) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *Destination) GetSubset() string { - if x != nil { - return x.Subset - } - return "" -} - -func (x *Destination) GetPort() *PortSelector { - if x != nil { - return x.Port - } - return nil -} - -// Describes match conditions and actions for routing HTTP/1.1, HTTP2, and -// gRPC traffic. See VirtualService for usage examples. -type HTTPRoute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name assigned to the route for debugging purposes. The - // route's name will be concatenated with the match's name and will - // be logged in the access logs for requests matching this - // route/match. - Name string `protobuf:"bytes,17,opt,name=name,proto3" json:"name,omitempty"` - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - Match []*HTTPMatchRequest `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see - // glossary in beginning of document). Weights associated with the - // service version determine the proportion of traffic it receives. - Route []*HTTPRouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, - // route/redirect will be ignored. The redirect primitive can be used to - // send a HTTP 301 redirect to a different URI or Authority. - Redirect *HTTPRedirect `protobuf:"bytes,3,opt,name=redirect,proto3" json:"redirect,omitempty"` - // Delegate is used to specify the particular VirtualService which - // can be used to define delegate HTTPRoute. - // - // It can be set only when `Route` and `Redirect` are empty, and the route - // rules of the delegate VirtualService will be merged with that in the - // current one. - // - // **NOTE**: - // - // 1. Only one level delegation is supported. - // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, - // otherwise there is a conflict and the HTTPRoute will not take effect. - Delegate *Delegate `protobuf:"bytes,20,opt,name=delegate,proto3" json:"delegate,omitempty"` - // Rewrite HTTP URIs and Authority headers. Rewrite cannot be used with - // Redirect primitive. Rewrite will be performed before forwarding. - Rewrite *HTTPRewrite `protobuf:"bytes,4,opt,name=rewrite,proto3" json:"rewrite,omitempty"` - // Timeout for HTTP requests, default is disabled. - Timeout *durationpb.Duration `protobuf:"bytes,6,opt,name=timeout,proto3" json:"timeout,omitempty"` - // Retry policy for HTTP requests. - Retries *HTTPRetry `protobuf:"bytes,7,opt,name=retries,proto3" json:"retries,omitempty"` - // Fault injection policy to apply on HTTP traffic at the client side. - // Note that timeouts or retries will not be enabled when faults are - // enabled on the client side. - Fault *HTTPFaultInjection `protobuf:"bytes,8,opt,name=fault,proto3" json:"fault,omitempty"` - // Mirror HTTP traffic to a another destination in addition to forwarding - // the requests to the intended destination. Mirrored traffic is on a - // best effort basis where the sidecar/gateway will not wait for the - // mirrored cluster to respond before returning the response from the - // original destination. Statistics will be generated for the mirrored - // destination. - Mirror *Destination `protobuf:"bytes,9,opt,name=mirror,proto3" json:"mirror,omitempty"` - // Percentage of the traffic to be mirrored by the `mirror` field. - // Use of integer `mirror_percent` value is deprecated. Use the - // double `mirror_percentage` field instead - // $hide_from_docs - // - // Deprecated: Do not use. - MirrorPercent *wrapperspb.UInt32Value `protobuf:"bytes,18,opt,name=mirror_percent,json=mirrorPercent,proto3" json:"mirror_percent,omitempty"` - // Percentage of the traffic to be mirrored by the `mirror` field. - // If this field is absent, all the traffic (100%) will be mirrored. - // Max value is 100. - MirrorPercentage *Percent `protobuf:"bytes,19,opt,name=mirror_percentage,json=mirrorPercentage,proto3" json:"mirror_percentage,omitempty"` - // Cross-Origin Resource Sharing policy (CORS). Refer to - // [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) - // for further details about cross origin resource sharing. - CorsPolicy *CorsPolicy `protobuf:"bytes,10,opt,name=cors_policy,json=corsPolicy,proto3" json:"cors_policy,omitempty"` - // Header manipulation rules - Headers *Headers `protobuf:"bytes,16,opt,name=headers,proto3" json:"headers,omitempty"` -} - -func (x *HTTPRoute) Reset() { - *x = HTTPRoute{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPRoute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPRoute) ProtoMessage() {} - -func (x *HTTPRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPRoute.ProtoReflect.Descriptor instead. -func (*HTTPRoute) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{2} -} - -func (x *HTTPRoute) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *HTTPRoute) GetMatch() []*HTTPMatchRequest { - if x != nil { - return x.Match - } - return nil -} - -func (x *HTTPRoute) GetRoute() []*HTTPRouteDestination { - if x != nil { - return x.Route - } - return nil -} - -func (x *HTTPRoute) GetRedirect() *HTTPRedirect { - if x != nil { - return x.Redirect - } - return nil -} - -func (x *HTTPRoute) GetDelegate() *Delegate { - if x != nil { - return x.Delegate - } - return nil -} - -func (x *HTTPRoute) GetRewrite() *HTTPRewrite { - if x != nil { - return x.Rewrite - } - return nil -} - -func (x *HTTPRoute) GetTimeout() *durationpb.Duration { - if x != nil { - return x.Timeout - } - return nil -} - -func (x *HTTPRoute) GetRetries() *HTTPRetry { - if x != nil { - return x.Retries - } - return nil -} - -func (x *HTTPRoute) GetFault() *HTTPFaultInjection { - if x != nil { - return x.Fault - } - return nil -} - -func (x *HTTPRoute) GetMirror() *Destination { - if x != nil { - return x.Mirror - } - return nil -} - -// Deprecated: Do not use. -func (x *HTTPRoute) GetMirrorPercent() *wrapperspb.UInt32Value { - if x != nil { - return x.MirrorPercent - } - return nil -} - -func (x *HTTPRoute) GetMirrorPercentage() *Percent { - if x != nil { - return x.MirrorPercentage - } - return nil -} - -func (x *HTTPRoute) GetCorsPolicy() *CorsPolicy { - if x != nil { - return x.CorsPolicy - } - return nil -} - -func (x *HTTPRoute) GetHeaders() *Headers { - if x != nil { - return x.Headers - } - return nil -} - -// Describes the delegate VirtualService. -// The following routing rules forward the traffic to `/productpage` by a delegate VirtualService named `productpage`, -// forward the traffic to `/reviews` by a delegate VirtualService named `reviews`. -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo -// spec: -// hosts: -// - "bookinfo.com" -// gateways: -// - mygateway -// http: -// - match: -// - uri: -// prefix: "/productpage" -// delegate: -// name: productpage -// namespace: nsA -// - match: -// - uri: -// prefix: "/reviews" -// delegate: -// name: reviews -// namespace: nsB -// ``` -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: productpage -// namespace: nsA -// spec: -// http: -// - match: -// - uri: -// prefix: "/productpage/v1/" -// route: -// - destination: -// host: productpage-v1.nsA.svc.cluster.local -// - route: -// - destination: -// host: productpage.nsA.svc.cluster.local -// ``` -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews -// namespace: nsB -// spec: -// http: -// - route: -// - destination: -// host: reviews.nsB.svc.cluster.local -// ``` -type Delegate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name specifies the name of the delegate VirtualService. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Namespace specifies the namespace where the delegate VirtualService resides. - // By default, it is same to the root's. - Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` -} - -func (x *Delegate) Reset() { - *x = Delegate{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Delegate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Delegate) ProtoMessage() {} - -func (x *Delegate) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Delegate.ProtoReflect.Descriptor instead. -func (*Delegate) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{3} -} - -func (x *Delegate) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Delegate) GetNamespace() string { - if x != nil { - return x.Namespace - } - return "" -} - -// Message headers can be manipulated when Envoy forwards requests to, -// or responses from, a destination service. Header manipulation rules can -// be specified for a specific route destination or for all destinations. -// The following VirtualService adds a `test` header with the value `true` -// to requests that are routed to any `reviews` service destination. -// It also removes the `foo` response header, but only from responses -// coming from the `v1` subset (version) of the `reviews` service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 -// ``` -// {{}} -// {{}} -type Headers struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Header manipulation rules to apply before forwarding a request - // to the destination service - Request *Headers_HeaderOperations `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` - // Header manipulation rules to apply before returning a response - // to the caller - Response *Headers_HeaderOperations `protobuf:"bytes,2,opt,name=response,proto3" json:"response,omitempty"` -} - -func (x *Headers) Reset() { - *x = Headers{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Headers) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Headers) ProtoMessage() {} - -func (x *Headers) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Headers.ProtoReflect.Descriptor instead. -func (*Headers) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{4} -} - -func (x *Headers) GetRequest() *Headers_HeaderOperations { - if x != nil { - return x.Request - } - return nil -} - -func (x *Headers) GetResponse() *Headers_HeaderOperations { - if x != nil { - return x.Response - } - return nil -} - -// Describes match conditions and actions for routing unterminated TLS -// traffic (TLS/HTTPS) The following routing rule forwards unterminated TLS -// traffic arriving at port 443 of gateway called "mygateway" to internal -// services in the mesh based on the SNI value. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-sni -// spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-sni -// spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -type TLSRoute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - Match []*TLSMatchAttributes `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"` - // The destination to which the connection should be forwarded to. - Route []*RouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"` -} - -func (x *TLSRoute) Reset() { - *x = TLSRoute{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TLSRoute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TLSRoute) ProtoMessage() {} - -func (x *TLSRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TLSRoute.ProtoReflect.Descriptor instead. -func (*TLSRoute) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{5} -} - -func (x *TLSRoute) GetMatch() []*TLSMatchAttributes { - if x != nil { - return x.Match - } - return nil -} - -func (x *TLSRoute) GetRoute() []*RouteDestination { - if x != nil { - return x.Route - } - return nil -} - -// Describes match conditions and actions for routing TCP traffic. The -// following routing rule forwards traffic arriving at port 27017 for -// mongo.prod.svc.cluster.local to another Mongo server on port 5555. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// {{}} -type TCPRoute struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - Match []*L4MatchAttributes `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"` - // The destination to which the connection should be forwarded to. - Route []*RouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"` -} - -func (x *TCPRoute) Reset() { - *x = TCPRoute{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TCPRoute) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TCPRoute) ProtoMessage() {} - -func (x *TCPRoute) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TCPRoute.ProtoReflect.Descriptor instead. -func (*TCPRoute) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{6} -} - -func (x *TCPRoute) GetMatch() []*L4MatchAttributes { - if x != nil { - return x.Match - } - return nil -} - -func (x *TCPRoute) GetRoute() []*RouteDestination { - if x != nil { - return x.Route - } - return nil -} - -// HttpMatchRequest specifies a set of criterion to be met in order for the -// rule to be applied to the HTTP request. For example, the following -// restricts the rule to match only requests where the URL path -// starts with /ratings/v2/ and the request contains a custom `end-user` header -// with value `jason`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// HTTPMatchRequest CANNOT be empty. -// **Note:** No regex string match can be set when delegate VirtualService is specified. -type HTTPMatchRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name assigned to a match. The match's name will be - // concatenated with the parent route's name and will be logged in - // the access logs for requests matching this route. - Name string `protobuf:"bytes,11,opt,name=name,proto3" json:"name,omitempty"` - // URI to match - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - // **Note:** Case-insensitive matching could be enabled via the - // `ignore_uri_case` flag. - Uri *StringMatch `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` - // URI Scheme - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - Scheme *StringMatch `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"` - // HTTP Method - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - Method *StringMatch `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` - // HTTP Authority - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - Authority *StringMatch `protobuf:"bytes,4,opt,name=authority,proto3" json:"authority,omitempty"` - // The header keys must be lowercase and use hyphen as the separator, - // e.g. _x-request-id_. - // - // Header values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - // If the value is empty and only the name of header is specfied, presence of the header is checked. - // **Note:** The keys `uri`, `scheme`, `method`, and `authority` will be ignored. - Headers map[string]*StringMatch `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Specifies the ports on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they support, - // in these cases it is not required to explicitly select the port. - Port uint32 `protobuf:"varint,6,opt,name=port,proto3" json:"port,omitempty"` - // One or more labels that constrain the applicability of a rule to source (client) workloads - // with the given labels. If the VirtualService has a list of gateways specified - // in the top-level `gateways` field, it must include the reserved gateway - // `mesh` for this field to be applicable. - SourceLabels map[string]string `protobuf:"bytes,7,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - Gateways []string `protobuf:"bytes,8,rep,name=gateways,proto3" json:"gateways,omitempty"` - // Query parameters for matching. - // - // Ex: - // - // - For a query parameter like "?key=true", the map key would be "key" and - // the string match could be defined as `exact: "true"`. - // - // - For a query parameter like "?key", the map key would be "key" and the - // string match could be defined as `exact: ""`. - // - // - For a query parameter like "?key=123", the map key would be "key" and the - // string match could be defined as `regex: "\d+$"`. Note that this - // configuration will only match values like "123" but not "a123" or "123a". - // - // **Note:** `prefix` matching is currently not supported. - QueryParams map[string]*StringMatch `protobuf:"bytes,9,rep,name=query_params,json=queryParams,proto3" json:"query_params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Flag to specify whether the URI matching should be case-insensitive. - // - // **Note:** The case will be ignored only in the case of `exact` and `prefix` - // URI matches. - IgnoreUriCase bool `protobuf:"varint,10,opt,name=ignore_uri_case,json=ignoreUriCase,proto3" json:"ignore_uri_case,omitempty"` - // withoutHeader has the same syntax with the header, but has opposite meaning. - // If a header is matched with a matching rule among withoutHeader, the traffic becomes not matched one. - WithoutHeaders map[string]*StringMatch `protobuf:"bytes,12,rep,name=without_headers,json=withoutHeaders,proto3" json:"without_headers,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - SourceNamespace string `protobuf:"bytes,13,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"` -} - -func (x *HTTPMatchRequest) Reset() { - *x = HTTPMatchRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPMatchRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPMatchRequest) ProtoMessage() {} - -func (x *HTTPMatchRequest) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPMatchRequest.ProtoReflect.Descriptor instead. -func (*HTTPMatchRequest) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{7} -} - -func (x *HTTPMatchRequest) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *HTTPMatchRequest) GetUri() *StringMatch { - if x != nil { - return x.Uri - } - return nil -} - -func (x *HTTPMatchRequest) GetScheme() *StringMatch { - if x != nil { - return x.Scheme - } - return nil -} - -func (x *HTTPMatchRequest) GetMethod() *StringMatch { - if x != nil { - return x.Method - } - return nil -} - -func (x *HTTPMatchRequest) GetAuthority() *StringMatch { - if x != nil { - return x.Authority - } - return nil -} - -func (x *HTTPMatchRequest) GetHeaders() map[string]*StringMatch { - if x != nil { - return x.Headers - } - return nil -} - -func (x *HTTPMatchRequest) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *HTTPMatchRequest) GetSourceLabels() map[string]string { - if x != nil { - return x.SourceLabels - } - return nil -} - -func (x *HTTPMatchRequest) GetGateways() []string { - if x != nil { - return x.Gateways - } - return nil -} - -func (x *HTTPMatchRequest) GetQueryParams() map[string]*StringMatch { - if x != nil { - return x.QueryParams - } - return nil -} - -func (x *HTTPMatchRequest) GetIgnoreUriCase() bool { - if x != nil { - return x.IgnoreUriCase - } - return false -} - -func (x *HTTPMatchRequest) GetWithoutHeaders() map[string]*StringMatch { - if x != nil { - return x.WithoutHeaders - } - return nil -} - -func (x *HTTPMatchRequest) GetSourceNamespace() string { - if x != nil { - return x.SourceNamespace - } - return "" -} - -// Each routing rule is associated with one or more service versions (see -// glossary in beginning of document). Weights associated with the version -// determine the proportion of traffic it receives. For example, the -// following rule will route 25% of traffic for the "reviews" service to -// instances with the "v2" tag and the remaining traffic (i.e., 75%) to -// "v1". -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 -// ``` -// {{}} -// {{}} -// -// And the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// -// Traffic can also be split across two entirely different services without -// having to define new subsets. For example, the following rule forwards 25% of -// traffic to reviews.com to dev.reviews.com -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route-two-domains -// spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route-two-domains -// spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 -// ``` -// {{}} -// {{}} -// -type HTTPRouteDestination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Destination uniquely identifies the instances of a service - // to which the request/connection should be forwarded to. - Destination *Destination `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` - // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests. - // If there is only one destination in a rule, it will receive all traffic. - // Otherwise, if weight is `0`, the destination will not receive any traffic. - Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` - // Header manipulation rules - Headers *Headers `protobuf:"bytes,7,opt,name=headers,proto3" json:"headers,omitempty"` -} - -func (x *HTTPRouteDestination) Reset() { - *x = HTTPRouteDestination{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPRouteDestination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPRouteDestination) ProtoMessage() {} - -func (x *HTTPRouteDestination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPRouteDestination.ProtoReflect.Descriptor instead. -func (*HTTPRouteDestination) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{8} -} - -func (x *HTTPRouteDestination) GetDestination() *Destination { - if x != nil { - return x.Destination - } - return nil -} - -func (x *HTTPRouteDestination) GetWeight() int32 { - if x != nil { - return x.Weight - } - return 0 -} - -func (x *HTTPRouteDestination) GetHeaders() *Headers { - if x != nil { - return x.Headers - } - return nil -} - -// L4 routing rule weighted destination. -type RouteDestination struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Destination uniquely identifies the instances of a service - // to which the request/connection should be forwarded to. - Destination *Destination `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` - // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests. - // If there is only one destination in a rule, it will receive all traffic. - // Otherwise, if weight is `0`, the destination will not receive any traffic. - Weight int32 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` -} - -func (x *RouteDestination) Reset() { - *x = RouteDestination{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RouteDestination) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RouteDestination) ProtoMessage() {} - -func (x *RouteDestination) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RouteDestination.ProtoReflect.Descriptor instead. -func (*RouteDestination) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{9} -} - -func (x *RouteDestination) GetDestination() *Destination { - if x != nil { - return x.Destination - } - return nil -} - -func (x *RouteDestination) GetWeight() int32 { - if x != nil { - return x.Weight - } - return 0 -} - -// L4 connection match attributes. Note that L4 connection matching support -// is incomplete. -type L4MatchAttributes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g., - // a.b.c.d/xx form or just a.b.c.d. - DestinationSubnets []string `protobuf:"bytes,1,rep,name=destination_subnets,json=destinationSubnets,proto3" json:"destination_subnets,omitempty"` - // Specifies the port on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they support, - // in these cases it is not required to explicitly select the port. - Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - // IPv4 or IPv6 ip address of source with optional subnet. E.g., a.b.c.d/xx - // form or just a.b.c.d - // $hide_from_docs - SourceSubnet string `protobuf:"bytes,3,opt,name=source_subnet,json=sourceSubnet,proto3" json:"source_subnet,omitempty"` - // One or more labels that constrain the applicability of a rule to - // workloads with the given labels. If the VirtualService has a list of - // gateways specified in the top-level `gateways` field, it should include the reserved gateway - // `mesh` in order for this field to be applicable. - SourceLabels map[string]string `protobuf:"bytes,4,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - Gateways []string `protobuf:"bytes,5,rep,name=gateways,proto3" json:"gateways,omitempty"` - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - SourceNamespace string `protobuf:"bytes,6,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"` -} - -func (x *L4MatchAttributes) Reset() { - *x = L4MatchAttributes{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *L4MatchAttributes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*L4MatchAttributes) ProtoMessage() {} - -func (x *L4MatchAttributes) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use L4MatchAttributes.ProtoReflect.Descriptor instead. -func (*L4MatchAttributes) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{10} -} - -func (x *L4MatchAttributes) GetDestinationSubnets() []string { - if x != nil { - return x.DestinationSubnets - } - return nil -} - -func (x *L4MatchAttributes) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *L4MatchAttributes) GetSourceSubnet() string { - if x != nil { - return x.SourceSubnet - } - return "" -} - -func (x *L4MatchAttributes) GetSourceLabels() map[string]string { - if x != nil { - return x.SourceLabels - } - return nil -} - -func (x *L4MatchAttributes) GetGateways() []string { - if x != nil { - return x.Gateways - } - return nil -} - -func (x *L4MatchAttributes) GetSourceNamespace() string { - if x != nil { - return x.SourceNamespace - } - return "" -} - -// TLS connection match attributes. -type TLSMatchAttributes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // SNI (server name indicator) to match on. Wildcard prefixes - // can be used in the SNI value, e.g., *.com will match foo.example.com - // as well as example.com. An SNI value must be a subset (i.e., fall - // within the domain) of the corresponding virtual serivce's hosts. - SniHosts []string `protobuf:"bytes,1,rep,name=sni_hosts,json=sniHosts,proto3" json:"sni_hosts,omitempty"` - // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g., - // a.b.c.d/xx form or just a.b.c.d. - DestinationSubnets []string `protobuf:"bytes,2,rep,name=destination_subnets,json=destinationSubnets,proto3" json:"destination_subnets,omitempty"` - // Specifies the port on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they - // support, in these cases it is not required to explicitly select the - // port. - Port uint32 `protobuf:"varint,3,opt,name=port,proto3" json:"port,omitempty"` - // One or more labels that constrain the applicability of a rule to - // workloads with the given labels. If the VirtualService has a list of - // gateways specified in the top-level `gateways` field, it should include the reserved gateway - // `mesh` in order for this field to be applicable. - SourceLabels map[string]string `protobuf:"bytes,5,rep,name=source_labels,json=sourceLabels,proto3" json:"source_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - Gateways []string `protobuf:"bytes,6,rep,name=gateways,proto3" json:"gateways,omitempty"` - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - SourceNamespace string `protobuf:"bytes,7,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"` -} - -func (x *TLSMatchAttributes) Reset() { - *x = TLSMatchAttributes{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TLSMatchAttributes) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TLSMatchAttributes) ProtoMessage() {} - -func (x *TLSMatchAttributes) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TLSMatchAttributes.ProtoReflect.Descriptor instead. -func (*TLSMatchAttributes) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{11} -} - -func (x *TLSMatchAttributes) GetSniHosts() []string { - if x != nil { - return x.SniHosts - } - return nil -} - -func (x *TLSMatchAttributes) GetDestinationSubnets() []string { - if x != nil { - return x.DestinationSubnets - } - return nil -} - -func (x *TLSMatchAttributes) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *TLSMatchAttributes) GetSourceLabels() map[string]string { - if x != nil { - return x.SourceLabels - } - return nil -} - -func (x *TLSMatchAttributes) GetGateways() []string { - if x != nil { - return x.Gateways - } - return nil -} - -func (x *TLSMatchAttributes) GetSourceNamespace() string { - if x != nil { - return x.SourceNamespace - } - return "" -} - -// HTTPRedirect can be used to send a 301 redirect response to the caller, -// where the Authority/Host and the URI in the response can be swapped with -// the specified values. For example, the following rule redirects -// requests for /v1/getProductRatings API on the ratings service to -// /v1/bookRatings provided by the bookratings service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... -// ``` -// {{}} -// {{}} -// -type HTTPRedirect struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // On a redirect, overwrite the Path portion of the URL with this - // value. Note that the entire path will be replaced, irrespective of the - // request URI being matched as an exact path or prefix. - Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` - // On a redirect, overwrite the Authority/Host portion of the URL with - // this value. - Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` - // Types that are assignable to RedirectPort: - // *HTTPRedirect_Port - // *HTTPRedirect_DerivePort - RedirectPort isHTTPRedirect_RedirectPort `protobuf_oneof:"redirect_port"` - // On a redirect, overwrite the scheme portion of the URL with this value. - // For example, `http` or `https`. - // If unset, the original scheme will be used. - // If `derivePort` is set to `FROM_PROTOCOL_DEFAULT`, this will impact the port used as well - Scheme string `protobuf:"bytes,6,opt,name=scheme,proto3" json:"scheme,omitempty"` - // On a redirect, Specifies the HTTP status code to use in the redirect - // response. The default response code is MOVED_PERMANENTLY (301). - RedirectCode uint32 `protobuf:"varint,3,opt,name=redirect_code,json=redirectCode,proto3" json:"redirect_code,omitempty"` -} - -func (x *HTTPRedirect) Reset() { - *x = HTTPRedirect{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPRedirect) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPRedirect) ProtoMessage() {} - -func (x *HTTPRedirect) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPRedirect.ProtoReflect.Descriptor instead. -func (*HTTPRedirect) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{12} -} - -func (x *HTTPRedirect) GetUri() string { - if x != nil { - return x.Uri - } - return "" -} - -func (x *HTTPRedirect) GetAuthority() string { - if x != nil { - return x.Authority - } - return "" -} - -func (m *HTTPRedirect) GetRedirectPort() isHTTPRedirect_RedirectPort { - if m != nil { - return m.RedirectPort - } - return nil -} - -func (x *HTTPRedirect) GetPort() uint32 { - if x, ok := x.GetRedirectPort().(*HTTPRedirect_Port); ok { - return x.Port - } - return 0 -} - -func (x *HTTPRedirect) GetDerivePort() HTTPRedirect_RedirectPortSelection { - if x, ok := x.GetRedirectPort().(*HTTPRedirect_DerivePort); ok { - return x.DerivePort - } - return HTTPRedirect_FROM_PROTOCOL_DEFAULT -} - -func (x *HTTPRedirect) GetScheme() string { - if x != nil { - return x.Scheme - } - return "" -} - -func (x *HTTPRedirect) GetRedirectCode() uint32 { - if x != nil { - return x.RedirectCode - } - return 0 -} - -type isHTTPRedirect_RedirectPort interface { - isHTTPRedirect_RedirectPort() -} - -type HTTPRedirect_Port struct { - // On a redirect, overwrite the port portion of the URL with this value. - Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"` -} - -type HTTPRedirect_DerivePort struct { - // On a redirect, dynamically set the port: - // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. - // * FROM_REQUEST_PORT: automatically use the port of the request. - DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=istio.networking.v1beta1.HTTPRedirect_RedirectPortSelection,oneof"` -} - -func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {} - -func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} - -// HTTPRewrite can be used to rewrite specific parts of a HTTP request -// before forwarding the request to the destination. Rewrite primitive can -// be used only with HTTPRouteDestination. The following example -// demonstrates how to rewrite the URL prefix for api call (/ratings) to -// ratings service before making the actual API call. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -type HTTPRewrite struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // rewrite the path (or the prefix) portion of the URI with this - // value. If the original URI was matched based on prefix, the value - // provided in this field will replace the corresponding matched prefix. - Uri string `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"` - // rewrite the Authority/Host header with this value. - Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` -} - -func (x *HTTPRewrite) Reset() { - *x = HTTPRewrite{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPRewrite) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPRewrite) ProtoMessage() {} - -func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPRewrite.ProtoReflect.Descriptor instead. -func (*HTTPRewrite) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{13} -} - -func (x *HTTPRewrite) GetUri() string { - if x != nil { - return x.Uri - } - return "" -} - -func (x *HTTPRewrite) GetAuthority() string { - if x != nil { - return x.Authority - } - return "" -} - -// Describes how to match a given string in HTTP headers. Match is -// case-sensitive. -type StringMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to MatchType: - // *StringMatch_Exact - // *StringMatch_Prefix - // *StringMatch_Regex - MatchType isStringMatch_MatchType `protobuf_oneof:"match_type"` -} - -func (x *StringMatch) Reset() { - *x = StringMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StringMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StringMatch) ProtoMessage() {} - -func (x *StringMatch) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StringMatch.ProtoReflect.Descriptor instead. -func (*StringMatch) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{14} -} - -func (m *StringMatch) GetMatchType() isStringMatch_MatchType { - if m != nil { - return m.MatchType - } - return nil -} - -func (x *StringMatch) GetExact() string { - if x, ok := x.GetMatchType().(*StringMatch_Exact); ok { - return x.Exact - } - return "" -} - -func (x *StringMatch) GetPrefix() string { - if x, ok := x.GetMatchType().(*StringMatch_Prefix); ok { - return x.Prefix - } - return "" -} - -func (x *StringMatch) GetRegex() string { - if x, ok := x.GetMatchType().(*StringMatch_Regex); ok { - return x.Regex - } - return "" -} - -type isStringMatch_MatchType interface { - isStringMatch_MatchType() -} - -type StringMatch_Exact struct { - // exact string match - Exact string `protobuf:"bytes,1,opt,name=exact,proto3,oneof"` -} - -type StringMatch_Prefix struct { - // prefix-based match - Prefix string `protobuf:"bytes,2,opt,name=prefix,proto3,oneof"` -} - -type StringMatch_Regex struct { - // RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - Regex string `protobuf:"bytes,3,opt,name=regex,proto3,oneof"` -} - -func (*StringMatch_Exact) isStringMatch_MatchType() {} - -func (*StringMatch_Prefix) isStringMatch_MatchType() {} - -func (*StringMatch_Regex) isStringMatch_MatchType() {} - -// Describes the retry policy to use when a HTTP request fails. For -// example, the following rule sets the maximum number of retries to 3 when -// calling ratings:v1 service, with a 2s timeout per retry attempt. -// A retry will be attempted if there is a connect-failure, refused_stream -// or when the upstream server responds with Service Unavailable(503). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: connect-failure,refused-stream,503 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: gateway-error,connect-failure,refused-stream -// ``` -// {{}} -// {{}} -// -type HTTPRetry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Number of retries to be allowed for a given request. The interval - // between retries will be determined automatically (25ms+). When request - // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute) - // or `per_try_timeout` is configured, the actual number of retries attempted also depends on - // the specified request `timeout` and `per_try_timeout` values. - Attempts int32 `protobuf:"varint,1,opt,name=attempts,proto3" json:"attempts,omitempty"` - // Timeout per attempt for a given request, including the initial call and any retries. Format: 1h/1m/1s/1ms. MUST BE >=1ms. - // Default is same value as request - // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute), - // which means no timeout. - PerTryTimeout *durationpb.Duration `protobuf:"bytes,2,opt,name=per_try_timeout,json=perTryTimeout,proto3" json:"per_try_timeout,omitempty"` - // Specifies the conditions under which retry takes place. - // One or more policies can be specified using a ‘,’ delimited list. - // If `retry_on` specifies a valid HTTP status, it will be added to retriable_status_codes retry policy. - // See the [retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) - // and [gRPC retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on) for more details. - RetryOn string `protobuf:"bytes,3,opt,name=retry_on,json=retryOn,proto3" json:"retry_on,omitempty"` - // Flag to specify whether the retries should retry to other localities. - // See the [retry plugin configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration) for more details. - RetryRemoteLocalities *wrapperspb.BoolValue `protobuf:"bytes,4,opt,name=retry_remote_localities,json=retryRemoteLocalities,proto3" json:"retry_remote_localities,omitempty"` -} - -func (x *HTTPRetry) Reset() { - *x = HTTPRetry{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPRetry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPRetry) ProtoMessage() {} - -func (x *HTTPRetry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPRetry.ProtoReflect.Descriptor instead. -func (*HTTPRetry) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{15} -} - -func (x *HTTPRetry) GetAttempts() int32 { - if x != nil { - return x.Attempts - } - return 0 -} - -func (x *HTTPRetry) GetPerTryTimeout() *durationpb.Duration { - if x != nil { - return x.PerTryTimeout - } - return nil -} - -func (x *HTTPRetry) GetRetryOn() string { - if x != nil { - return x.RetryOn - } - return "" -} - -func (x *HTTPRetry) GetRetryRemoteLocalities() *wrapperspb.BoolValue { - if x != nil { - return x.RetryRemoteLocalities - } - return nil -} - -// Describes the Cross-Origin Resource Sharing (CORS) policy, for a given -// service. Refer to [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) -// for further details about cross origin resource sharing. For example, -// the following rule restricts cross origin requests to those originating -// from example.com domain using HTTP POST/GET, and sets the -// `Access-Control-Allow-Credentials` header to false. In addition, it only -// exposes `X-Foo-bar` header and sets an expiry period of 1 day. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" -// ``` -// {{}} -// {{}} -// -type CorsPolicy struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The list of origins that are allowed to perform CORS requests. The - // content will be serialized into the Access-Control-Allow-Origin - // header. Wildcard * will allow all origins. - // $hide_from_docs - // - // Deprecated: Do not use. - AllowOrigin []string `protobuf:"bytes,1,rep,name=allow_origin,json=allowOrigin,proto3" json:"allow_origin,omitempty"` - // String patterns that match allowed origins. - // An origin is allowed if any of the string matchers match. - // If a match is found, then the outgoing Access-Control-Allow-Origin would be set to the origin as provided by the client. - AllowOrigins []*StringMatch `protobuf:"bytes,7,rep,name=allow_origins,json=allowOrigins,proto3" json:"allow_origins,omitempty"` - // List of HTTP methods allowed to access the resource. The content will - // be serialized into the Access-Control-Allow-Methods header. - AllowMethods []string `protobuf:"bytes,2,rep,name=allow_methods,json=allowMethods,proto3" json:"allow_methods,omitempty"` - // List of HTTP headers that can be used when requesting the - // resource. Serialized to Access-Control-Allow-Headers header. - AllowHeaders []string `protobuf:"bytes,3,rep,name=allow_headers,json=allowHeaders,proto3" json:"allow_headers,omitempty"` - // A list of HTTP headers that the browsers are allowed to - // access. Serialized into Access-Control-Expose-Headers header. - ExposeHeaders []string `protobuf:"bytes,4,rep,name=expose_headers,json=exposeHeaders,proto3" json:"expose_headers,omitempty"` - // Specifies how long the results of a preflight request can be - // cached. Translates to the `Access-Control-Max-Age` header. - MaxAge *durationpb.Duration `protobuf:"bytes,5,opt,name=max_age,json=maxAge,proto3" json:"max_age,omitempty"` - // Indicates whether the caller is allowed to send the actual request - // (not the preflight) using credentials. Translates to - // `Access-Control-Allow-Credentials` header. - AllowCredentials *wrapperspb.BoolValue `protobuf:"bytes,6,opt,name=allow_credentials,json=allowCredentials,proto3" json:"allow_credentials,omitempty"` -} - -func (x *CorsPolicy) Reset() { - *x = CorsPolicy{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CorsPolicy) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CorsPolicy) ProtoMessage() {} - -func (x *CorsPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead. -func (*CorsPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{16} -} - -// Deprecated: Do not use. -func (x *CorsPolicy) GetAllowOrigin() []string { - if x != nil { - return x.AllowOrigin - } - return nil -} - -func (x *CorsPolicy) GetAllowOrigins() []*StringMatch { - if x != nil { - return x.AllowOrigins - } - return nil -} - -func (x *CorsPolicy) GetAllowMethods() []string { - if x != nil { - return x.AllowMethods - } - return nil -} - -func (x *CorsPolicy) GetAllowHeaders() []string { - if x != nil { - return x.AllowHeaders - } - return nil -} - -func (x *CorsPolicy) GetExposeHeaders() []string { - if x != nil { - return x.ExposeHeaders - } - return nil -} - -func (x *CorsPolicy) GetMaxAge() *durationpb.Duration { - if x != nil { - return x.MaxAge - } - return nil -} - -func (x *CorsPolicy) GetAllowCredentials() *wrapperspb.BoolValue { - if x != nil { - return x.AllowCredentials - } - return nil -} - -// HTTPFaultInjection can be used to specify one or more faults to inject -// while forwarding HTTP requests to the destination specified in a route. -// Fault specification is part of a VirtualService rule. Faults include -// aborting the Http request from downstream service, and/or delaying -// proxying of requests. A fault rule MUST HAVE delay or abort or both. -// -// *Note:* Delay and abort faults are independent of one another, even if -// both are specified simultaneously. -type HTTPFaultInjection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Delay requests before forwarding, emulating various failures such as - // network issues, overloaded upstream service, etc. - Delay *HTTPFaultInjection_Delay `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"` - // Abort Http request attempts and return error codes back to downstream - // service, giving the impression that the upstream service is faulty. - Abort *HTTPFaultInjection_Abort `protobuf:"bytes,2,opt,name=abort,proto3" json:"abort,omitempty"` -} - -func (x *HTTPFaultInjection) Reset() { - *x = HTTPFaultInjection{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPFaultInjection) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPFaultInjection) ProtoMessage() {} - -func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPFaultInjection.ProtoReflect.Descriptor instead. -func (*HTTPFaultInjection) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17} -} - -func (x *HTTPFaultInjection) GetDelay() *HTTPFaultInjection_Delay { - if x != nil { - return x.Delay - } - return nil -} - -func (x *HTTPFaultInjection) GetAbort() *HTTPFaultInjection_Abort { - if x != nil { - return x.Abort - } - return nil -} - -// PortSelector specifies the number of a port to be used for -// matching or selection for final routing. -type PortSelector struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Valid port number - Number uint32 `protobuf:"varint,1,opt,name=number,proto3" json:"number,omitempty"` -} - -func (x *PortSelector) Reset() { - *x = PortSelector{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PortSelector) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PortSelector) ProtoMessage() {} - -func (x *PortSelector) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PortSelector.ProtoReflect.Descriptor instead. -func (*PortSelector) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{18} -} - -func (x *PortSelector) GetNumber() uint32 { - if x != nil { - return x.Number - } - return 0 -} - -// Percent specifies a percentage in the range of [0.0, 100.0]. -type Percent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Percent) Reset() { - *x = Percent{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Percent) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Percent) ProtoMessage() {} - -func (x *Percent) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Percent.ProtoReflect.Descriptor instead. -func (*Percent) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{19} -} - -func (x *Percent) GetValue() float64 { - if x != nil { - return x.Value - } - return 0 -} - -// HeaderOperations Describes the header manipulations to apply -type Headers_HeaderOperations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Overwrite the headers specified by key with the given values - Set map[string]string `protobuf:"bytes,1,rep,name=set,proto3" json:"set,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Append the given values to the headers specified by keys - // (will create a comma-separated list of values) - Add map[string]string `protobuf:"bytes,2,rep,name=add,proto3" json:"add,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Remove the specified headers - Remove []string `protobuf:"bytes,3,rep,name=remove,proto3" json:"remove,omitempty"` -} - -func (x *Headers_HeaderOperations) Reset() { - *x = Headers_HeaderOperations{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Headers_HeaderOperations) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Headers_HeaderOperations) ProtoMessage() {} - -func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Headers_HeaderOperations.ProtoReflect.Descriptor instead. -func (*Headers_HeaderOperations) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{4, 0} -} - -func (x *Headers_HeaderOperations) GetSet() map[string]string { - if x != nil { - return x.Set - } - return nil -} - -func (x *Headers_HeaderOperations) GetAdd() map[string]string { - if x != nil { - return x.Add - } - return nil -} - -func (x *Headers_HeaderOperations) GetRemove() []string { - if x != nil { - return x.Remove - } - return nil -} - -// Delay specification is used to inject latency into the request -// forwarding path. The following example will introduce a 5 second delay -// in 1 out of every 1000 requests to the "v1" version of the "reviews" -// service from all pods with label env: prod -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s -// ``` -// {{}} -// {{}} -// -// The _fixedDelay_ field is used to indicate the amount of delay in seconds. -// The optional _percentage_ field can be used to only delay a certain -// percentage of requests. If left unspecified, all request will be delayed. -type HTTPFaultInjection_Delay struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Percentage of requests on which the delay will be injected (0-100). - // Use of integer `percent` value is deprecated. Use the double `percentage` - // field instead. - // - // Deprecated: Do not use. - Percent int32 `protobuf:"varint,1,opt,name=percent,proto3" json:"percent,omitempty"` - // Types that are assignable to HttpDelayType: - // *HTTPFaultInjection_Delay_FixedDelay - // *HTTPFaultInjection_Delay_ExponentialDelay - HttpDelayType isHTTPFaultInjection_Delay_HttpDelayType `protobuf_oneof:"http_delay_type"` - // Percentage of requests on which the delay will be injected. - Percentage *Percent `protobuf:"bytes,5,opt,name=percentage,proto3" json:"percentage,omitempty"` -} - -func (x *HTTPFaultInjection_Delay) Reset() { - *x = HTTPFaultInjection_Delay{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPFaultInjection_Delay) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPFaultInjection_Delay) ProtoMessage() {} - -func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPFaultInjection_Delay.ProtoReflect.Descriptor instead. -func (*HTTPFaultInjection_Delay) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17, 0} -} - -// Deprecated: Do not use. -func (x *HTTPFaultInjection_Delay) GetPercent() int32 { - if x != nil { - return x.Percent - } - return 0 -} - -func (m *HTTPFaultInjection_Delay) GetHttpDelayType() isHTTPFaultInjection_Delay_HttpDelayType { - if m != nil { - return m.HttpDelayType - } - return nil -} - -func (x *HTTPFaultInjection_Delay) GetFixedDelay() *durationpb.Duration { - if x, ok := x.GetHttpDelayType().(*HTTPFaultInjection_Delay_FixedDelay); ok { - return x.FixedDelay - } - return nil -} - -func (x *HTTPFaultInjection_Delay) GetExponentialDelay() *durationpb.Duration { - if x, ok := x.GetHttpDelayType().(*HTTPFaultInjection_Delay_ExponentialDelay); ok { - return x.ExponentialDelay - } - return nil -} - -func (x *HTTPFaultInjection_Delay) GetPercentage() *Percent { - if x != nil { - return x.Percentage - } - return nil -} - -type isHTTPFaultInjection_Delay_HttpDelayType interface { - isHTTPFaultInjection_Delay_HttpDelayType() -} - -type HTTPFaultInjection_Delay_FixedDelay struct { - // Add a fixed delay before forwarding the request. Format: - // 1h/1m/1s/1ms. MUST be >=1ms. - FixedDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=fixed_delay,json=fixedDelay,proto3,oneof"` -} - -type HTTPFaultInjection_Delay_ExponentialDelay struct { - // $hide_from_docs - ExponentialDelay *durationpb.Duration `protobuf:"bytes,3,opt,name=exponential_delay,json=exponentialDelay,proto3,oneof"` -} - -func (*HTTPFaultInjection_Delay_FixedDelay) isHTTPFaultInjection_Delay_HttpDelayType() {} - -func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_HttpDelayType() {} - -// Abort specification is used to prematurely abort a request with a -// pre-specified error code. The following example will return an HTTP 400 -// error code for 1 out of every 1000 requests to the "ratings" service "v1". -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 -// ``` -// {{}} -// {{}} -// -// The _httpStatus_ field is used to indicate the HTTP status code to -// return to the caller. The optional _percentage_ field can be used to only -// abort a certain percentage of requests. If not specified, all requests are -// aborted. -type HTTPFaultInjection_Abort struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ErrorType: - // *HTTPFaultInjection_Abort_HttpStatus - // *HTTPFaultInjection_Abort_GrpcStatus - // *HTTPFaultInjection_Abort_Http2Error - ErrorType isHTTPFaultInjection_Abort_ErrorType `protobuf_oneof:"error_type"` - // Percentage of requests to be aborted with the error code provided. - Percentage *Percent `protobuf:"bytes,5,opt,name=percentage,proto3" json:"percentage,omitempty"` -} - -func (x *HTTPFaultInjection_Abort) Reset() { - *x = HTTPFaultInjection_Abort{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPFaultInjection_Abort) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPFaultInjection_Abort) ProtoMessage() {} - -func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPFaultInjection_Abort.ProtoReflect.Descriptor instead. -func (*HTTPFaultInjection_Abort) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17, 1} -} - -func (m *HTTPFaultInjection_Abort) GetErrorType() isHTTPFaultInjection_Abort_ErrorType { - if m != nil { - return m.ErrorType - } - return nil -} - -func (x *HTTPFaultInjection_Abort) GetHttpStatus() int32 { - if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_HttpStatus); ok { - return x.HttpStatus - } - return 0 -} - -func (x *HTTPFaultInjection_Abort) GetGrpcStatus() string { - if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_GrpcStatus); ok { - return x.GrpcStatus - } - return "" -} - -func (x *HTTPFaultInjection_Abort) GetHttp2Error() string { - if x, ok := x.GetErrorType().(*HTTPFaultInjection_Abort_Http2Error); ok { - return x.Http2Error - } - return "" -} - -func (x *HTTPFaultInjection_Abort) GetPercentage() *Percent { - if x != nil { - return x.Percentage - } - return nil -} - -type isHTTPFaultInjection_Abort_ErrorType interface { - isHTTPFaultInjection_Abort_ErrorType() -} - -type HTTPFaultInjection_Abort_HttpStatus struct { - // HTTP status code to use to abort the Http request. - HttpStatus int32 `protobuf:"varint,2,opt,name=http_status,json=httpStatus,proto3,oneof"` -} - -type HTTPFaultInjection_Abort_GrpcStatus struct { - // $hide_from_docs - GrpcStatus string `protobuf:"bytes,3,opt,name=grpc_status,json=grpcStatus,proto3,oneof"` -} - -type HTTPFaultInjection_Abort_Http2Error struct { - // $hide_from_docs - Http2Error string `protobuf:"bytes,4,opt,name=http2_error,json=http2Error,proto3,oneof"` -} - -func (*HTTPFaultInjection_Abort_HttpStatus) isHTTPFaultInjection_Abort_ErrorType() {} - -func (*HTTPFaultInjection_Abort_GrpcStatus) isHTTPFaultInjection_Abort_ErrorType() {} - -func (*HTTPFaultInjection_Abort_Http2Error) isHTTPFaultInjection_Abort_ErrorType() {} - -var File_networking_v1beta1_virtual_service_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_virtual_service_proto_rawDesc = []byte{ - 0x0a, 0x28, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x84, 0x02, 0x0a, 0x0e, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, - 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x37, 0x0a, 0x04, 0x68, 0x74, - 0x74, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x04, 0x68, - 0x74, 0x74, 0x70, 0x12, 0x34, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x52, - 0x6f, 0x75, 0x74, 0x65, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x34, 0x0a, 0x03, 0x74, 0x63, 0x70, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, - 0x1b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x6f, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x6f, 0x22, 0x7b, 0x0a, 0x0b, - 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x04, 0x68, - 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, - 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x12, 0x3a, 0x0a, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x91, 0x08, 0x0a, 0x09, 0x48, 0x54, - 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x6d, - 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, - 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, - 0x75, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x05, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, - 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x47, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, - 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x6d, 0x69, 0x72, 0x72, - 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x73, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x05, - 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x10, 0x52, 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, 0x70, - 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, - 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xe2, 0x03, 0x0a, 0x07, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb8, 0x02, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x03, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x4d, 0x0a, 0x03, 0x61, 0x64, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x96, 0x01, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x48, 0x0a, - 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x08, 0x54, 0x43, - 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x05, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x99, 0x09, 0x0a, 0x10, - 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x3d, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x51, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, - 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x61, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5e, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, 0x43, 0x61, 0x73, 0x65, 0x12, 0x67, - 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x1a, 0x61, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, - 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x68, 0x0a, - 0x13, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x02, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x07, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x79, 0x0a, 0x10, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe9, 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, - 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x62, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xfe, 0x02, 0x0a, 0x12, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x73, 0x6e, - 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, 0x0a, - 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, - 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, - 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x22, 0xce, 0x02, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x0b, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, - 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x15, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x15, 0x0a, - 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x42, 0x0c, 0x0a, - 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x09, - 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x08, 0x61, 0x74, 0x74, - 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x5f, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0d, 0x70, 0x65, 0x72, 0x54, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x12, 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, - 0x72, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xed, 0x02, - 0x0a, 0x0a, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x12, 0x4a, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, - 0x6f, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x61, - 0x78, 0x41, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x8d, 0x05, - 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, - 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x48, - 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, - 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x52, 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x89, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x12, 0x42, 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x41, - 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, - 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x1a, 0xd6, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x27, - 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, - 0x67, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, - 0x74, 0x70, 0x32, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, - 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x42, 0x0c, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, - 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_virtual_service_proto_rawDescOnce sync.Once - file_networking_v1beta1_virtual_service_proto_rawDescData = file_networking_v1beta1_virtual_service_proto_rawDesc -) - -func file_networking_v1beta1_virtual_service_proto_rawDescGZIP() []byte { - file_networking_v1beta1_virtual_service_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_virtual_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_virtual_service_proto_rawDescData) - }) - return file_networking_v1beta1_virtual_service_proto_rawDescData -} - -var file_networking_v1beta1_virtual_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_networking_v1beta1_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 31) -var file_networking_v1beta1_virtual_service_proto_goTypes = []interface{}{ - (HTTPRedirect_RedirectPortSelection)(0), // 0: istio.networking.v1beta1.HTTPRedirect.RedirectPortSelection - (*VirtualService)(nil), // 1: istio.networking.v1beta1.VirtualService - (*Destination)(nil), // 2: istio.networking.v1beta1.Destination - (*HTTPRoute)(nil), // 3: istio.networking.v1beta1.HTTPRoute - (*Delegate)(nil), // 4: istio.networking.v1beta1.Delegate - (*Headers)(nil), // 5: istio.networking.v1beta1.Headers - (*TLSRoute)(nil), // 6: istio.networking.v1beta1.TLSRoute - (*TCPRoute)(nil), // 7: istio.networking.v1beta1.TCPRoute - (*HTTPMatchRequest)(nil), // 8: istio.networking.v1beta1.HTTPMatchRequest - (*HTTPRouteDestination)(nil), // 9: istio.networking.v1beta1.HTTPRouteDestination - (*RouteDestination)(nil), // 10: istio.networking.v1beta1.RouteDestination - (*L4MatchAttributes)(nil), // 11: istio.networking.v1beta1.L4MatchAttributes - (*TLSMatchAttributes)(nil), // 12: istio.networking.v1beta1.TLSMatchAttributes - (*HTTPRedirect)(nil), // 13: istio.networking.v1beta1.HTTPRedirect - (*HTTPRewrite)(nil), // 14: istio.networking.v1beta1.HTTPRewrite - (*StringMatch)(nil), // 15: istio.networking.v1beta1.StringMatch - (*HTTPRetry)(nil), // 16: istio.networking.v1beta1.HTTPRetry - (*CorsPolicy)(nil), // 17: istio.networking.v1beta1.CorsPolicy - (*HTTPFaultInjection)(nil), // 18: istio.networking.v1beta1.HTTPFaultInjection - (*PortSelector)(nil), // 19: istio.networking.v1beta1.PortSelector - (*Percent)(nil), // 20: istio.networking.v1beta1.Percent - (*Headers_HeaderOperations)(nil), // 21: istio.networking.v1beta1.Headers.HeaderOperations - nil, // 22: istio.networking.v1beta1.Headers.HeaderOperations.SetEntry - nil, // 23: istio.networking.v1beta1.Headers.HeaderOperations.AddEntry - nil, // 24: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry - nil, // 25: istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry - nil, // 26: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry - nil, // 27: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry - nil, // 28: istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry - nil, // 29: istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry - (*HTTPFaultInjection_Delay)(nil), // 30: istio.networking.v1beta1.HTTPFaultInjection.Delay - (*HTTPFaultInjection_Abort)(nil), // 31: istio.networking.v1beta1.HTTPFaultInjection.Abort - (*durationpb.Duration)(nil), // 32: google.protobuf.Duration - (*wrapperspb.UInt32Value)(nil), // 33: google.protobuf.UInt32Value - (*wrapperspb.BoolValue)(nil), // 34: google.protobuf.BoolValue -} -var file_networking_v1beta1_virtual_service_proto_depIdxs = []int32{ - 3, // 0: istio.networking.v1beta1.VirtualService.http:type_name -> istio.networking.v1beta1.HTTPRoute - 6, // 1: istio.networking.v1beta1.VirtualService.tls:type_name -> istio.networking.v1beta1.TLSRoute - 7, // 2: istio.networking.v1beta1.VirtualService.tcp:type_name -> istio.networking.v1beta1.TCPRoute - 19, // 3: istio.networking.v1beta1.Destination.port:type_name -> istio.networking.v1beta1.PortSelector - 8, // 4: istio.networking.v1beta1.HTTPRoute.match:type_name -> istio.networking.v1beta1.HTTPMatchRequest - 9, // 5: istio.networking.v1beta1.HTTPRoute.route:type_name -> istio.networking.v1beta1.HTTPRouteDestination - 13, // 6: istio.networking.v1beta1.HTTPRoute.redirect:type_name -> istio.networking.v1beta1.HTTPRedirect - 4, // 7: istio.networking.v1beta1.HTTPRoute.delegate:type_name -> istio.networking.v1beta1.Delegate - 14, // 8: istio.networking.v1beta1.HTTPRoute.rewrite:type_name -> istio.networking.v1beta1.HTTPRewrite - 32, // 9: istio.networking.v1beta1.HTTPRoute.timeout:type_name -> google.protobuf.Duration - 16, // 10: istio.networking.v1beta1.HTTPRoute.retries:type_name -> istio.networking.v1beta1.HTTPRetry - 18, // 11: istio.networking.v1beta1.HTTPRoute.fault:type_name -> istio.networking.v1beta1.HTTPFaultInjection - 2, // 12: istio.networking.v1beta1.HTTPRoute.mirror:type_name -> istio.networking.v1beta1.Destination - 33, // 13: istio.networking.v1beta1.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value - 20, // 14: istio.networking.v1beta1.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1beta1.Percent - 17, // 15: istio.networking.v1beta1.HTTPRoute.cors_policy:type_name -> istio.networking.v1beta1.CorsPolicy - 5, // 16: istio.networking.v1beta1.HTTPRoute.headers:type_name -> istio.networking.v1beta1.Headers - 21, // 17: istio.networking.v1beta1.Headers.request:type_name -> istio.networking.v1beta1.Headers.HeaderOperations - 21, // 18: istio.networking.v1beta1.Headers.response:type_name -> istio.networking.v1beta1.Headers.HeaderOperations - 12, // 19: istio.networking.v1beta1.TLSRoute.match:type_name -> istio.networking.v1beta1.TLSMatchAttributes - 10, // 20: istio.networking.v1beta1.TLSRoute.route:type_name -> istio.networking.v1beta1.RouteDestination - 11, // 21: istio.networking.v1beta1.TCPRoute.match:type_name -> istio.networking.v1beta1.L4MatchAttributes - 10, // 22: istio.networking.v1beta1.TCPRoute.route:type_name -> istio.networking.v1beta1.RouteDestination - 15, // 23: istio.networking.v1beta1.HTTPMatchRequest.uri:type_name -> istio.networking.v1beta1.StringMatch - 15, // 24: istio.networking.v1beta1.HTTPMatchRequest.scheme:type_name -> istio.networking.v1beta1.StringMatch - 15, // 25: istio.networking.v1beta1.HTTPMatchRequest.method:type_name -> istio.networking.v1beta1.StringMatch - 15, // 26: istio.networking.v1beta1.HTTPMatchRequest.authority:type_name -> istio.networking.v1beta1.StringMatch - 24, // 27: istio.networking.v1beta1.HTTPMatchRequest.headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry - 25, // 28: istio.networking.v1beta1.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry - 26, // 29: istio.networking.v1beta1.HTTPMatchRequest.query_params:type_name -> istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry - 27, // 30: istio.networking.v1beta1.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry - 2, // 31: istio.networking.v1beta1.HTTPRouteDestination.destination:type_name -> istio.networking.v1beta1.Destination - 5, // 32: istio.networking.v1beta1.HTTPRouteDestination.headers:type_name -> istio.networking.v1beta1.Headers - 2, // 33: istio.networking.v1beta1.RouteDestination.destination:type_name -> istio.networking.v1beta1.Destination - 28, // 34: istio.networking.v1beta1.L4MatchAttributes.source_labels:type_name -> istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry - 29, // 35: istio.networking.v1beta1.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry - 0, // 36: istio.networking.v1beta1.HTTPRedirect.derive_port:type_name -> istio.networking.v1beta1.HTTPRedirect.RedirectPortSelection - 32, // 37: istio.networking.v1beta1.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration - 34, // 38: istio.networking.v1beta1.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue - 15, // 39: istio.networking.v1beta1.CorsPolicy.allow_origins:type_name -> istio.networking.v1beta1.StringMatch - 32, // 40: istio.networking.v1beta1.CorsPolicy.max_age:type_name -> google.protobuf.Duration - 34, // 41: istio.networking.v1beta1.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue - 30, // 42: istio.networking.v1beta1.HTTPFaultInjection.delay:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Delay - 31, // 43: istio.networking.v1beta1.HTTPFaultInjection.abort:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Abort - 22, // 44: istio.networking.v1beta1.Headers.HeaderOperations.set:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.SetEntry - 23, // 45: istio.networking.v1beta1.Headers.HeaderOperations.add:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.AddEntry - 15, // 46: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 15, // 47: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 15, // 48: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 32, // 49: istio.networking.v1beta1.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration - 32, // 50: istio.networking.v1beta1.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration - 20, // 51: istio.networking.v1beta1.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1beta1.Percent - 20, // 52: istio.networking.v1beta1.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1beta1.Percent - 53, // [53:53] is the sub-list for method output_type - 53, // [53:53] is the sub-list for method input_type - 53, // [53:53] is the sub-list for extension type_name - 53, // [53:53] is the sub-list for extension extendee - 0, // [0:53] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_virtual_service_proto_init() } -func file_networking_v1beta1_virtual_service_proto_init() { - if File_networking_v1beta1_virtual_service_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_virtual_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*VirtualService); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Destination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Delegate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Headers); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TLSRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TCPRoute); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPMatchRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRouteDestination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RouteDestination); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*L4MatchAttributes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TLSMatchAttributes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRedirect); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRewrite); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StringMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRetry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CorsPolicy); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFaultInjection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PortSelector); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Percent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Headers_HeaderOperations); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFaultInjection_Delay); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFaultInjection_Abort); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_networking_v1beta1_virtual_service_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*HTTPRedirect_Port)(nil), - (*HTTPRedirect_DerivePort)(nil), - } - file_networking_v1beta1_virtual_service_proto_msgTypes[14].OneofWrappers = []interface{}{ - (*StringMatch_Exact)(nil), - (*StringMatch_Prefix)(nil), - (*StringMatch_Regex)(nil), - } - file_networking_v1beta1_virtual_service_proto_msgTypes[29].OneofWrappers = []interface{}{ - (*HTTPFaultInjection_Delay_FixedDelay)(nil), - (*HTTPFaultInjection_Delay_ExponentialDelay)(nil), - } - file_networking_v1beta1_virtual_service_proto_msgTypes[30].OneofWrappers = []interface{}{ - (*HTTPFaultInjection_Abort_HttpStatus)(nil), - (*HTTPFaultInjection_Abort_GrpcStatus)(nil), - (*HTTPFaultInjection_Abort_Http2Error)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_virtual_service_proto_rawDesc, - NumEnums: 1, - NumMessages: 31, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_virtual_service_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_virtual_service_proto_depIdxs, - EnumInfos: file_networking_v1beta1_virtual_service_proto_enumTypes, - MessageInfos: file_networking_v1beta1_virtual_service_proto_msgTypes, - }.Build() - File_networking_v1beta1_virtual_service_proto = out.File - file_networking_v1beta1_virtual_service_proto_rawDesc = nil - file_networking_v1beta1_virtual_service_proto_goTypes = nil - file_networking_v1beta1_virtual_service_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/workload_entry.pb.go b/gen/proto/networking/v1beta1/workload_entry.pb.go deleted file mode 100644 index 3cec55f..0000000 --- a/gen/proto/networking/v1beta1/workload_entry.pb.go +++ /dev/null @@ -1,531 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/workload_entry.proto - -// $schema: istio.networking.v1beta1.WorkloadEntry -// $title: Workload Entry -// $description: Configuration affecting VMs onboarded into the mesh. -// $location: https://istio.io/docs/reference/config/networking/workload-entry.html -// $aliases: [/docs/reference/config/networking/v1beta1/workload-entry] -// $mode: none - -// `WorkloadEntry` enables operators to describe the properties of a -// single non-Kubernetes workload such as a VM or a bare metal server -// as it is onboarded into the mesh. A `WorkloadEntry` must be -// accompanied by an Istio `ServiceEntry` that selects the workload -// through the appropriate labels and provides the service definition -// for a `MESH_INTERNAL` service (hostnames, port properties, etc.). A -// `ServiceEntry` object can select multiple workload entries as well -// as Kubernetes pods based on the label selector specified in the -// service entry. -// -// When a workload connects to `istiod`, the status field in the -// custom resource will be updated to indicate the health of the -// workload along with other details, similar to how Kubernetes -// updates the status of a pod. -// -// The following example declares a workload entry representing a VM -// for the `details.bookinfo.com` service. This VM has sidecar -// installed and bootstrapped using the `details-legacy` service -// account. The service is exposed on port 80 to applications in the -// mesh. The HTTP traffic to this service is wrapped in Istio mutual -// TLS and sent to sidecars on VMs on target port 8080, that in turn -// forward it to the application on localhost on the same port. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: 2.2.2.2 -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: 2.2.2.2 -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// {{}} -// -// and the associated service entry -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: STATIC -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: STATIC -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// {{}} -// -// -// The following example declares the same VM workload using -// its fully qualified DNS name. The service entry's resolution -// mode should be changed to DNS to indicate that the client-side -// sidecars should dynamically resolve the DNS name at runtime before -// forwarding the request. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: vm1.vpc01.corp.net -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: vm1.vpc01.corp.net -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// {{}} -// -// and the associated service entry -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: DNS -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: DNS -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// WorkloadEntry enables specifying the properties of a single non-Kubernetes workload such a VM or a bare metal services that can be referred to by service entries. -// -// -// -// -// -type WorkloadEntry struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Address associated with the network endpoint without the - // port. Domain names can be used if and only if the resolution is set - // to DNS, and must be fully-qualified without wildcards. Use the form - // unix:///absolute/path/to/socket for Unix domain socket endpoints. - Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` - // Set of ports associated with the endpoint. If the port map is - // specified, it must be a map of servicePortName to this endpoint's - // port, such that traffic to the service port will be forwarded to - // the endpoint port that maps to the service's portName. If - // omitted, and the targetPort is specified as part of the service's - // port specification, traffic to the service port will be forwarded - // to one of the endpoints on the specified `targetPort`. If both - // the targetPort and endpoint's port map are not specified, traffic - // to a service port will be forwarded to one of the endpoints on - // the same port. - // - // **NOTE 1:** Do not use for `unix://` addresses. - // - // **NOTE 2:** endpoint port map takes precedence over targetPort. - Ports map[string]uint32 `protobuf:"bytes,2,rep,name=ports,proto3" json:"ports,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` - // One or more labels associated with the endpoint. - 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"` - // Network enables Istio to group endpoints resident in the same L3 - // domain/network. All endpoints in the same network are assumed to be - // directly reachable from one another. When endpoints in different - // networks cannot reach each other directly, an Istio Gateway can be - // used to establish connectivity (usually using the - // `AUTO_PASSTHROUGH` mode in a Gateway Server). This is - // an advanced configuration used typically for spanning an Istio mesh - // over multiple clusters. - Network string `protobuf:"bytes,4,opt,name=network,proto3" json:"network,omitempty"` - // The locality associated with the endpoint. A locality corresponds - // to a failure domain (e.g., country/region/zone). Arbitrary failure - // domain hierarchies can be represented by separating each - // encapsulating failure domain by /. For example, the locality of an - // an endpoint in US, in US-East-1 region, within availability zone - // az-1, in data center rack r11 can be represented as - // us/us-east-1/az-1/r11. Istio will configure the sidecar to route to - // endpoints within the same locality as the sidecar. If none of the - // endpoints in the locality are available, endpoints parent locality - // (but within the same network WorkloadID) will be chosen. For example, if - // there are two endpoints in same network (networkID "n1"), say e1 - // with locality us/us-east-1/az-1/r11 and e2 with locality - // us/us-east-1/az-2/r12, a sidecar from us/us-east-1/az-1/r11 locality - // will prefer e1 from the same locality over e2 from a different - // locality. Endpoint e2 could be the IP associated with a gateway - // (that bridges networks n1 and n2), or the IP associated with a - // standard service endpoint. - Locality string `protobuf:"bytes,5,opt,name=locality,proto3" json:"locality,omitempty"` - // The load balancing weight associated with the endpoint. Endpoints - // with higher weights will receive proportionally higher traffic. - Weight uint32 `protobuf:"varint,6,opt,name=weight,proto3" json:"weight,omitempty"` - // The service account associated with the workload if a sidecar - // is present in the workload. The service account must be present - // in the same namespace as the configuration ( WorkloadEntry or a - // ServiceEntry) - ServiceAccount string `protobuf:"bytes,7,opt,name=service_account,json=serviceAccount,proto3" json:"service_account,omitempty"` -} - -func (x *WorkloadEntry) Reset() { - *x = WorkloadEntry{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_entry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadEntry) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadEntry) ProtoMessage() {} - -func (x *WorkloadEntry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_entry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadEntry.ProtoReflect.Descriptor instead. -func (*WorkloadEntry) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_entry_proto_rawDescGZIP(), []int{0} -} - -func (x *WorkloadEntry) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (x *WorkloadEntry) GetPorts() map[string]uint32 { - if x != nil { - return x.Ports - } - return nil -} - -func (x *WorkloadEntry) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *WorkloadEntry) GetNetwork() string { - if x != nil { - return x.Network - } - return "" -} - -func (x *WorkloadEntry) GetLocality() string { - if x != nil { - return x.Locality - } - return "" -} - -func (x *WorkloadEntry) GetWeight() uint32 { - if x != nil { - return x.Weight - } - return 0 -} - -func (x *WorkloadEntry) GetServiceAccount() string { - if x != nil { - return x.ServiceAccount - } - return "" -} - -var File_networking_v1beta1_workload_entry_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_workload_entry_proto_rawDesc = []byte{ - 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x65, 0x6e, - 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb2, 0x03, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x1e, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x48, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x50, - 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, - 0x12, 0x4b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x18, 0x0a, - 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x38, 0x0a, 0x0a, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, - 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_workload_entry_proto_rawDescOnce sync.Once - file_networking_v1beta1_workload_entry_proto_rawDescData = file_networking_v1beta1_workload_entry_proto_rawDesc -) - -func file_networking_v1beta1_workload_entry_proto_rawDescGZIP() []byte { - file_networking_v1beta1_workload_entry_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_workload_entry_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_workload_entry_proto_rawDescData) - }) - return file_networking_v1beta1_workload_entry_proto_rawDescData -} - -var file_networking_v1beta1_workload_entry_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_networking_v1beta1_workload_entry_proto_goTypes = []interface{}{ - (*WorkloadEntry)(nil), // 0: istio.networking.v1beta1.WorkloadEntry - nil, // 1: istio.networking.v1beta1.WorkloadEntry.PortsEntry - nil, // 2: istio.networking.v1beta1.WorkloadEntry.LabelsEntry -} -var file_networking_v1beta1_workload_entry_proto_depIdxs = []int32{ - 1, // 0: istio.networking.v1beta1.WorkloadEntry.ports:type_name -> istio.networking.v1beta1.WorkloadEntry.PortsEntry - 2, // 1: istio.networking.v1beta1.WorkloadEntry.labels:type_name -> istio.networking.v1beta1.WorkloadEntry.LabelsEntry - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_workload_entry_proto_init() } -func file_networking_v1beta1_workload_entry_proto_init() { - if File_networking_v1beta1_workload_entry_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_workload_entry_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadEntry); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_workload_entry_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_workload_entry_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_workload_entry_proto_depIdxs, - MessageInfos: file_networking_v1beta1_workload_entry_proto_msgTypes, - }.Build() - File_networking_v1beta1_workload_entry_proto = out.File - file_networking_v1beta1_workload_entry_proto_rawDesc = nil - file_networking_v1beta1_workload_entry_proto_goTypes = nil - file_networking_v1beta1_workload_entry_proto_depIdxs = nil -} diff --git a/gen/proto/networking/v1beta1/workload_group.pb.go b/gen/proto/networking/v1beta1/workload_group.pb.go deleted file mode 100644 index 770ec01..0000000 --- a/gen/proto/networking/v1beta1/workload_group.pb.go +++ /dev/null @@ -1,917 +0,0 @@ -// Copyright 2020 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: networking/v1beta1/workload_group.proto - -// $schema: istio.networking.v1alpha3.WorkloadGroup -// $title: Workload Group -// $description: Describes a collection of workload instances. -// $location: https://istio.io/docs/reference/config/networking/workload-group.html -// $aliases: [/docs/reference/config/networking/v1alpha3/workload-group] - -// `WorkloadGroup` describes a collection of workload instances. -// It provides a specification that the workload instances can use to bootstrap -// their proxies, including the metadata and identity. It is only intended to -// be used with non-k8s workloads like Virtual Machines, and is meant to mimic -// the existing sidecar injection and deployment specification model used for -// Kubernetes workloads to bootstrap Istio proxies. -// -// The following example declares a workload group representing a collection -// of workloads that will be registered under `reviews` in namespace -// `bookinfo`. The set of labels will be associated with each workload -// instance during the bootstrap process, and the ports 3550 and 8080 -// will be associated with the workload group and use service account `default`. -// `app.kubernetes.io/version` is just an arbitrary example of a label. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadGroup -// metadata: -// name: reviews -// namespace: bookinfo -// spec: -// metadata: -// labels: -// app.kubernetes.io/name: reviews -// app.kubernetes.io/version: "1.3.4" -// template: -// ports: -// grpc: 3550 -// http: 8080 -// serviceAccount: default -// probe: -// initialDelaySeconds: 5 -// timeoutSeconds: 3 -// periodSeconds: 4 -// successThreshold: 3 -// failureThreshold: 3 -// httpGet: -// path: /foo/bar -// host: 127.0.0.1 -// port: 3100 -// scheme: HTTPS -// httpHeaders: -// - name: Lit-Header -// value: Im-The-Best -// ``` -// {{}} -// {{}} -// - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// `WorkloadGroup` enables specifying the properties of a single workload for bootstrap and -// provides a template for `WorkloadEntry`, similar to how `Deployment` specifies properties -// of workloads via `Pod` templates. A `WorkloadGroup` can have more than one `WorkloadEntry`. -// `WorkloadGroup` has no relationship to resources which control service registry like `ServiceEntry` -// and as such doesn't configure host name for these workloads. -// -// -// -// -// -type WorkloadGroup struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Metadata that will be used for all corresponding `WorkloadEntries`. - // User labels for a workload group should be set here in `metadata` rather than in `template`. - Metadata *WorkloadGroup_ObjectMeta `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` - // Template to be used for the generation of `WorkloadEntry` resources that belong to this `WorkloadGroup`. - // Please note that `address` and `labels` fields should not be set in the template, and an empty `serviceAccount` - // should default to `default`. The workload identities (mTLS certificates) will be bootstrapped using the - // specified service account's token. Workload entries in this group will be in the same namespace as the - // workload group, and inherit the labels and annotations from the above `metadata` field. - Template *WorkloadEntry `protobuf:"bytes,2,opt,name=template,proto3" json:"template,omitempty"` - // `ReadinessProbe` describes the configuration the user must provide for healthchecking on their workload. - // This configuration mirrors K8S in both syntax and logic for the most part. - Probe *ReadinessProbe `protobuf:"bytes,3,opt,name=probe,proto3" json:"probe,omitempty"` -} - -func (x *WorkloadGroup) Reset() { - *x = WorkloadGroup{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadGroup) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadGroup) ProtoMessage() {} - -func (x *WorkloadGroup) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadGroup.ProtoReflect.Descriptor instead. -func (*WorkloadGroup) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{0} -} - -func (x *WorkloadGroup) GetMetadata() *WorkloadGroup_ObjectMeta { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *WorkloadGroup) GetTemplate() *WorkloadEntry { - if x != nil { - return x.Template - } - return nil -} - -func (x *WorkloadGroup) GetProbe() *ReadinessProbe { - if x != nil { - return x.Probe - } - return nil -} - -type ReadinessProbe struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Number of seconds after the container has started before readiness probes are initiated. - InitialDelaySeconds int32 `protobuf:"varint,2,opt,name=initial_delay_seconds,json=initialDelaySeconds,proto3" json:"initial_delay_seconds,omitempty"` - // Number of seconds after which the probe times out. - // Defaults to 1 second. Minimum value is 1 second. - TimeoutSeconds int32 `protobuf:"varint,3,opt,name=timeout_seconds,json=timeoutSeconds,proto3" json:"timeout_seconds,omitempty"` - // How often (in seconds) to perform the probe. - // Default to 10 seconds. Minimum value is 1 second. - PeriodSeconds int32 `protobuf:"varint,4,opt,name=period_seconds,json=periodSeconds,proto3" json:"period_seconds,omitempty"` - // Minimum consecutive successes for the probe to be considered successful after having failed. - // Defaults to 1 second. - SuccessThreshold int32 `protobuf:"varint,5,opt,name=success_threshold,json=successThreshold,proto3" json:"success_threshold,omitempty"` - // Minimum consecutive failures for the probe to be considered failed after having succeeded. - // Defaults to 3 seconds. - FailureThreshold int32 `protobuf:"varint,6,opt,name=failure_threshold,json=failureThreshold,proto3" json:"failure_threshold,omitempty"` - // Users can only provide one configuration for healthchecks (tcp, http, exec), - // and this is expressed as a oneof. All of the other configuration values - // hold true for any of the healthcheck methods. - // - // Types that are assignable to HealthCheckMethod: - // *ReadinessProbe_HttpGet - // *ReadinessProbe_TcpSocket - // *ReadinessProbe_Exec - HealthCheckMethod isReadinessProbe_HealthCheckMethod `protobuf_oneof:"health_check_method"` -} - -func (x *ReadinessProbe) Reset() { - *x = ReadinessProbe{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ReadinessProbe) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ReadinessProbe) ProtoMessage() {} - -func (x *ReadinessProbe) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ReadinessProbe.ProtoReflect.Descriptor instead. -func (*ReadinessProbe) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{1} -} - -func (x *ReadinessProbe) GetInitialDelaySeconds() int32 { - if x != nil { - return x.InitialDelaySeconds - } - return 0 -} - -func (x *ReadinessProbe) GetTimeoutSeconds() int32 { - if x != nil { - return x.TimeoutSeconds - } - return 0 -} - -func (x *ReadinessProbe) GetPeriodSeconds() int32 { - if x != nil { - return x.PeriodSeconds - } - return 0 -} - -func (x *ReadinessProbe) GetSuccessThreshold() int32 { - if x != nil { - return x.SuccessThreshold - } - return 0 -} - -func (x *ReadinessProbe) GetFailureThreshold() int32 { - if x != nil { - return x.FailureThreshold - } - return 0 -} - -func (m *ReadinessProbe) GetHealthCheckMethod() isReadinessProbe_HealthCheckMethod { - if m != nil { - return m.HealthCheckMethod - } - return nil -} - -func (x *ReadinessProbe) GetHttpGet() *HTTPHealthCheckConfig { - if x, ok := x.GetHealthCheckMethod().(*ReadinessProbe_HttpGet); ok { - return x.HttpGet - } - return nil -} - -func (x *ReadinessProbe) GetTcpSocket() *TCPHealthCheckConfig { - if x, ok := x.GetHealthCheckMethod().(*ReadinessProbe_TcpSocket); ok { - return x.TcpSocket - } - return nil -} - -func (x *ReadinessProbe) GetExec() *ExecHealthCheckConfig { - if x, ok := x.GetHealthCheckMethod().(*ReadinessProbe_Exec); ok { - return x.Exec - } - return nil -} - -type isReadinessProbe_HealthCheckMethod interface { - isReadinessProbe_HealthCheckMethod() -} - -type ReadinessProbe_HttpGet struct { - // `httpGet` is performed to a given endpoint - // and the status/able to connect determines health. - HttpGet *HTTPHealthCheckConfig `protobuf:"bytes,7,opt,name=http_get,json=httpGet,proto3,oneof"` -} - -type ReadinessProbe_TcpSocket struct { - // Health is determined by if the proxy is able to connect. - TcpSocket *TCPHealthCheckConfig `protobuf:"bytes,8,opt,name=tcp_socket,json=tcpSocket,proto3,oneof"` -} - -type ReadinessProbe_Exec struct { - // Health is determined by how the command that is executed exited. - Exec *ExecHealthCheckConfig `protobuf:"bytes,9,opt,name=exec,proto3,oneof"` -} - -func (*ReadinessProbe_HttpGet) isReadinessProbe_HealthCheckMethod() {} - -func (*ReadinessProbe_TcpSocket) isReadinessProbe_HealthCheckMethod() {} - -func (*ReadinessProbe_Exec) isReadinessProbe_HealthCheckMethod() {} - -type HTTPHealthCheckConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Path to access on the HTTP server. - Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` - // Port on which the endpoint lives. - Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` - // Host name to connect to, defaults to the pod IP. You probably want to set - // "Host" in httpHeaders instead. - Host string `protobuf:"bytes,3,opt,name=host,proto3" json:"host,omitempty"` - // HTTP or HTTPS, defaults to HTTP - Scheme string `protobuf:"bytes,4,opt,name=scheme,proto3" json:"scheme,omitempty"` - // Headers the proxy will pass on to make the request. - // Allows repeated headers. - HttpHeaders []*HTTPHeader `protobuf:"bytes,5,rep,name=http_headers,json=httpHeaders,proto3" json:"http_headers,omitempty"` -} - -func (x *HTTPHealthCheckConfig) Reset() { - *x = HTTPHealthCheckConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPHealthCheckConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPHealthCheckConfig) ProtoMessage() {} - -func (x *HTTPHealthCheckConfig) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPHealthCheckConfig.ProtoReflect.Descriptor instead. -func (*HTTPHealthCheckConfig) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{2} -} - -func (x *HTTPHealthCheckConfig) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -func (x *HTTPHealthCheckConfig) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -func (x *HTTPHealthCheckConfig) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *HTTPHealthCheckConfig) GetScheme() string { - if x != nil { - return x.Scheme - } - return "" -} - -func (x *HTTPHealthCheckConfig) GetHttpHeaders() []*HTTPHeader { - if x != nil { - return x.HttpHeaders - } - return nil -} - -type HTTPHeader struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The header field name - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // The header field value - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *HTTPHeader) Reset() { - *x = HTTPHeader{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HTTPHeader) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HTTPHeader) ProtoMessage() {} - -func (x *HTTPHeader) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HTTPHeader.ProtoReflect.Descriptor instead. -func (*HTTPHeader) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{3} -} - -func (x *HTTPHeader) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *HTTPHeader) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -type TCPHealthCheckConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Host to connect to, defaults to localhost - Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` - // Port of host - Port uint32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` -} - -func (x *TCPHealthCheckConfig) Reset() { - *x = TCPHealthCheckConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TCPHealthCheckConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TCPHealthCheckConfig) ProtoMessage() {} - -func (x *TCPHealthCheckConfig) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TCPHealthCheckConfig.ProtoReflect.Descriptor instead. -func (*TCPHealthCheckConfig) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{4} -} - -func (x *TCPHealthCheckConfig) GetHost() string { - if x != nil { - return x.Host - } - return "" -} - -func (x *TCPHealthCheckConfig) GetPort() uint32 { - if x != nil { - return x.Port - } - return 0 -} - -type ExecHealthCheckConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Command to run. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - Command []string `protobuf:"bytes,1,rep,name=command,proto3" json:"command,omitempty"` -} - -func (x *ExecHealthCheckConfig) Reset() { - *x = ExecHealthCheckConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExecHealthCheckConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExecHealthCheckConfig) ProtoMessage() {} - -func (x *ExecHealthCheckConfig) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExecHealthCheckConfig.ProtoReflect.Descriptor instead. -func (*ExecHealthCheckConfig) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{5} -} - -func (x *ExecHealthCheckConfig) GetCommand() []string { - if x != nil { - return x.Command - } - return nil -} - -// `ObjectMeta` describes metadata that will be attached to a `WorkloadEntry`. -// It is a subset of the supported Kubernetes metadata. -type WorkloadGroup_ObjectMeta struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Labels to attach - Labels map[string]string `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - // Annotations to attach - Annotations map[string]string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *WorkloadGroup_ObjectMeta) Reset() { - *x = WorkloadGroup_ObjectMeta{} - if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadGroup_ObjectMeta) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadGroup_ObjectMeta) ProtoMessage() {} - -func (x *WorkloadGroup_ObjectMeta) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_workload_group_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadGroup_ObjectMeta.ProtoReflect.Descriptor instead. -func (*WorkloadGroup_ObjectMeta) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_workload_group_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *WorkloadGroup_ObjectMeta) GetLabels() map[string]string { - if x != nil { - return x.Labels - } - return nil -} - -func (x *WorkloadGroup_ObjectMeta) GetAnnotations() map[string]string { - if x != nil { - return x.Annotations - } - return nil -} - -var File_networking_v1beta1_workload_group_proto protoreflect.FileDescriptor - -var file_networking_v1beta1_workload_group_proto_rawDesc = []byte{ - 0x0a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x18, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x27, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb3, 0x04, - 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, - 0x4e, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x49, 0x0a, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x08, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x3e, 0x0a, 0x05, 0x70, 0x72, - 0x6f, 0x62, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, 0x73, 0x50, 0x72, - 0x6f, 0x62, 0x65, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x1a, 0xc6, 0x02, 0x0a, 0x0a, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x56, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x12, 0x65, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, - 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, - 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0xeb, 0x03, 0x0a, 0x0e, 0x52, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, - 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x69, - 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x63, 0x6f, - 0x6e, 0x64, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, - 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x68, - 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x75, - 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, 0x73, - 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4c, 0x0a, 0x08, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x67, 0x65, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x07, 0x68, 0x74, 0x74, 0x70, 0x47, - 0x65, 0x74, 0x12, 0x4f, 0x0a, 0x0a, 0x74, 0x63, 0x70, 0x5f, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x54, 0x43, 0x50, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x09, 0x74, 0x63, 0x70, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x04, 0x65, 0x78, 0x65, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x65, - 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x48, 0x00, 0x52, 0x04, 0x65, 0x78, 0x65, 0x63, 0x42, 0x15, 0x0a, 0x13, 0x68, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x22, 0xba, 0x01, 0x0a, 0x15, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, - 0x18, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x52, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x36, - 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x44, 0x0a, 0x14, 0x54, 0x43, 0x50, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, - 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, - 0x73, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x31, 0x0a, 0x15, - 0x45, 0x78, 0x65, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x42, - 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_networking_v1beta1_workload_group_proto_rawDescOnce sync.Once - file_networking_v1beta1_workload_group_proto_rawDescData = file_networking_v1beta1_workload_group_proto_rawDesc -) - -func file_networking_v1beta1_workload_group_proto_rawDescGZIP() []byte { - file_networking_v1beta1_workload_group_proto_rawDescOnce.Do(func() { - file_networking_v1beta1_workload_group_proto_rawDescData = protoimpl.X.CompressGZIP(file_networking_v1beta1_workload_group_proto_rawDescData) - }) - return file_networking_v1beta1_workload_group_proto_rawDescData -} - -var file_networking_v1beta1_workload_group_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_networking_v1beta1_workload_group_proto_goTypes = []interface{}{ - (*WorkloadGroup)(nil), // 0: istio.networking.v1beta1.WorkloadGroup - (*ReadinessProbe)(nil), // 1: istio.networking.v1beta1.ReadinessProbe - (*HTTPHealthCheckConfig)(nil), // 2: istio.networking.v1beta1.HTTPHealthCheckConfig - (*HTTPHeader)(nil), // 3: istio.networking.v1beta1.HTTPHeader - (*TCPHealthCheckConfig)(nil), // 4: istio.networking.v1beta1.TCPHealthCheckConfig - (*ExecHealthCheckConfig)(nil), // 5: istio.networking.v1beta1.ExecHealthCheckConfig - (*WorkloadGroup_ObjectMeta)(nil), // 6: istio.networking.v1beta1.WorkloadGroup.ObjectMeta - nil, // 7: istio.networking.v1beta1.WorkloadGroup.ObjectMeta.LabelsEntry - nil, // 8: istio.networking.v1beta1.WorkloadGroup.ObjectMeta.AnnotationsEntry - (*WorkloadEntry)(nil), // 9: istio.networking.v1beta1.WorkloadEntry -} -var file_networking_v1beta1_workload_group_proto_depIdxs = []int32{ - 6, // 0: istio.networking.v1beta1.WorkloadGroup.metadata:type_name -> istio.networking.v1beta1.WorkloadGroup.ObjectMeta - 9, // 1: istio.networking.v1beta1.WorkloadGroup.template:type_name -> istio.networking.v1beta1.WorkloadEntry - 1, // 2: istio.networking.v1beta1.WorkloadGroup.probe:type_name -> istio.networking.v1beta1.ReadinessProbe - 2, // 3: istio.networking.v1beta1.ReadinessProbe.http_get:type_name -> istio.networking.v1beta1.HTTPHealthCheckConfig - 4, // 4: istio.networking.v1beta1.ReadinessProbe.tcp_socket:type_name -> istio.networking.v1beta1.TCPHealthCheckConfig - 5, // 5: istio.networking.v1beta1.ReadinessProbe.exec:type_name -> istio.networking.v1beta1.ExecHealthCheckConfig - 3, // 6: istio.networking.v1beta1.HTTPHealthCheckConfig.http_headers:type_name -> istio.networking.v1beta1.HTTPHeader - 7, // 7: istio.networking.v1beta1.WorkloadGroup.ObjectMeta.labels:type_name -> istio.networking.v1beta1.WorkloadGroup.ObjectMeta.LabelsEntry - 8, // 8: istio.networking.v1beta1.WorkloadGroup.ObjectMeta.annotations:type_name -> istio.networking.v1beta1.WorkloadGroup.ObjectMeta.AnnotationsEntry - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name -} - -func init() { file_networking_v1beta1_workload_group_proto_init() } -func file_networking_v1beta1_workload_group_proto_init() { - if File_networking_v1beta1_workload_group_proto != nil { - return - } - file_networking_v1beta1_workload_entry_proto_init() - if !protoimpl.UnsafeEnabled { - file_networking_v1beta1_workload_group_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadGroup); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReadinessProbe); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPHealthCheckConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPHeader); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TCPHealthCheckConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExecHealthCheckConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadGroup_ObjectMeta); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_networking_v1beta1_workload_group_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*ReadinessProbe_HttpGet)(nil), - (*ReadinessProbe_TcpSocket)(nil), - (*ReadinessProbe_Exec)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_networking_v1beta1_workload_group_proto_rawDesc, - NumEnums: 0, - NumMessages: 9, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_networking_v1beta1_workload_group_proto_goTypes, - DependencyIndexes: file_networking_v1beta1_workload_group_proto_depIdxs, - MessageInfos: file_networking_v1beta1_workload_group_proto_msgTypes, - }.Build() - File_networking_v1beta1_workload_group_proto = out.File - file_networking_v1beta1_workload_group_proto_rawDesc = nil - file_networking_v1beta1_workload_group_proto_goTypes = nil - file_networking_v1beta1_workload_group_proto_depIdxs = nil -} diff --git a/gen/proto/openmetrics/prometheus.pb.go b/gen/proto/openmetrics/prometheus.pb.go deleted file mode 100644 index 81531d4..0000000 --- a/gen/proto/openmetrics/prometheus.pb.go +++ /dev/null @@ -1,1834 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: openmetrics/prometheus.proto - -// The OpenMetrics protobuf schema which defines the protobuf wire -// format. -// Ensure to interpret "required" as semantically required for a valid -// message. -// All string fields MUST be UTF-8 encoded strings. - -package openmetrics - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// The type of a Metric. -type MetricType int32 - -const ( - // Unknown must use unknown MetricPoint values. - MetricType_UNKNOWN MetricType = 0 - // Gauge must use gauge MetricPoint values. - MetricType_GAUGE MetricType = 1 - // Counter must use counter MetricPoint values. - MetricType_COUNTER MetricType = 2 - // State set must use state set MetricPoint values. - MetricType_STATE_SET MetricType = 3 - // Info must use info MetricPoint values. - MetricType_INFO MetricType = 4 - // Histogram must use histogram value MetricPoint values. - MetricType_HISTOGRAM MetricType = 5 - // Gauge histogram must use histogram value MetricPoint values. - MetricType_GAUGE_HISTOGRAM MetricType = 6 - // Summary quantiles must use summary value MetricPoint values. - MetricType_SUMMARY MetricType = 7 -) - -// Enum value maps for MetricType. -var ( - MetricType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "GAUGE", - 2: "COUNTER", - 3: "STATE_SET", - 4: "INFO", - 5: "HISTOGRAM", - 6: "GAUGE_HISTOGRAM", - 7: "SUMMARY", - } - MetricType_value = map[string]int32{ - "UNKNOWN": 0, - "GAUGE": 1, - "COUNTER": 2, - "STATE_SET": 3, - "INFO": 4, - "HISTOGRAM": 5, - "GAUGE_HISTOGRAM": 6, - "SUMMARY": 7, - } -) - -func (x MetricType) Enum() *MetricType { - p := new(MetricType) - *p = x - return p -} - -func (x MetricType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (MetricType) Descriptor() protoreflect.EnumDescriptor { - return file_openmetrics_prometheus_proto_enumTypes[0].Descriptor() -} - -func (MetricType) Type() protoreflect.EnumType { - return &file_openmetrics_prometheus_proto_enumTypes[0] -} - -func (x MetricType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use MetricType.Descriptor instead. -func (MetricType) EnumDescriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{0} -} - -// The top-level container type that is encoded and sent over the wire. -type MetricSet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Each MetricFamily has one or more MetricPoints for a single Metric. - MetricFamilies []*MetricFamily `protobuf:"bytes,1,rep,name=metric_families,json=metricFamilies,proto3" json:"metric_families,omitempty"` -} - -func (x *MetricSet) Reset() { - *x = MetricSet{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MetricSet) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetricSet) ProtoMessage() {} - -func (x *MetricSet) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetricSet.ProtoReflect.Descriptor instead. -func (*MetricSet) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{0} -} - -func (x *MetricSet) GetMetricFamilies() []*MetricFamily { - if x != nil { - return x.MetricFamilies - } - return nil -} - -// One or more Metrics for a single MetricFamily, where each Metric -// has one or more MetricPoints. -type MetricFamily struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Optional. - Type MetricType `protobuf:"varint,2,opt,name=type,proto3,enum=openmetrics.MetricType" json:"type,omitempty"` - // Optional. - Unit string `protobuf:"bytes,3,opt,name=unit,proto3" json:"unit,omitempty"` - // Optional. - Help string `protobuf:"bytes,4,opt,name=help,proto3" json:"help,omitempty"` - // Optional. - Metrics []*Metric `protobuf:"bytes,5,rep,name=metrics,proto3" json:"metrics,omitempty"` -} - -func (x *MetricFamily) Reset() { - *x = MetricFamily{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MetricFamily) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetricFamily) ProtoMessage() {} - -func (x *MetricFamily) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetricFamily.ProtoReflect.Descriptor instead. -func (*MetricFamily) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{1} -} - -func (x *MetricFamily) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *MetricFamily) GetType() MetricType { - if x != nil { - return x.Type - } - return MetricType_UNKNOWN -} - -func (x *MetricFamily) GetUnit() string { - if x != nil { - return x.Unit - } - return "" -} - -func (x *MetricFamily) GetHelp() string { - if x != nil { - return x.Help - } - return "" -} - -func (x *MetricFamily) GetMetrics() []*Metric { - if x != nil { - return x.Metrics - } - return nil -} - -// A single metric with a unique set of labels within a metric family. -type Metric struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. - Labels []*Label `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"` - // Optional. - MetricPoints []*MetricPoint `protobuf:"bytes,2,rep,name=metric_points,json=metricPoints,proto3" json:"metric_points,omitempty"` -} - -func (x *Metric) Reset() { - *x = Metric{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Metric) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Metric) ProtoMessage() {} - -func (x *Metric) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Metric.ProtoReflect.Descriptor instead. -func (*Metric) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{2} -} - -func (x *Metric) GetLabels() []*Label { - if x != nil { - return x.Labels - } - return nil -} - -func (x *Metric) GetMetricPoints() []*MetricPoint { - if x != nil { - return x.MetricPoints - } - return nil -} - -// A name-value pair. These are used in multiple places: identifying -// timeseries, value of INFO metrics, and exemplars in Histograms. -type Label struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Required. - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Label) Reset() { - *x = Label{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Label) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Label) ProtoMessage() {} - -func (x *Label) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Label.ProtoReflect.Descriptor instead. -func (*Label) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{3} -} - -func (x *Label) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Label) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -// A MetricPoint in a Metric. -type MetricPoint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - // - // Types that are assignable to Value: - // *MetricPoint_UnknownValue - // *MetricPoint_GaugeValue - // *MetricPoint_CounterValue - // *MetricPoint_HistogramValue - // *MetricPoint_StateSetValue - // *MetricPoint_InfoValue - // *MetricPoint_SummaryValue - Value isMetricPoint_Value `protobuf_oneof:"value"` - // Optional. - Timestamp *timestamppb.Timestamp `protobuf:"bytes,8,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -} - -func (x *MetricPoint) Reset() { - *x = MetricPoint{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MetricPoint) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MetricPoint) ProtoMessage() {} - -func (x *MetricPoint) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MetricPoint.ProtoReflect.Descriptor instead. -func (*MetricPoint) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{4} -} - -func (m *MetricPoint) GetValue() isMetricPoint_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *MetricPoint) GetUnknownValue() *UnknownValue { - if x, ok := x.GetValue().(*MetricPoint_UnknownValue); ok { - return x.UnknownValue - } - return nil -} - -func (x *MetricPoint) GetGaugeValue() *GaugeValue { - if x, ok := x.GetValue().(*MetricPoint_GaugeValue); ok { - return x.GaugeValue - } - return nil -} - -func (x *MetricPoint) GetCounterValue() *CounterValue { - if x, ok := x.GetValue().(*MetricPoint_CounterValue); ok { - return x.CounterValue - } - return nil -} - -func (x *MetricPoint) GetHistogramValue() *HistogramValue { - if x, ok := x.GetValue().(*MetricPoint_HistogramValue); ok { - return x.HistogramValue - } - return nil -} - -func (x *MetricPoint) GetStateSetValue() *StateSetValue { - if x, ok := x.GetValue().(*MetricPoint_StateSetValue); ok { - return x.StateSetValue - } - return nil -} - -func (x *MetricPoint) GetInfoValue() *InfoValue { - if x, ok := x.GetValue().(*MetricPoint_InfoValue); ok { - return x.InfoValue - } - return nil -} - -func (x *MetricPoint) GetSummaryValue() *SummaryValue { - if x, ok := x.GetValue().(*MetricPoint_SummaryValue); ok { - return x.SummaryValue - } - return nil -} - -func (x *MetricPoint) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -type isMetricPoint_Value interface { - isMetricPoint_Value() -} - -type MetricPoint_UnknownValue struct { - UnknownValue *UnknownValue `protobuf:"bytes,1,opt,name=unknown_value,json=unknownValue,proto3,oneof"` -} - -type MetricPoint_GaugeValue struct { - GaugeValue *GaugeValue `protobuf:"bytes,2,opt,name=gauge_value,json=gaugeValue,proto3,oneof"` -} - -type MetricPoint_CounterValue struct { - CounterValue *CounterValue `protobuf:"bytes,3,opt,name=counter_value,json=counterValue,proto3,oneof"` -} - -type MetricPoint_HistogramValue struct { - HistogramValue *HistogramValue `protobuf:"bytes,4,opt,name=histogram_value,json=histogramValue,proto3,oneof"` -} - -type MetricPoint_StateSetValue struct { - StateSetValue *StateSetValue `protobuf:"bytes,5,opt,name=state_set_value,json=stateSetValue,proto3,oneof"` -} - -type MetricPoint_InfoValue struct { - InfoValue *InfoValue `protobuf:"bytes,6,opt,name=info_value,json=infoValue,proto3,oneof"` -} - -type MetricPoint_SummaryValue struct { - SummaryValue *SummaryValue `protobuf:"bytes,7,opt,name=summary_value,json=summaryValue,proto3,oneof"` -} - -func (*MetricPoint_UnknownValue) isMetricPoint_Value() {} - -func (*MetricPoint_GaugeValue) isMetricPoint_Value() {} - -func (*MetricPoint_CounterValue) isMetricPoint_Value() {} - -func (*MetricPoint_HistogramValue) isMetricPoint_Value() {} - -func (*MetricPoint_StateSetValue) isMetricPoint_Value() {} - -func (*MetricPoint_InfoValue) isMetricPoint_Value() {} - -func (*MetricPoint_SummaryValue) isMetricPoint_Value() {} - -// Value for UNKNOWN MetricPoint. -type UnknownValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - // - // Types that are assignable to Value: - // *UnknownValue_DoubleValue - // *UnknownValue_IntValue - Value isUnknownValue_Value `protobuf_oneof:"value"` -} - -func (x *UnknownValue) Reset() { - *x = UnknownValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UnknownValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UnknownValue) ProtoMessage() {} - -func (x *UnknownValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UnknownValue.ProtoReflect.Descriptor instead. -func (*UnknownValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{5} -} - -func (m *UnknownValue) GetValue() isUnknownValue_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *UnknownValue) GetDoubleValue() float64 { - if x, ok := x.GetValue().(*UnknownValue_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *UnknownValue) GetIntValue() int64 { - if x, ok := x.GetValue().(*UnknownValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -type isUnknownValue_Value interface { - isUnknownValue_Value() -} - -type UnknownValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,1,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type UnknownValue_IntValue struct { - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*UnknownValue_DoubleValue) isUnknownValue_Value() {} - -func (*UnknownValue_IntValue) isUnknownValue_Value() {} - -// Value for GAUGE MetricPoint. -type GaugeValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - // - // Types that are assignable to Value: - // *GaugeValue_DoubleValue - // *GaugeValue_IntValue - Value isGaugeValue_Value `protobuf_oneof:"value"` -} - -func (x *GaugeValue) Reset() { - *x = GaugeValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GaugeValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GaugeValue) ProtoMessage() {} - -func (x *GaugeValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GaugeValue.ProtoReflect.Descriptor instead. -func (*GaugeValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{6} -} - -func (m *GaugeValue) GetValue() isGaugeValue_Value { - if m != nil { - return m.Value - } - return nil -} - -func (x *GaugeValue) GetDoubleValue() float64 { - if x, ok := x.GetValue().(*GaugeValue_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *GaugeValue) GetIntValue() int64 { - if x, ok := x.GetValue().(*GaugeValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -type isGaugeValue_Value interface { - isGaugeValue_Value() -} - -type GaugeValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,1,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type GaugeValue_IntValue struct { - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*GaugeValue_DoubleValue) isGaugeValue_Value() {} - -func (*GaugeValue_IntValue) isGaugeValue_Value() {} - -// Value for COUNTER MetricPoint. -type CounterValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - // - // Types that are assignable to Total: - // *CounterValue_DoubleValue - // *CounterValue_IntValue - Total isCounterValue_Total `protobuf_oneof:"total"` - // The time values began being collected for this counter. - // Optional. - Created *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created,proto3" json:"created,omitempty"` - // Optional. - Exemplar *Exemplar `protobuf:"bytes,4,opt,name=exemplar,proto3" json:"exemplar,omitempty"` -} - -func (x *CounterValue) Reset() { - *x = CounterValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CounterValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CounterValue) ProtoMessage() {} - -func (x *CounterValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CounterValue.ProtoReflect.Descriptor instead. -func (*CounterValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{7} -} - -func (m *CounterValue) GetTotal() isCounterValue_Total { - if m != nil { - return m.Total - } - return nil -} - -func (x *CounterValue) GetDoubleValue() float64 { - if x, ok := x.GetTotal().(*CounterValue_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *CounterValue) GetIntValue() uint64 { - if x, ok := x.GetTotal().(*CounterValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (x *CounterValue) GetCreated() *timestamppb.Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *CounterValue) GetExemplar() *Exemplar { - if x != nil { - return x.Exemplar - } - return nil -} - -type isCounterValue_Total interface { - isCounterValue_Total() -} - -type CounterValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,1,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type CounterValue_IntValue struct { - IntValue uint64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*CounterValue_DoubleValue) isCounterValue_Total() {} - -func (*CounterValue_IntValue) isCounterValue_Total() {} - -// Value for HISTOGRAM or GAUGE_HISTOGRAM MetricPoint. -type HistogramValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. - // - // Types that are assignable to Sum: - // *HistogramValue_DoubleValue - // *HistogramValue_IntValue - Sum isHistogramValue_Sum `protobuf_oneof:"sum"` - // Optional. - Count uint64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` - // The time values began being collected for this histogram. - // Optional. - Created *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` - // Optional. - Buckets []*HistogramValue_Bucket `protobuf:"bytes,5,rep,name=buckets,proto3" json:"buckets,omitempty"` -} - -func (x *HistogramValue) Reset() { - *x = HistogramValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HistogramValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HistogramValue) ProtoMessage() {} - -func (x *HistogramValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HistogramValue.ProtoReflect.Descriptor instead. -func (*HistogramValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{8} -} - -func (m *HistogramValue) GetSum() isHistogramValue_Sum { - if m != nil { - return m.Sum - } - return nil -} - -func (x *HistogramValue) GetDoubleValue() float64 { - if x, ok := x.GetSum().(*HistogramValue_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *HistogramValue) GetIntValue() int64 { - if x, ok := x.GetSum().(*HistogramValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (x *HistogramValue) GetCount() uint64 { - if x != nil { - return x.Count - } - return 0 -} - -func (x *HistogramValue) GetCreated() *timestamppb.Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *HistogramValue) GetBuckets() []*HistogramValue_Bucket { - if x != nil { - return x.Buckets - } - return nil -} - -type isHistogramValue_Sum interface { - isHistogramValue_Sum() -} - -type HistogramValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,1,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type HistogramValue_IntValue struct { - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*HistogramValue_DoubleValue) isHistogramValue_Sum() {} - -func (*HistogramValue_IntValue) isHistogramValue_Sum() {} - -type Exemplar struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Value float64 `protobuf:"fixed64,1,opt,name=value,proto3" json:"value,omitempty"` - // Optional. - Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // Labels are additional information about the exemplar value - // (e.g. trace id). - // Optional. - Label []*Label `protobuf:"bytes,3,rep,name=label,proto3" json:"label,omitempty"` -} - -func (x *Exemplar) Reset() { - *x = Exemplar{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Exemplar) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Exemplar) ProtoMessage() {} - -func (x *Exemplar) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Exemplar.ProtoReflect.Descriptor instead. -func (*Exemplar) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{9} -} - -func (x *Exemplar) GetValue() float64 { - if x != nil { - return x.Value - } - return 0 -} - -func (x *Exemplar) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *Exemplar) GetLabel() []*Label { - if x != nil { - return x.Label - } - return nil -} - -// Value for STATE_SET MetricPoint. -type StateSetValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. - States []*StateSetValue_State `protobuf:"bytes,1,rep,name=states,proto3" json:"states,omitempty"` -} - -func (x *StateSetValue) Reset() { - *x = StateSetValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StateSetValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StateSetValue) ProtoMessage() {} - -func (x *StateSetValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StateSetValue.ProtoReflect.Descriptor instead. -func (*StateSetValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{10} -} - -func (x *StateSetValue) GetStates() []*StateSetValue_State { - if x != nil { - return x.States - } - return nil -} - -// Value for INFO MetricPoint. -type InfoValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. - Info []*Label `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` -} - -func (x *InfoValue) Reset() { - *x = InfoValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *InfoValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*InfoValue) ProtoMessage() {} - -func (x *InfoValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use InfoValue.ProtoReflect.Descriptor instead. -func (*InfoValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{11} -} - -func (x *InfoValue) GetInfo() []*Label { - if x != nil { - return x.Info - } - return nil -} - -// Value for SUMMARY MetricPoint. -type SummaryValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Optional. - // - // Types that are assignable to Sum: - // *SummaryValue_DoubleValue - // *SummaryValue_IntValue - Sum isSummaryValue_Sum `protobuf_oneof:"sum"` - // Optional. - Count uint64 `protobuf:"varint,3,opt,name=count,proto3" json:"count,omitempty"` - // The time sum and count values began being collected for this summary. - // Optional. - Created *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=created,proto3" json:"created,omitempty"` - // Optional. - Quantile []*SummaryValue_Quantile `protobuf:"bytes,5,rep,name=quantile,proto3" json:"quantile,omitempty"` -} - -func (x *SummaryValue) Reset() { - *x = SummaryValue{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SummaryValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SummaryValue) ProtoMessage() {} - -func (x *SummaryValue) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SummaryValue.ProtoReflect.Descriptor instead. -func (*SummaryValue) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{12} -} - -func (m *SummaryValue) GetSum() isSummaryValue_Sum { - if m != nil { - return m.Sum - } - return nil -} - -func (x *SummaryValue) GetDoubleValue() float64 { - if x, ok := x.GetSum().(*SummaryValue_DoubleValue); ok { - return x.DoubleValue - } - return 0 -} - -func (x *SummaryValue) GetIntValue() int64 { - if x, ok := x.GetSum().(*SummaryValue_IntValue); ok { - return x.IntValue - } - return 0 -} - -func (x *SummaryValue) GetCount() uint64 { - if x != nil { - return x.Count - } - return 0 -} - -func (x *SummaryValue) GetCreated() *timestamppb.Timestamp { - if x != nil { - return x.Created - } - return nil -} - -func (x *SummaryValue) GetQuantile() []*SummaryValue_Quantile { - if x != nil { - return x.Quantile - } - return nil -} - -type isSummaryValue_Sum interface { - isSummaryValue_Sum() -} - -type SummaryValue_DoubleValue struct { - DoubleValue float64 `protobuf:"fixed64,1,opt,name=double_value,json=doubleValue,proto3,oneof"` -} - -type SummaryValue_IntValue struct { - IntValue int64 `protobuf:"varint,2,opt,name=int_value,json=intValue,proto3,oneof"` -} - -func (*SummaryValue_DoubleValue) isSummaryValue_Sum() {} - -func (*SummaryValue_IntValue) isSummaryValue_Sum() {} - -// Bucket is the number of values for a bucket in the histogram -// with an optional exemplar. -type HistogramValue_Bucket struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Count uint64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` - // Optional. - UpperBound float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound,proto3" json:"upper_bound,omitempty"` - // Optional. - Exemplar *Exemplar `protobuf:"bytes,3,opt,name=exemplar,proto3" json:"exemplar,omitempty"` -} - -func (x *HistogramValue_Bucket) Reset() { - *x = HistogramValue_Bucket{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HistogramValue_Bucket) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HistogramValue_Bucket) ProtoMessage() {} - -func (x *HistogramValue_Bucket) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HistogramValue_Bucket.ProtoReflect.Descriptor instead. -func (*HistogramValue_Bucket) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *HistogramValue_Bucket) GetCount() uint64 { - if x != nil { - return x.Count - } - return 0 -} - -func (x *HistogramValue_Bucket) GetUpperBound() float64 { - if x != nil { - return x.UpperBound - } - return 0 -} - -func (x *HistogramValue_Bucket) GetExemplar() *Exemplar { - if x != nil { - return x.Exemplar - } - return nil -} - -type StateSetValue_State struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - // Required. - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` -} - -func (x *StateSetValue_State) Reset() { - *x = StateSetValue_State{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StateSetValue_State) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StateSetValue_State) ProtoMessage() {} - -func (x *StateSetValue_State) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StateSetValue_State.ProtoReflect.Descriptor instead. -func (*StateSetValue_State) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{10, 0} -} - -func (x *StateSetValue_State) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *StateSetValue_State) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -type SummaryValue_Quantile struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Required. - Quantile float64 `protobuf:"fixed64,1,opt,name=quantile,proto3" json:"quantile,omitempty"` - // Required. - Value float64 `protobuf:"fixed64,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *SummaryValue_Quantile) Reset() { - *x = SummaryValue_Quantile{} - if protoimpl.UnsafeEnabled { - mi := &file_openmetrics_prometheus_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SummaryValue_Quantile) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SummaryValue_Quantile) ProtoMessage() {} - -func (x *SummaryValue_Quantile) ProtoReflect() protoreflect.Message { - mi := &file_openmetrics_prometheus_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SummaryValue_Quantile.ProtoReflect.Descriptor instead. -func (*SummaryValue_Quantile) Descriptor() ([]byte, []int) { - return file_openmetrics_prometheus_proto_rawDescGZIP(), []int{12, 0} -} - -func (x *SummaryValue_Quantile) GetQuantile() float64 { - if x != nil { - return x.Quantile - } - return 0 -} - -func (x *SummaryValue_Quantile) GetValue() float64 { - if x != nil { - return x.Value - } - return 0 -} - -var File_openmetrics_prometheus_proto protoreflect.FileDescriptor - -var file_openmetrics_prometheus_proto_rawDesc = []byte{ - 0x0a, 0x1c, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2f, 0x70, 0x72, - 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, - 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4f, 0x0a, 0x09, - 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x74, 0x12, 0x42, 0x0a, 0x0f, 0x6d, 0x65, 0x74, - 0x72, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0e, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x22, 0xa6, 0x01, - 0x0a, 0x0c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x75, 0x6e, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, - 0x6e, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x68, 0x65, 0x6c, 0x70, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x73, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x12, 0x2a, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0d, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0c, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0x31, 0x0a, 0x05, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, - 0x04, 0x0a, 0x0b, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x40, - 0x0a, 0x0d, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x0c, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x3a, 0x0a, 0x0b, 0x67, 0x61, 0x75, 0x67, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x73, 0x2e, 0x47, 0x61, 0x75, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, - 0x52, 0x0a, 0x67, 0x61, 0x75, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0d, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, - 0x73, 0x2e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, - 0x52, 0x0c, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, - 0x0a, 0x0f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x44, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0d, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x37, 0x0a, 0x0a, - 0x69, 0x6e, 0x66, 0x6f, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x49, - 0x6e, 0x66, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x69, 0x6e, 0x66, 0x6f, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x73, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, - 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x75, 0x6d, 0x6d, 0x61, - 0x72, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x5b, 0x0a, 0x0c, 0x55, 0x6e, - 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, - 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, - 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x59, 0x0a, 0x0a, 0x47, 0x61, 0x75, 0x67, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, - 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xc4, 0x01, 0x0a, 0x0c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, - 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x08, 0x69, - 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x31, 0x0a, - 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x45, 0x78, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, - 0x42, 0x07, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x22, 0xd9, 0x02, 0x0a, 0x0e, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, - 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x07, - 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x42, 0x75, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x07, 0x62, 0x75, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x1a, 0x72, 0x0a, 0x06, 0x42, 0x75, - 0x63, 0x6b, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, - 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0a, 0x75, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x65, - 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x72, 0x52, 0x08, 0x65, 0x78, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x72, 0x42, 0x05, - 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x22, 0x84, 0x01, 0x0a, 0x08, 0x45, 0x78, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x28, 0x0a, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x22, 0x80, 0x01, 0x0a, - 0x0d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x1a, 0x35, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x33, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x26, 0x0a, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6f, 0x70, 0x65, - 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x04, - 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xa3, 0x02, 0x0a, 0x0c, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, - 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x09, 0x69, 0x6e, - 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, - 0x08, 0x69, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0x34, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, - 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6f, 0x70, 0x65, 0x6e, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x2e, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x52, 0x08, 0x71, 0x75, 0x61, - 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x1a, 0x3c, 0x0a, 0x08, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x05, 0x0a, 0x03, 0x73, 0x75, 0x6d, 0x2a, 0x7b, 0x0a, 0x0a, 0x4d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x47, 0x41, 0x55, 0x47, 0x45, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x02, 0x12, 0x0d, 0x0a, - 0x09, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, - 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x49, 0x53, 0x54, 0x4f, 0x47, - 0x52, 0x41, 0x4d, 0x10, 0x05, 0x12, 0x13, 0x0a, 0x0f, 0x47, 0x41, 0x55, 0x47, 0x45, 0x5f, 0x48, - 0x49, 0x53, 0x54, 0x4f, 0x47, 0x52, 0x41, 0x4d, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x55, - 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x75, 0x67, - 0x61, 0x74, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x70, - 0x65, 0x6e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_openmetrics_prometheus_proto_rawDescOnce sync.Once - file_openmetrics_prometheus_proto_rawDescData = file_openmetrics_prometheus_proto_rawDesc -) - -func file_openmetrics_prometheus_proto_rawDescGZIP() []byte { - file_openmetrics_prometheus_proto_rawDescOnce.Do(func() { - file_openmetrics_prometheus_proto_rawDescData = protoimpl.X.CompressGZIP(file_openmetrics_prometheus_proto_rawDescData) - }) - return file_openmetrics_prometheus_proto_rawDescData -} - -var file_openmetrics_prometheus_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_openmetrics_prometheus_proto_msgTypes = make([]protoimpl.MessageInfo, 16) -var file_openmetrics_prometheus_proto_goTypes = []interface{}{ - (MetricType)(0), // 0: openmetrics.MetricType - (*MetricSet)(nil), // 1: openmetrics.MetricSet - (*MetricFamily)(nil), // 2: openmetrics.MetricFamily - (*Metric)(nil), // 3: openmetrics.Metric - (*Label)(nil), // 4: openmetrics.Label - (*MetricPoint)(nil), // 5: openmetrics.MetricPoint - (*UnknownValue)(nil), // 6: openmetrics.UnknownValue - (*GaugeValue)(nil), // 7: openmetrics.GaugeValue - (*CounterValue)(nil), // 8: openmetrics.CounterValue - (*HistogramValue)(nil), // 9: openmetrics.HistogramValue - (*Exemplar)(nil), // 10: openmetrics.Exemplar - (*StateSetValue)(nil), // 11: openmetrics.StateSetValue - (*InfoValue)(nil), // 12: openmetrics.InfoValue - (*SummaryValue)(nil), // 13: openmetrics.SummaryValue - (*HistogramValue_Bucket)(nil), // 14: openmetrics.HistogramValue.Bucket - (*StateSetValue_State)(nil), // 15: openmetrics.StateSetValue.State - (*SummaryValue_Quantile)(nil), // 16: openmetrics.SummaryValue.Quantile - (*timestamppb.Timestamp)(nil), // 17: google.protobuf.Timestamp -} -var file_openmetrics_prometheus_proto_depIdxs = []int32{ - 2, // 0: openmetrics.MetricSet.metric_families:type_name -> openmetrics.MetricFamily - 0, // 1: openmetrics.MetricFamily.type:type_name -> openmetrics.MetricType - 3, // 2: openmetrics.MetricFamily.metrics:type_name -> openmetrics.Metric - 4, // 3: openmetrics.Metric.labels:type_name -> openmetrics.Label - 5, // 4: openmetrics.Metric.metric_points:type_name -> openmetrics.MetricPoint - 6, // 5: openmetrics.MetricPoint.unknown_value:type_name -> openmetrics.UnknownValue - 7, // 6: openmetrics.MetricPoint.gauge_value:type_name -> openmetrics.GaugeValue - 8, // 7: openmetrics.MetricPoint.counter_value:type_name -> openmetrics.CounterValue - 9, // 8: openmetrics.MetricPoint.histogram_value:type_name -> openmetrics.HistogramValue - 11, // 9: openmetrics.MetricPoint.state_set_value:type_name -> openmetrics.StateSetValue - 12, // 10: openmetrics.MetricPoint.info_value:type_name -> openmetrics.InfoValue - 13, // 11: openmetrics.MetricPoint.summary_value:type_name -> openmetrics.SummaryValue - 17, // 12: openmetrics.MetricPoint.timestamp:type_name -> google.protobuf.Timestamp - 17, // 13: openmetrics.CounterValue.created:type_name -> google.protobuf.Timestamp - 10, // 14: openmetrics.CounterValue.exemplar:type_name -> openmetrics.Exemplar - 17, // 15: openmetrics.HistogramValue.created:type_name -> google.protobuf.Timestamp - 14, // 16: openmetrics.HistogramValue.buckets:type_name -> openmetrics.HistogramValue.Bucket - 17, // 17: openmetrics.Exemplar.timestamp:type_name -> google.protobuf.Timestamp - 4, // 18: openmetrics.Exemplar.label:type_name -> openmetrics.Label - 15, // 19: openmetrics.StateSetValue.states:type_name -> openmetrics.StateSetValue.State - 4, // 20: openmetrics.InfoValue.info:type_name -> openmetrics.Label - 17, // 21: openmetrics.SummaryValue.created:type_name -> google.protobuf.Timestamp - 16, // 22: openmetrics.SummaryValue.quantile:type_name -> openmetrics.SummaryValue.Quantile - 10, // 23: openmetrics.HistogramValue.Bucket.exemplar:type_name -> openmetrics.Exemplar - 24, // [24:24] is the sub-list for method output_type - 24, // [24:24] is the sub-list for method input_type - 24, // [24:24] is the sub-list for extension type_name - 24, // [24:24] is the sub-list for extension extendee - 0, // [0:24] is the sub-list for field type_name -} - -func init() { file_openmetrics_prometheus_proto_init() } -func file_openmetrics_prometheus_proto_init() { - if File_openmetrics_prometheus_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_openmetrics_prometheus_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetricSet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetricFamily); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metric); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Label); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MetricPoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnknownValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GaugeValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CounterValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HistogramValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Exemplar); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StateSetValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InfoValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SummaryValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HistogramValue_Bucket); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StateSetValue_State); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_openmetrics_prometheus_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SummaryValue_Quantile); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_openmetrics_prometheus_proto_msgTypes[4].OneofWrappers = []interface{}{ - (*MetricPoint_UnknownValue)(nil), - (*MetricPoint_GaugeValue)(nil), - (*MetricPoint_CounterValue)(nil), - (*MetricPoint_HistogramValue)(nil), - (*MetricPoint_StateSetValue)(nil), - (*MetricPoint_InfoValue)(nil), - (*MetricPoint_SummaryValue)(nil), - } - file_openmetrics_prometheus_proto_msgTypes[5].OneofWrappers = []interface{}{ - (*UnknownValue_DoubleValue)(nil), - (*UnknownValue_IntValue)(nil), - } - file_openmetrics_prometheus_proto_msgTypes[6].OneofWrappers = []interface{}{ - (*GaugeValue_DoubleValue)(nil), - (*GaugeValue_IntValue)(nil), - } - file_openmetrics_prometheus_proto_msgTypes[7].OneofWrappers = []interface{}{ - (*CounterValue_DoubleValue)(nil), - (*CounterValue_IntValue)(nil), - } - file_openmetrics_prometheus_proto_msgTypes[8].OneofWrappers = []interface{}{ - (*HistogramValue_DoubleValue)(nil), - (*HistogramValue_IntValue)(nil), - } - file_openmetrics_prometheus_proto_msgTypes[12].OneofWrappers = []interface{}{ - (*SummaryValue_DoubleValue)(nil), - (*SummaryValue_IntValue)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_openmetrics_prometheus_proto_rawDesc, - NumEnums: 1, - NumMessages: 16, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_openmetrics_prometheus_proto_goTypes, - DependencyIndexes: file_openmetrics_prometheus_proto_depIdxs, - EnumInfos: file_openmetrics_prometheus_proto_enumTypes, - MessageInfos: file_openmetrics_prometheus_proto_msgTypes, - }.Build() - File_openmetrics_prometheus_proto = out.File - file_openmetrics_prometheus_proto_rawDesc = nil - file_openmetrics_prometheus_proto_goTypes = nil - file_openmetrics_prometheus_proto_depIdxs = nil -} diff --git a/gen/proto/proto/echo.pb.go b/gen/proto/proto/echo.pb.go deleted file mode 100644 index 23a3cf5..0000000 --- a/gen/proto/proto/echo.pb.go +++ /dev/null @@ -1,712 +0,0 @@ -// Copyright Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: proto/echo.proto - -// Generate with protoc --go_out=. echo.proto -I /work/common-protos/ -I. - -package proto - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type EchoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EchoRequest) Reset() { - *x = EchoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EchoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EchoRequest) ProtoMessage() {} - -func (x *EchoRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EchoRequest.ProtoReflect.Descriptor instead. -func (*EchoRequest) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{0} -} - -func (x *EchoRequest) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type EchoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"` -} - -func (x *EchoResponse) Reset() { - *x = EchoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EchoResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EchoResponse) ProtoMessage() {} - -func (x *EchoResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EchoResponse.ProtoReflect.Descriptor instead. -func (*EchoResponse) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{1} -} - -func (x *EchoResponse) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -type Header struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Header) Reset() { - *x = Header{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Header) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Header) ProtoMessage() {} - -func (x *Header) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Header.ProtoReflect.Descriptor instead. -func (*Header) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{2} -} - -func (x *Header) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *Header) GetValue() string { - if x != nil { - return x.Value - } - return "" -} - -type ForwardEchoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` - Qps int32 `protobuf:"varint,2,opt,name=qps,proto3" json:"qps,omitempty"` - TimeoutMicros int64 `protobuf:"varint,3,opt,name=timeout_micros,json=timeoutMicros,proto3" json:"timeout_micros,omitempty"` - Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` - Headers []*Header `protobuf:"bytes,5,rep,name=headers,proto3" json:"headers,omitempty"` - Message string `protobuf:"bytes,6,opt,name=message,proto3" json:"message,omitempty"` - // Method for the request. Valid only for HTTP - Method string `protobuf:"bytes,9,opt,name=method,proto3" json:"method,omitempty"` - // If true, requests will be sent using h2c prior knowledge - Http2 bool `protobuf:"varint,7,opt,name=http2,proto3" json:"http2,omitempty"` - // If true, requests will be sent using http3 - Http3 bool `protobuf:"varint,15,opt,name=http3,proto3" json:"http3,omitempty"` - // If true, requests will not be sent until magic string is received - ServerFirst bool `protobuf:"varint,8,opt,name=serverFirst,proto3" json:"serverFirst,omitempty"` - // If true, 301 redirects will be followed - FollowRedirects bool `protobuf:"varint,14,opt,name=followRedirects,proto3" json:"followRedirects,omitempty"` - // If non-empty, make the request with the corresponding cert and key. - Cert string `protobuf:"bytes,10,opt,name=cert,proto3" json:"cert,omitempty"` - Key string `protobuf:"bytes,11,opt,name=key,proto3" json:"key,omitempty"` - // If non-empty, verify the server CA - CaCert string `protobuf:"bytes,12,opt,name=caCert,proto3" json:"caCert,omitempty"` - // If non-empty, make the request with the corresponding cert and key file. - CertFile string `protobuf:"bytes,16,opt,name=certFile,proto3" json:"certFile,omitempty"` - KeyFile string `protobuf:"bytes,17,opt,name=keyFile,proto3" json:"keyFile,omitempty"` - // If non-empty, verify the server CA with the ca cert file. - CaCertFile string `protobuf:"bytes,18,opt,name=caCertFile,proto3" json:"caCertFile,omitempty"` - // Skip verifying peer's certificate. - InsecureSkipVerify bool `protobuf:"varint,19,opt,name=insecureSkipVerify,proto3" json:"insecureSkipVerify,omitempty"` - // List of ALPNs to present. If not set, this will be automatically be set based on the protocol - Alpn *Alpn `protobuf:"bytes,13,opt,name=alpn,proto3" json:"alpn,omitempty"` - // Server name (SNI) to present in TLS connections. If not set, Host will be used for http requests. - ServerName string `protobuf:"bytes,20,opt,name=serverName,proto3" json:"serverName,omitempty"` - // Expected response determines what string to look for in the response to validate TCP requests succeeded. - // If not set, defaults to "StatusCode=200" - ExpectedResponse *wrapperspb.StringValue `protobuf:"bytes,21,opt,name=expectedResponse,proto3" json:"expectedResponse,omitempty"` -} - -func (x *ForwardEchoRequest) Reset() { - *x = ForwardEchoRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ForwardEchoRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForwardEchoRequest) ProtoMessage() {} - -func (x *ForwardEchoRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForwardEchoRequest.ProtoReflect.Descriptor instead. -func (*ForwardEchoRequest) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{3} -} - -func (x *ForwardEchoRequest) GetCount() int32 { - if x != nil { - return x.Count - } - return 0 -} - -func (x *ForwardEchoRequest) GetQps() int32 { - if x != nil { - return x.Qps - } - return 0 -} - -func (x *ForwardEchoRequest) GetTimeoutMicros() int64 { - if x != nil { - return x.TimeoutMicros - } - return 0 -} - -func (x *ForwardEchoRequest) GetUrl() string { - if x != nil { - return x.Url - } - return "" -} - -func (x *ForwardEchoRequest) GetHeaders() []*Header { - if x != nil { - return x.Headers - } - return nil -} - -func (x *ForwardEchoRequest) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *ForwardEchoRequest) GetMethod() string { - if x != nil { - return x.Method - } - return "" -} - -func (x *ForwardEchoRequest) GetHttp2() bool { - if x != nil { - return x.Http2 - } - return false -} - -func (x *ForwardEchoRequest) GetHttp3() bool { - if x != nil { - return x.Http3 - } - return false -} - -func (x *ForwardEchoRequest) GetServerFirst() bool { - if x != nil { - return x.ServerFirst - } - return false -} - -func (x *ForwardEchoRequest) GetFollowRedirects() bool { - if x != nil { - return x.FollowRedirects - } - return false -} - -func (x *ForwardEchoRequest) GetCert() string { - if x != nil { - return x.Cert - } - return "" -} - -func (x *ForwardEchoRequest) GetKey() string { - if x != nil { - return x.Key - } - return "" -} - -func (x *ForwardEchoRequest) GetCaCert() string { - if x != nil { - return x.CaCert - } - return "" -} - -func (x *ForwardEchoRequest) GetCertFile() string { - if x != nil { - return x.CertFile - } - return "" -} - -func (x *ForwardEchoRequest) GetKeyFile() string { - if x != nil { - return x.KeyFile - } - return "" -} - -func (x *ForwardEchoRequest) GetCaCertFile() string { - if x != nil { - return x.CaCertFile - } - return "" -} - -func (x *ForwardEchoRequest) GetInsecureSkipVerify() bool { - if x != nil { - return x.InsecureSkipVerify - } - return false -} - -func (x *ForwardEchoRequest) GetAlpn() *Alpn { - if x != nil { - return x.Alpn - } - return nil -} - -func (x *ForwardEchoRequest) GetServerName() string { - if x != nil { - return x.ServerName - } - return "" -} - -func (x *ForwardEchoRequest) GetExpectedResponse() *wrapperspb.StringValue { - if x != nil { - return x.ExpectedResponse - } - return nil -} - -type Alpn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Value []string `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"` -} - -func (x *Alpn) Reset() { - *x = Alpn{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Alpn) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Alpn) ProtoMessage() {} - -func (x *Alpn) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Alpn.ProtoReflect.Descriptor instead. -func (*Alpn) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{4} -} - -func (x *Alpn) GetValue() []string { - if x != nil { - return x.Value - } - return nil -} - -type ForwardEchoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Output []string `protobuf:"bytes,1,rep,name=output,proto3" json:"output,omitempty"` -} - -func (x *ForwardEchoResponse) Reset() { - *x = ForwardEchoResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_proto_echo_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ForwardEchoResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ForwardEchoResponse) ProtoMessage() {} - -func (x *ForwardEchoResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_echo_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ForwardEchoResponse.ProtoReflect.Descriptor instead. -func (*ForwardEchoResponse) Descriptor() ([]byte, []int) { - return file_proto_echo_proto_rawDescGZIP(), []int{5} -} - -func (x *ForwardEchoResponse) GetOutput() []string { - if x != nil { - return x.Output - } - return nil -} - -var File_proto_echo_proto protoreflect.FileDescriptor - -var file_proto_echo_proto_rawDesc = []byte{ - 0x0a, 0x10, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x05, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x27, 0x0a, 0x0b, 0x45, 0x63, 0x68, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x22, 0x28, 0x0a, 0x0c, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x30, 0x0a, 0x06, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x97, - 0x05, 0x0a, 0x12, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x71, - 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x71, 0x70, 0x73, 0x12, 0x25, 0x0a, - 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x4d, 0x69, - 0x63, 0x72, 0x6f, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x27, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x74, 0x74, 0x70, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x68, 0x74, 0x74, 0x70, 0x32, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x74, 0x74, 0x70, 0x33, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x68, 0x74, 0x74, 0x70, 0x33, 0x12, 0x20, 0x0a, - 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x69, 0x72, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x0f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, - 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x65, 0x72, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x65, 0x72, 0x74, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x65, 0x72, 0x74, 0x46, - 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, - 0x0a, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, - 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, - 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1f, 0x0a, - 0x04, 0x61, 0x6c, 0x70, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x6c, 0x70, 0x6e, 0x52, 0x04, 0x61, 0x6c, 0x70, 0x6e, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x48, - 0x0a, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x0a, 0x04, 0x41, 0x6c, 0x70, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x13, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, - 0x64, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6f, - 0x75, 0x74, 0x70, 0x75, 0x74, 0x32, 0x88, 0x01, 0x0a, 0x0f, 0x45, 0x63, 0x68, 0x6f, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x45, 0x63, 0x68, - 0x6f, 0x12, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x63, - 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x46, 0x6f, - 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x6f, 0x72, - 0x77, 0x61, 0x72, 0x64, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_proto_echo_proto_rawDescOnce sync.Once - file_proto_echo_proto_rawDescData = file_proto_echo_proto_rawDesc -) - -func file_proto_echo_proto_rawDescGZIP() []byte { - file_proto_echo_proto_rawDescOnce.Do(func() { - file_proto_echo_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_echo_proto_rawDescData) - }) - return file_proto_echo_proto_rawDescData -} - -var file_proto_echo_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_proto_echo_proto_goTypes = []interface{}{ - (*EchoRequest)(nil), // 0: proto.EchoRequest - (*EchoResponse)(nil), // 1: proto.EchoResponse - (*Header)(nil), // 2: proto.Header - (*ForwardEchoRequest)(nil), // 3: proto.ForwardEchoRequest - (*Alpn)(nil), // 4: proto.Alpn - (*ForwardEchoResponse)(nil), // 5: proto.ForwardEchoResponse - (*wrapperspb.StringValue)(nil), // 6: google.protobuf.StringValue -} -var file_proto_echo_proto_depIdxs = []int32{ - 2, // 0: proto.ForwardEchoRequest.headers:type_name -> proto.Header - 4, // 1: proto.ForwardEchoRequest.alpn:type_name -> proto.Alpn - 6, // 2: proto.ForwardEchoRequest.expectedResponse:type_name -> google.protobuf.StringValue - 0, // 3: proto.EchoTestService.Echo:input_type -> proto.EchoRequest - 3, // 4: proto.EchoTestService.ForwardEcho:input_type -> proto.ForwardEchoRequest - 1, // 5: proto.EchoTestService.Echo:output_type -> proto.EchoResponse - 5, // 6: proto.EchoTestService.ForwardEcho:output_type -> proto.ForwardEchoResponse - 5, // [5:7] is the sub-list for method output_type - 3, // [3:5] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_proto_echo_proto_init() } -func file_proto_echo_proto_init() { - if File_proto_echo_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_proto_echo_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EchoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_echo_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EchoResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_echo_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Header); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_echo_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ForwardEchoRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_echo_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Alpn); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_proto_echo_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ForwardEchoResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_proto_echo_proto_rawDesc, - NumEnums: 0, - NumMessages: 6, - NumExtensions: 0, - NumServices: 1, - }, - GoTypes: file_proto_echo_proto_goTypes, - DependencyIndexes: file_proto_echo_proto_depIdxs, - MessageInfos: file_proto_echo_proto_msgTypes, - }.Build() - File_proto_echo_proto = out.File - file_proto_echo_proto_rawDesc = nil - file_proto_echo_proto_goTypes = nil - file_proto_echo_proto_depIdxs = nil -} diff --git a/gen/proto/type/v1beta1/selector.pb.go b/gen/proto/type/v1beta1/selector.pb.go deleted file mode 100644 index 284940f..0000000 --- a/gen/proto/type/v1beta1/selector.pb.go +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2019 Istio Authors -// -// 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. - -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: type/v1beta1/selector.proto - -// $title: Workload Selector -// $description: Definition of a workload selector. -// $location: https://istio.io/docs/reference/config/type/workload-selector.html - -package v1beta1 - -import ( - _ "google.golang.org/genproto/googleapis/api/annotations" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// WorkloadSelector specifies the criteria used to determine if a policy can be applied -// to a proxy. The matching criteria includes the metadata associated with a proxy, -// workload instance info such as labels attached to the pod/VM, or any other info -// that the proxy provides to Istio during the initial handshake. If multiple conditions are -// specified, all conditions need to match in order for the workload instance to be -// selected. Currently, only label based selection mechanism is supported. -type WorkloadSelector struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // One or more labels that indicate a specific set of pods/VMs - // on which a policy should be applied. The scope of label search is restricted to - // the configuration namespace in which the resource is present. - MatchLabels map[string]string `protobuf:"bytes,1,rep,name=match_labels,json=matchLabels,proto3" json:"match_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *WorkloadSelector) Reset() { - *x = WorkloadSelector{} - if protoimpl.UnsafeEnabled { - mi := &file_type_v1beta1_selector_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WorkloadSelector) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WorkloadSelector) ProtoMessage() {} - -func (x *WorkloadSelector) ProtoReflect() protoreflect.Message { - mi := &file_type_v1beta1_selector_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WorkloadSelector.ProtoReflect.Descriptor instead. -func (*WorkloadSelector) Descriptor() ([]byte, []int) { - return file_type_v1beta1_selector_proto_rawDescGZIP(), []int{0} -} - -func (x *WorkloadSelector) GetMatchLabels() map[string]string { - if x != nil { - return x.MatchLabels - } - return nil -} - -var File_type_v1beta1_selector_proto protoreflect.FileDescriptor - -var file_type_v1beta1_selector_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xb2, 0x01, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x5e, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x35, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x1b, 0x5a, 0x19, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_type_v1beta1_selector_proto_rawDescOnce sync.Once - file_type_v1beta1_selector_proto_rawDescData = file_type_v1beta1_selector_proto_rawDesc -) - -func file_type_v1beta1_selector_proto_rawDescGZIP() []byte { - file_type_v1beta1_selector_proto_rawDescOnce.Do(func() { - file_type_v1beta1_selector_proto_rawDescData = protoimpl.X.CompressGZIP(file_type_v1beta1_selector_proto_rawDescData) - }) - return file_type_v1beta1_selector_proto_rawDescData -} - -var file_type_v1beta1_selector_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_type_v1beta1_selector_proto_goTypes = []interface{}{ - (*WorkloadSelector)(nil), // 0: istio.type.v1beta1.WorkloadSelector - nil, // 1: istio.type.v1beta1.WorkloadSelector.MatchLabelsEntry -} -var file_type_v1beta1_selector_proto_depIdxs = []int32{ - 1, // 0: istio.type.v1beta1.WorkloadSelector.match_labels:type_name -> istio.type.v1beta1.WorkloadSelector.MatchLabelsEntry - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_type_v1beta1_selector_proto_init() } -func file_type_v1beta1_selector_proto_init() { - if File_type_v1beta1_selector_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_type_v1beta1_selector_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WorkloadSelector); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_type_v1beta1_selector_proto_rawDesc, - NumEnums: 0, - NumMessages: 2, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_type_v1beta1_selector_proto_goTypes, - DependencyIndexes: file_type_v1beta1_selector_proto_depIdxs, - MessageInfos: file_type_v1beta1_selector_proto_msgTypes, - }.Build() - File_type_v1beta1_selector_proto = out.File - file_type_v1beta1_selector_proto_rawDesc = nil - file_type_v1beta1_selector_proto_goTypes = nil - file_type_v1beta1_selector_proto_depIdxs = nil -} diff --git a/gen/proto/webpush/webpush.pb.go b/gen/proto/webpush/webpush.pb.go deleted file mode 100644 index a086552..0000000 --- a/gen/proto/webpush/webpush.pb.go +++ /dev/null @@ -1,727 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: webpush/webpush.proto - -package msgs - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Common fields to be encoded in the 'data' proto -type MessageData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Time when the message was sent, according to the sender clock. - Time int64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` - // Original WorkloadID. If missing, the envelope WorkloadID will be used. - Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` - // Original destination - To string `protobuf:"bytes,3,opt,name=to,proto3" json:"to,omitempty"` - From string `protobuf:"bytes,4,opt,name=from,proto3" json:"from,omitempty"` - Topic string `protobuf:"bytes,5,opt,name=topic,proto3" json:"topic,omitempty"` - Meta map[string]string `protobuf:"bytes,6,rep,name=meta,proto3" json:"meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` - Data []byte `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` -} - -func (x *MessageData) Reset() { - *x = MessageData{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MessageData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MessageData) ProtoMessage() {} - -func (x *MessageData) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MessageData.ProtoReflect.Descriptor instead. -func (*MessageData) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{0} -} - -func (x *MessageData) GetTime() int64 { - if x != nil { - return x.Time - } - return 0 -} - -func (x *MessageData) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *MessageData) GetTo() string { - if x != nil { - return x.To - } - return "" -} - -func (x *MessageData) GetFrom() string { - if x != nil { - return x.From - } - return "" -} - -func (x *MessageData) GetTopic() string { - if x != nil { - return x.Topic - } - return "" -} - -func (x *MessageData) GetMeta() map[string]string { - if x != nil { - return x.Meta - } - return nil -} - -func (x *MessageData) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -// Message is returned as PUSH PROMISE frames in the spec. The alternative protocol wraps it in -// Any field or other framing. -type WebpushMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Unique in context of the origin - // For webpush, generated by the original server (from subscription), as Location: - // Example: https://push.example.net/message/qDIYHNcfAIPP_5ITvURr-d6BGt - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Plaintext = 0 - // aes128gcm = 1 - ContentEncoding int32 `protobuf:"varint,7,opt,name=content_encoding,json=contentEncoding,proto3" json:"content_encoding,omitempty"` - // If encoding is "1" - aes128gcm - // Otherwise it is a plaintext message. - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` - // Message path - Path []*Via `protobuf:"bytes,6,rep,name=path,proto3" json:"path,omitempty"` - Ttl int32 `protobuf:"varint,9,opt,name=ttl,proto3" json:"ttl,omitempty"` - // Maps to the SubscribeResponse push parameter, returned as Link rel="urn:ietf:params:push" - // in the push promise. - Push string `protobuf:"bytes,2,opt,name=push,proto3" json:"push,omitempty"` - // Identifies the sender - compact form. - Sender *Vapid `protobuf:"bytes,4,opt,name=sender,proto3" json:"sender,omitempty"` - // URL or IPv6, extracted from the VAPID of the sender or other - // form of authentication. - From string `protobuf:"bytes,5,opt,name=from,proto3" json:"from,omitempty"` -} - -func (x *WebpushMessage) Reset() { - *x = WebpushMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WebpushMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WebpushMessage) ProtoMessage() {} - -func (x *WebpushMessage) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WebpushMessage.ProtoReflect.Descriptor instead. -func (*WebpushMessage) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{1} -} - -func (x *WebpushMessage) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *WebpushMessage) GetContentEncoding() int32 { - if x != nil { - return x.ContentEncoding - } - return 0 -} - -func (x *WebpushMessage) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -func (x *WebpushMessage) GetPath() []*Via { - if x != nil { - return x.Path - } - return nil -} - -func (x *WebpushMessage) GetTtl() int32 { - if x != nil { - return x.Ttl - } - return 0 -} - -func (x *WebpushMessage) GetPush() string { - if x != nil { - return x.Push - } - return "" -} - -func (x *WebpushMessage) GetSender() *Vapid { - if x != nil { - return x.Sender - } - return nil -} - -func (x *WebpushMessage) GetFrom() string { - if x != nil { - return x.From - } - return "" -} - -type Via struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Time int64 `protobuf:"varint,1,opt,name=time,proto3" json:"time,omitempty"` - Vip string `protobuf:"bytes,2,opt,name=vip,proto3" json:"vip,omitempty"` -} - -func (x *Via) Reset() { - *x = Via{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Via) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Via) ProtoMessage() {} - -func (x *Via) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Via.ProtoReflect.Descriptor instead. -func (*Via) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{2} -} - -func (x *Via) GetTime() int64 { - if x != nil { - return x.Time - } - return 0 -} - -func (x *Via) GetVip() string { - if x != nil { - return x.Vip - } - return "" -} - -// Vapid is the proto variant of a Webpush JWT. -// This is a more compact representation, without base64 overhead -// -// For HTTP, included in Authorization header: -// Authorization: vapid t=B64url k=B64url -// -// Decoded t is of form: { "typ": "JWT", "alg": "ES256" }.JWT.SIG -// -// { "crv":"P-256", -// "kty":"EC", -// "x":"DUfHPKLVFQzVvnCPGyfucbECzPDa7rWbXriLcysAjEc", -// "y":"F6YK5h4SDYic-dRuU_RCPCfA5aq9ojSwk5Y2EmClBPs" } -type Vapid struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // json payload of VAPID ( without base64 encoding) - // Can also be a proto message when used over other transports. - // Verification requires converting back to base64 ! - // Decoded to reduce the binary size - Data []byte `protobuf:"bytes,7,opt,name=data,proto3" json:"data,omitempty"` - // Public key of the signer, 64 bytes, EC256, decoded. - // Included in 'k' parameter for HTTP. - K []byte `protobuf:"bytes,4,opt,name=k,proto3" json:"k,omitempty"` - // If empty, it is assumed to be the constant value {typ=JWT,alg=ES256} - TType []byte `protobuf:"bytes,32,opt,name=t_type,json=tType,proto3" json:"t_type,omitempty"` - // Decoded - TSignature []byte `protobuf:"bytes,33,opt,name=t_signature,json=tSignature,proto3" json:"t_signature,omitempty"` -} - -func (x *Vapid) Reset() { - *x = Vapid{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Vapid) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Vapid) ProtoMessage() {} - -func (x *Vapid) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Vapid.ProtoReflect.Descriptor instead. -func (*Vapid) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{3} -} - -func (x *Vapid) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -func (x *Vapid) GetK() []byte { - if x != nil { - return x.K - } - return nil -} - -func (x *Vapid) GetTType() []byte { - if x != nil { - return x.TType - } - return nil -} - -func (x *Vapid) GetTSignature() []byte { - if x != nil { - return x.TSignature - } - return nil -} - -type PushRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The value returned in the SubscribeResponse push, without the hostname. - Push string `protobuf:"bytes,1,opt,name=push,proto3" json:"push,omitempty"` - Ttl int32 `protobuf:"varint,2,opt,name=ttl,proto3" json:"ttl,omitempty"` - // aes128gcm encrypted - Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` - Urgency string `protobuf:"bytes,4,opt,name=urgency,proto3" json:"urgency,omitempty"` - // Prefer header indicating delivery receipt request. - RespondAsync bool `protobuf:"varint,5,opt,name=respond_async,json=respondAsync,proto3" json:"respond_async,omitempty"` - Topic string `protobuf:"bytes,6,opt,name=topic,proto3" json:"topic,omitempty"` -} - -func (x *PushRequest) Reset() { - *x = PushRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushRequest) ProtoMessage() {} - -func (x *PushRequest) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushRequest.ProtoReflect.Descriptor instead. -func (*PushRequest) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{4} -} - -func (x *PushRequest) GetPush() string { - if x != nil { - return x.Push - } - return "" -} - -func (x *PushRequest) GetTtl() int32 { - if x != nil { - return x.Ttl - } - return 0 -} - -func (x *PushRequest) GetData() []byte { - if x != nil { - return x.Data - } - return nil -} - -func (x *PushRequest) GetUrgency() string { - if x != nil { - return x.Urgency - } - return "" -} - -func (x *PushRequest) GetRespondAsync() bool { - if x != nil { - return x.RespondAsync - } - return false -} - -func (x *PushRequest) GetTopic() string { - if x != nil { - return x.Topic - } - return "" -} - -type PushResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MessageId string `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` - // If request includes the respond_async parameter. - // - PushReceipt string `protobuf:"bytes,2,opt,name=push_receipt,json=pushReceipt,proto3" json:"push_receipt,omitempty"` -} - -func (x *PushResponse) Reset() { - *x = PushResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_webpush_webpush_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushResponse) ProtoMessage() {} - -func (x *PushResponse) ProtoReflect() protoreflect.Message { - mi := &file_webpush_webpush_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushResponse.ProtoReflect.Descriptor instead. -func (*PushResponse) Descriptor() ([]byte, []int) { - return file_webpush_webpush_proto_rawDescGZIP(), []int{5} -} - -func (x *PushResponse) GetMessageId() string { - if x != nil { - return x.MessageId - } - return "" -} - -func (x *PushResponse) GetPushReceipt() string { - if x != nil { - return x.PushReceipt - } - return "" -} - -var File_webpush_webpush_proto protoreflect.FileDescriptor - -var file_webpush_webpush_proto_rawDesc = []byte{ - 0x0a, 0x15, 0x77, 0x65, 0x62, 0x70, 0x75, 0x73, 0x68, 0x2f, 0x77, 0x65, 0x62, 0x70, 0x75, 0x73, - 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x77, 0x65, 0x62, 0x70, 0x75, 0x73, 0x68, - 0x22, 0xec, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x32, - 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, - 0x65, 0x62, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, - 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xe3, 0x01, 0x0a, 0x0e, 0x57, 0x65, 0x62, 0x70, 0x75, 0x73, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x20, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x77, 0x65, 0x62, 0x70, 0x75, 0x73, 0x68, 0x2e, 0x56, 0x69, 0x61, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x65, 0x62, 0x70, - 0x75, 0x73, 0x68, 0x2e, 0x56, 0x61, 0x70, 0x69, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x22, 0x2b, 0x0a, 0x03, 0x56, 0x69, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x76, 0x69, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x76, - 0x69, 0x70, 0x22, 0x61, 0x0a, 0x05, 0x56, 0x61, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x0c, 0x0a, 0x01, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x01, 0x6b, 0x12, 0x15, 0x0a, - 0x06, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x74, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9c, 0x01, 0x0a, 0x0b, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x75, 0x73, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x75, 0x73, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x18, 0x0a, 0x07, 0x75, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x75, 0x72, 0x67, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x64, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x22, 0x50, 0x0a, 0x0c, 0x50, 0x75, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x75, 0x73, 0x68, 0x5f, 0x72, 0x65, 0x63, 0x65, - 0x69, 0x70, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x75, 0x73, 0x68, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x70, 0x74, 0x42, 0x24, 0x5a, 0x22, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x77, 0x70, 0x67, - 0x61, 0x74, 0x65, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x73, 0x67, 0x73, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_webpush_webpush_proto_rawDescOnce sync.Once - file_webpush_webpush_proto_rawDescData = file_webpush_webpush_proto_rawDesc -) - -func file_webpush_webpush_proto_rawDescGZIP() []byte { - file_webpush_webpush_proto_rawDescOnce.Do(func() { - file_webpush_webpush_proto_rawDescData = protoimpl.X.CompressGZIP(file_webpush_webpush_proto_rawDescData) - }) - return file_webpush_webpush_proto_rawDescData -} - -var file_webpush_webpush_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_webpush_webpush_proto_goTypes = []interface{}{ - (*MessageData)(nil), // 0: webpush.MessageData - (*WebpushMessage)(nil), // 1: webpush.WebpushMessage - (*Via)(nil), // 2: webpush.Via - (*Vapid)(nil), // 3: webpush.Vapid - (*PushRequest)(nil), // 4: webpush.PushRequest - (*PushResponse)(nil), // 5: webpush.PushResponse - nil, // 6: webpush.MessageData.MetaEntry -} -var file_webpush_webpush_proto_depIdxs = []int32{ - 6, // 0: webpush.MessageData.meta:type_name -> webpush.MessageData.MetaEntry - 2, // 1: webpush.WebpushMessage.path:type_name -> webpush.Via - 3, // 2: webpush.WebpushMessage.sender:type_name -> webpush.Vapid - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name -} - -func init() { file_webpush_webpush_proto_init() } -func file_webpush_webpush_proto_init() { - if File_webpush_webpush_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_webpush_webpush_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_webpush_webpush_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WebpushMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_webpush_webpush_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Via); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_webpush_webpush_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Vapid); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_webpush_webpush_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PushRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_webpush_webpush_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PushResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_webpush_webpush_proto_rawDesc, - NumEnums: 0, - NumMessages: 7, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_webpush_webpush_proto_goTypes, - DependencyIndexes: file_webpush_webpush_proto_depIdxs, - MessageInfos: file_webpush_webpush_proto_msgTypes, - }.Build() - File_webpush_webpush_proto = out.File - file_webpush_webpush_proto_rawDesc = nil - file_webpush_webpush_proto_goTypes = nil - file_webpush_webpush_proto_depIdxs = nil -} diff --git a/gen/proto/xds/base.pb.go b/gen/proto/xds/base.pb.go deleted file mode 100644 index 0781595..0000000 --- a/gen/proto/xds/base.pb.go +++ /dev/null @@ -1,1063 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/base.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// `NullValue` is a singleton enumeration to represent the null value for the -// `Value` type union. -// -// The JSON representation for `NullValue` is JSON `null`. -type NullValue int32 - -const ( - // Null value. - NullValue_NULL_VALUE NullValue = 0 -) - -// Enum value maps for NullValue. -var ( - NullValue_name = map[int32]string{ - 0: "NULL_VALUE", - } - NullValue_value = map[string]int32{ - "NULL_VALUE": 0, - } -) - -func (x NullValue) Enum() *NullValue { - p := new(NullValue) - *p = x - return p -} - -func (x NullValue) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (NullValue) Descriptor() protoreflect.EnumDescriptor { - return file_xds_base_proto_enumTypes[0].Descriptor() -} - -func (NullValue) Type() protoreflect.EnumType { - return &file_xds_base_proto_enumTypes[0] -} - -func (x NullValue) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use NullValue.Descriptor instead. -func (NullValue) EnumDescriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{0} -} - -// `Struct` represents a structured data value, consisting of fields -// which map to dynamically typed values. In some languages, `Struct` -// might be supported by a native representation. For example, in -// scripting languages like JS a struct is represented as an -// object. The details of that representation are described together -// with the proto support for the language. -// -// The JSON representation for `Struct` is JSON object. -type Struct struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Unordered map of dynamically typed values. - Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields,proto3" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *Struct) Reset() { - *x = Struct{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Struct) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Struct) ProtoMessage() {} - -func (x *Struct) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Struct.ProtoReflect.Descriptor instead. -func (*Struct) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{0} -} - -func (x *Struct) GetFields() map[string]*Value { - if x != nil { - return x.Fields - } - return nil -} - -// `Value` represents a dynamically typed value which can be either -// null, a number, a string, a boolean, a recursive struct value, or a -// list of values. A producer of value is expected to set one of that -// variants, absence of any variant indicates an error. -// -// The JSON representation for `Value` is JSON value. -type Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The kind of value. - // - // Types that are assignable to Kind: - // *Value_NullValue - // *Value_NumberValue - // *Value_StringValue - // *Value_BoolValue - // *Value_StructValue - // *Value_ListValue - Kind isValue_Kind `protobuf_oneof:"kind"` -} - -func (x *Value) Reset() { - *x = Value{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Value) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Value) ProtoMessage() {} - -func (x *Value) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Value.ProtoReflect.Descriptor instead. -func (*Value) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{1} -} - -func (m *Value) GetKind() isValue_Kind { - if m != nil { - return m.Kind - } - return nil -} - -func (x *Value) GetNullValue() NullValue { - if x, ok := x.GetKind().(*Value_NullValue); ok { - return x.NullValue - } - return NullValue_NULL_VALUE -} - -func (x *Value) GetNumberValue() float64 { - if x, ok := x.GetKind().(*Value_NumberValue); ok { - return x.NumberValue - } - return 0 -} - -func (x *Value) GetStringValue() string { - if x, ok := x.GetKind().(*Value_StringValue); ok { - return x.StringValue - } - return "" -} - -func (x *Value) GetBoolValue() bool { - if x, ok := x.GetKind().(*Value_BoolValue); ok { - return x.BoolValue - } - return false -} - -func (x *Value) GetStructValue() *Struct { - if x, ok := x.GetKind().(*Value_StructValue); ok { - return x.StructValue - } - return nil -} - -func (x *Value) GetListValue() *ListValue { - if x, ok := x.GetKind().(*Value_ListValue); ok { - return x.ListValue - } - return nil -} - -type isValue_Kind interface { - isValue_Kind() -} - -type Value_NullValue struct { - // Represents a null value. - NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=xds.NullValue,oneof"` -} - -type Value_NumberValue struct { - // Represents a double value. - NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,proto3,oneof"` -} - -type Value_StringValue struct { - // Represents a string value. - StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,proto3,oneof"` -} - -type Value_BoolValue struct { - // Represents a boolean value. - BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,proto3,oneof"` -} - -type Value_StructValue struct { - // Represents a structured value. - StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,proto3,oneof"` -} - -type Value_ListValue struct { - // Represents a repeated `Value`. - ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,proto3,oneof"` -} - -func (*Value_NullValue) isValue_Kind() {} - -func (*Value_NumberValue) isValue_Kind() {} - -func (*Value_StringValue) isValue_Kind() {} - -func (*Value_BoolValue) isValue_Kind() {} - -func (*Value_StructValue) isValue_Kind() {} - -func (*Value_ListValue) isValue_Kind() {} - -// `ListValue` is a wrapper around a repeated field of values. -// -// The JSON representation for `ListValue` is JSON array. -type ListValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Repeated field of dynamically typed values. - Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` -} - -func (x *ListValue) Reset() { - *x = ListValue{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ListValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ListValue) ProtoMessage() {} - -func (x *ListValue) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ListValue.ProtoReflect.Descriptor instead. -func (*ListValue) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{2} -} - -func (x *ListValue) GetValues() []*Value { - if x != nil { - return x.Values - } - return nil -} - -// A Duration represents a signed, fixed-length span of time represented -// as a count of seconds and fractions of seconds at nanosecond -// resolution. It is independent of any calendar and concepts like "day" -// or "month". It is related to Timestamp in that the difference between -// two Timestamp values is a Duration and it can be added or subtracted -// from a Timestamp. Range is approximately +-10,000 years. -// -// # Examples -// -// Example 1: Compute Duration from two Timestamps in pseudo code. -// -// Timestamp start = ...; -// Timestamp end = ...; -// Duration duration = ...; -// -// duration.seconds = end.seconds - start.seconds; -// duration.nanos = end.nanos - start.nanos; -// -// if (duration.seconds < 0 && duration.nanos > 0) { -// duration.seconds += 1; -// duration.nanos -= 1000000000; -// } else if (durations.seconds > 0 && duration.nanos < 0) { -// duration.seconds -= 1; -// duration.nanos += 1000000000; -// } -// -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. -// -// Timestamp start = ...; -// Duration duration = ...; -// Timestamp end = ...; -// -// end.seconds = start.seconds + duration.seconds; -// end.nanos = start.nanos + duration.nanos; -// -// if (end.nanos < 0) { -// end.seconds -= 1; -// end.nanos += 1000000000; -// } else if (end.nanos >= 1000000000) { -// end.seconds += 1; -// end.nanos -= 1000000000; -// } -// -// Example 3: Compute Duration from datetime.timedelta in Python. -// -// td = datetime.timedelta(days=3, minutes=10) -// duration = Duration() -// duration.FromTimedelta(td) -// -// # JSON Mapping -// -// In JSON format, the Duration type is encoded as a string rather than an -// object, where the string ends in the suffix "s" (indicating seconds) and -// is preceded by the number of seconds, with nanoseconds expressed as -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 -// microsecond should be expressed in JSON format as "3.000001s". -// -// -type Duration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. Note: these bounds are computed from: - // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` -} - -func (x *Duration) Reset() { - *x = Duration{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Duration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Duration) ProtoMessage() {} - -func (x *Duration) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Duration.ProtoReflect.Descriptor instead. -func (*Duration) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{3} -} - -func (x *Duration) GetSeconds() int64 { - if x != nil { - return x.Seconds - } - return 0 -} - -func (x *Duration) GetNanos() int32 { - if x != nil { - return x.Nanos - } - return 0 -} - -// The `Status` type defines a logical error model that is suitable for different -// programming environments, including REST APIs and RPC APIs. It is used by -// [gRPC](https://github.com/grpc). The error model is designed to be: -// -// - Simple to use and understand for most users -// - Flexible enough to meet unexpected needs -// -// # Overview -// -// The `Status` message contains three pieces of data: error code, error message, -// and error details. The error code should be an enum value of -// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The -// error message should be a developer-facing English message that helps -// developers *understand* and *resolve* the error. If a localized user-facing -// error message is needed, put the localized message in the error details or -// localize it in the client. The optional error details may contain arbitrary -// information about the error. There is a predefined set of error detail types -// in the package `google.rpc` that can be used for common error conditions. -// -// # Language mapping -// -// The `Status` message is the logical representation of the error model, but it -// is not necessarily the actual wire format. When the `Status` message is -// exposed in different client libraries and different wire protocols, it can be -// mapped differently. For example, it will likely be mapped to some exceptions -// in Java, but more likely mapped to some error codes in C. -// -// # Other uses -// -// The error model and the `Status` message can be used in a variety of -// environments, either with or without APIs, to provide a -// consistent developer experience across different environments. -// -// Example uses of this error model include: -// -// - Partial errors. If a service needs to return partial errors to the client, -// it may embed the `Status` in the normal response to indicate the partial -// errors. -// -// - Workflow errors. A typical workflow has multiple steps. Each step may -// have a `Status` message for error reporting. -// -// - Batch operations. If a client uses batch request and batch response, the -// `Status` message should be used directly inside batch response, one for -// each error sub-response. -// -// - Asynchronous operations. If an API call embeds asynchronous operation -// results in its response, the status of those operations should be -// represented directly using the `Status` message. -// -// - Logging. If some API errors are stored in logs, the message `Status` could -// be used directly after any stripping needed for security/privacy reasons. -type Status struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - // google.protobuf.Any - Details []*Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` -} - -func (x *Status) Reset() { - *x = Status{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Status) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Status) ProtoMessage() {} - -func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Status.ProtoReflect.Descriptor instead. -func (*Status) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{4} -} - -func (x *Status) GetCode() int32 { - if x != nil { - return x.Code - } - return 0 -} - -func (x *Status) GetMessage() string { - if x != nil { - return x.Message - } - return "" -} - -func (x *Status) GetDetails() []*Any { - if x != nil { - return x.Details - } - return nil -} - -// `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) -// ... -// foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// -// JSON -// ==== -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// -type Any struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // A URL/resource name whose content describes the type of the - // serialized protocol buffer message. - // - // For URLs which use the scheme `http`, `https`, or no scheme, the - // following restrictions and interpretations apply: - // - // * If no scheme is provided, `https` is assumed. - // * The last segment of the URL's path must represent the fully - // qualified name of the type (as in `path/google.protobuf.Duration`). - // The name should be in a canonical form (e.g., leading "." is - // not accepted). - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - // - TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` - // Must be a valid serialized protocol buffer of the above specified type. - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *Any) Reset() { - *x = Any{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Any) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Any) ProtoMessage() {} - -func (x *Any) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Any.ProtoReflect.Descriptor instead. -func (*Any) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{5} -} - -func (x *Any) GetTypeUrl() string { - if x != nil { - return x.TypeUrl - } - return "" -} - -func (x *Any) GetValue() []byte { - if x != nil { - return x.Value - } - return nil -} - -// Wrapper message for `bool`. -// -// The JSON representation for `BoolValue` is JSON `true` and `false`. -type BoolValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The bool value. - Value bool `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *BoolValue) Reset() { - *x = BoolValue{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BoolValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BoolValue) ProtoMessage() {} - -func (x *BoolValue) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BoolValue.ProtoReflect.Descriptor instead. -func (*BoolValue) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{6} -} - -func (x *BoolValue) GetValue() bool { - if x != nil { - return x.Value - } - return false -} - -// Wrapper message for `uint32`. -// -// The JSON representation for `UInt32Value` is JSON number. -type UInt32Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The uint32 value. - Value uint32 `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"` -} - -func (x *UInt32Value) Reset() { - *x = UInt32Value{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_base_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UInt32Value) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UInt32Value) ProtoMessage() {} - -func (x *UInt32Value) ProtoReflect() protoreflect.Message { - mi := &file_xds_base_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UInt32Value.ProtoReflect.Descriptor instead. -func (*UInt32Value) Descriptor() ([]byte, []int) { - return file_xds_base_proto_rawDescGZIP(), []int{7} -} - -func (x *UInt32Value) GetValue() uint32 { - if x != nil { - return x.Value - } - return 0 -} - -var File_xds_base_proto protoreflect.FileDescriptor - -var file_xds_base_proto_rawDesc = []byte{ - 0x0a, 0x0e, 0x78, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x03, 0x78, 0x64, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x12, 0x2f, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x1a, 0x45, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8e, 0x02, 0x0a, 0x05, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4e, 0x75, 0x6c, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x75, 0x6d, - 0x62, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, - 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, - 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x2f, 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x2f, 0x0a, 0x09, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x22, 0x5a, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x22, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x22, 0x36, 0x0a, 0x03, 0x41, 0x6e, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, - 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, - 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x21, 0x0a, 0x09, 0x42, 0x6f, - 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x23, 0x0a, - 0x0b, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x2a, 0x1b, 0x0a, 0x09, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x0e, 0x0a, 0x0a, 0x4e, 0x55, 0x4c, 0x4c, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x00, 0x42, - 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, - 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, - 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x78, 0x64, 0x73, - 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xds_base_proto_rawDescOnce sync.Once - file_xds_base_proto_rawDescData = file_xds_base_proto_rawDesc -) - -func file_xds_base_proto_rawDescGZIP() []byte { - file_xds_base_proto_rawDescOnce.Do(func() { - file_xds_base_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_base_proto_rawDescData) - }) - return file_xds_base_proto_rawDescData -} - -var file_xds_base_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xds_base_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_xds_base_proto_goTypes = []interface{}{ - (NullValue)(0), // 0: xds.NullValue - (*Struct)(nil), // 1: xds.Struct - (*Value)(nil), // 2: xds.Value - (*ListValue)(nil), // 3: xds.ListValue - (*Duration)(nil), // 4: xds.Duration - (*Status)(nil), // 5: xds.Status - (*Any)(nil), // 6: xds.Any - (*BoolValue)(nil), // 7: xds.BoolValue - (*UInt32Value)(nil), // 8: xds.UInt32Value - nil, // 9: xds.Struct.FieldsEntry -} -var file_xds_base_proto_depIdxs = []int32{ - 9, // 0: xds.Struct.fields:type_name -> xds.Struct.FieldsEntry - 0, // 1: xds.Value.null_value:type_name -> xds.NullValue - 1, // 2: xds.Value.struct_value:type_name -> xds.Struct - 3, // 3: xds.Value.list_value:type_name -> xds.ListValue - 2, // 4: xds.ListValue.values:type_name -> xds.Value - 6, // 5: xds.Status.details:type_name -> xds.Any - 2, // 6: xds.Struct.FieldsEntry.value:type_name -> xds.Value - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_xds_base_proto_init() } -func file_xds_base_proto_init() { - if File_xds_base_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_xds_base_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Struct); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Duration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Any); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BoolValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_base_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UInt32Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_xds_base_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*Value_NullValue)(nil), - (*Value_NumberValue)(nil), - (*Value_StringValue)(nil), - (*Value_BoolValue)(nil), - (*Value_StructValue)(nil), - (*Value_ListValue)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_base_proto_rawDesc, - NumEnums: 1, - NumMessages: 9, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_base_proto_goTypes, - DependencyIndexes: file_xds_base_proto_depIdxs, - EnumInfos: file_xds_base_proto_enumTypes, - MessageInfos: file_xds_base_proto_msgTypes, - }.Build() - File_xds_base_proto = out.File - file_xds_base_proto_rawDesc = nil - file_xds_base_proto_goTypes = nil - file_xds_base_proto_depIdxs = nil -} diff --git a/gen/proto/xds/cds.pb.go b/gen/proto/xds/cds.pb.go deleted file mode 100644 index a00bc05..0000000 --- a/gen/proto/xds/cds.pb.go +++ /dev/null @@ -1,1554 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/cds.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// Refer to :ref:`service discovery type ` -// for an explanation on each type. -type Cluster_DiscoveryType int32 - -const ( - // Refer to the :ref:`static discovery type` - // for an explanation. - Cluster_STATIC Cluster_DiscoveryType = 0 - // Refer to the :ref:`strict DNS discovery - // type` - // for an explanation. - Cluster_STRICT_DNS Cluster_DiscoveryType = 1 - // Refer to the :ref:`logical DNS discovery - // type` - // for an explanation. - Cluster_LOGICAL_DNS Cluster_DiscoveryType = 2 - // Refer to the :ref:`service discovery type` - // for an explanation. - Cluster_EDS Cluster_DiscoveryType = 3 - // Refer to the :ref:`original destination discovery - // type` - // for an explanation. - Cluster_ORIGINAL_DST Cluster_DiscoveryType = 4 -) - -// Enum value maps for Cluster_DiscoveryType. -var ( - Cluster_DiscoveryType_name = map[int32]string{ - 0: "STATIC", - 1: "STRICT_DNS", - 2: "LOGICAL_DNS", - 3: "EDS", - 4: "ORIGINAL_DST", - } - Cluster_DiscoveryType_value = map[string]int32{ - "STATIC": 0, - "STRICT_DNS": 1, - "LOGICAL_DNS": 2, - "EDS": 3, - "ORIGINAL_DST": 4, - } -) - -func (x Cluster_DiscoveryType) Enum() *Cluster_DiscoveryType { - p := new(Cluster_DiscoveryType) - *p = x - return p -} - -func (x Cluster_DiscoveryType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_DiscoveryType) Descriptor() protoreflect.EnumDescriptor { - return file_xds_cds_proto_enumTypes[0].Descriptor() -} - -func (Cluster_DiscoveryType) Type() protoreflect.EnumType { - return &file_xds_cds_proto_enumTypes[0] -} - -func (x Cluster_DiscoveryType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_DiscoveryType.Descriptor instead. -func (Cluster_DiscoveryType) EnumDescriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 0} -} - -// Refer to :ref:`load balancer type ` architecture -// overview section for information on each type. -type Cluster_LbPolicy int32 - -const ( - // Refer to the :ref:`round robin load balancing - // policy` - // for an explanation. - Cluster_ROUND_ROBIN Cluster_LbPolicy = 0 - // Refer to the :ref:`least request load balancing - // policy` - // for an explanation. - Cluster_LEAST_REQUEST Cluster_LbPolicy = 1 - // Refer to the :ref:`ring hash load balancing - // policy` - // for an explanation. - Cluster_RING_HASH Cluster_LbPolicy = 2 - // Refer to the :ref:`random load balancing - // policy` - // for an explanation. - Cluster_RANDOM Cluster_LbPolicy = 3 - // Refer to the :ref:`original destination load balancing - // policy` - // for an explanation. - Cluster_ORIGINAL_DST_LB Cluster_LbPolicy = 4 - // Refer to the :ref:`Maglev load balancing policy` - // for an explanation. - Cluster_MAGLEV Cluster_LbPolicy = 5 -) - -// Enum value maps for Cluster_LbPolicy. -var ( - Cluster_LbPolicy_name = map[int32]string{ - 0: "ROUND_ROBIN", - 1: "LEAST_REQUEST", - 2: "RING_HASH", - 3: "RANDOM", - 4: "ORIGINAL_DST_LB", - 5: "MAGLEV", - } - Cluster_LbPolicy_value = map[string]int32{ - "ROUND_ROBIN": 0, - "LEAST_REQUEST": 1, - "RING_HASH": 2, - "RANDOM": 3, - "ORIGINAL_DST_LB": 4, - "MAGLEV": 5, - } -) - -func (x Cluster_LbPolicy) Enum() *Cluster_LbPolicy { - p := new(Cluster_LbPolicy) - *p = x - return p -} - -func (x Cluster_LbPolicy) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_LbPolicy) Descriptor() protoreflect.EnumDescriptor { - return file_xds_cds_proto_enumTypes[1].Descriptor() -} - -func (Cluster_LbPolicy) Type() protoreflect.EnumType { - return &file_xds_cds_proto_enumTypes[1] -} - -func (x Cluster_LbPolicy) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_LbPolicy.Descriptor instead. -func (Cluster_LbPolicy) EnumDescriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []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` and -// :ref:`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 -) - -// Enum value maps for Cluster_DnsLookupFamily. -var ( - Cluster_DnsLookupFamily_name = map[int32]string{ - 0: "AUTO", - 1: "V4_ONLY", - 2: "V6_ONLY", - } - Cluster_DnsLookupFamily_value = map[string]int32{ - "AUTO": 0, - "V4_ONLY": 1, - "V6_ONLY": 2, - } -) - -func (x Cluster_DnsLookupFamily) Enum() *Cluster_DnsLookupFamily { - p := new(Cluster_DnsLookupFamily) - *p = x - return p -} - -func (x Cluster_DnsLookupFamily) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_DnsLookupFamily) Descriptor() protoreflect.EnumDescriptor { - return file_xds_cds_proto_enumTypes[2].Descriptor() -} - -func (Cluster_DnsLookupFamily) Type() protoreflect.EnumType { - return &file_xds_cds_proto_enumTypes[2] -} - -func (x Cluster_DnsLookupFamily) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_DnsLookupFamily.Descriptor instead. -func (Cluster_DnsLookupFamily) EnumDescriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []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 ` 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 -) - -// Enum value maps for Cluster_ClusterProtocolSelection. -var ( - Cluster_ClusterProtocolSelection_name = map[int32]string{ - 0: "USE_CONFIGURED_PROTOCOL", - 1: "USE_DOWNSTREAM_PROTOCOL", - } - Cluster_ClusterProtocolSelection_value = map[string]int32{ - "USE_CONFIGURED_PROTOCOL": 0, - "USE_DOWNSTREAM_PROTOCOL": 1, - } -) - -func (x Cluster_ClusterProtocolSelection) Enum() *Cluster_ClusterProtocolSelection { - p := new(Cluster_ClusterProtocolSelection) - *p = x - return p -} - -func (x Cluster_ClusterProtocolSelection) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_ClusterProtocolSelection) Descriptor() protoreflect.EnumDescriptor { - return file_xds_cds_proto_enumTypes[3].Descriptor() -} - -func (Cluster_ClusterProtocolSelection) Type() protoreflect.EnumType { - return &file_xds_cds_proto_enumTypes[3] -} - -func (x Cluster_ClusterProtocolSelection) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_ClusterProtocolSelection.Descriptor instead. -func (Cluster_ClusterProtocolSelection) EnumDescriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []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 -) - -// Enum value maps for Cluster_LbSubsetConfig_LbSubsetFallbackPolicy. -var ( - Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_name = map[int32]string{ - 0: "NO_FALLBACK", - 1: "ANY_ENDPOINT", - 2: "DEFAULT_SUBSET", - } - Cluster_LbSubsetConfig_LbSubsetFallbackPolicy_value = map[string]int32{ - "NO_FALLBACK": 0, - "ANY_ENDPOINT": 1, - "DEFAULT_SUBSET": 2, - } -) - -func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) Enum() *Cluster_LbSubsetConfig_LbSubsetFallbackPolicy { - p := new(Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) - *p = x - return p -} - -func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) Descriptor() protoreflect.EnumDescriptor { - return file_xds_cds_proto_enumTypes[4].Descriptor() -} - -func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) Type() protoreflect.EnumType { - return &file_xds_cds_proto_enumTypes[4] -} - -func (x Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Cluster_LbSubsetConfig_LbSubsetFallbackPolicy.Descriptor instead. -func (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy) EnumDescriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 1, 0} -} - -// Configuration for a single upstream cluster. -// [#comment:next free field: 30] -type Cluster struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Supplies the name of the cluster which must be unique across all clusters. - // The cluster name is used when emitting - // :ref:`statistics ` if :ref:`alt_stat_name - // ` is not provided. - // Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics. - // By default, the maximum length of a cluster name is limited to 60 - // characters. This limit can be increased by setting the - // :option:`--max-obj-name-len` command line argument to the desired value. - 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 - // `. - AltStatName string `protobuf:"bytes,28,opt,name=alt_stat_name,json=altStatName,proto3" json:"alt_stat_name,omitempty"` - // The :ref:`service discovery type ` - // to use for resolving the cluster. - Type Cluster_DiscoveryType `protobuf:"varint,2,opt,name=type,proto3,enum=xds.Cluster_DiscoveryType" json:"type,omitempty"` - // 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 `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 *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 ` to use - // when picking a host in the cluster. - LbPolicy Cluster_LbPolicy `protobuf:"varint,6,opt,name=lb_policy,json=lbPolicy,proto3,enum=xds.Cluster_LbPolicy" json:"lb_policy,omitempty"` - // If the service discovery type is - // :ref:`STATIC`, - // :ref:`STRICT_DNS` - // or :ref:`LOGICAL_DNS`, - // then hosts is required. - Hosts []*Address `protobuf:"bytes,7,rep,name=hosts,proto3" json:"hosts,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 *UInt32Value `protobuf:"bytes,9,opt,name=max_requests_per_connection,json=maxRequestsPerConnection,proto3" json:"max_requests_per_connection,omitempty"` - // If the DNS refresh rate is specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`LOGICAL_DNS`, - // this value is used as the cluster’s DNS refresh - // rate. If this setting is not specified, the value defaults to 5000. For - // cluster types other than - // :ref:`STRICT_DNS` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - DnsRefreshRate *Duration `protobuf:"bytes,16,opt,name=dns_refresh_rate,json=dnsRefreshRate,proto3" json:"dns_refresh_rate,omitempty"` - // The DNS IP address resolution policy. If this setting is not specified, the - // value defaults to - // :ref:`AUTO`. - DnsLookupFamily Cluster_DnsLookupFamily `protobuf:"varint,17,opt,name=dns_lookup_family,json=dnsLookupFamily,proto3,enum=xds.Cluster_DnsLookupFamily" json:"dns_lookup_family,omitempty"` - // If DNS resolvers are specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`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` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - DnsResolvers []*Address `protobuf:"bytes,18,rep,name=dns_resolvers,json=dnsResolvers,proto3" json:"dns_resolvers,omitempty"` - // The interval for removing stale hosts from a cluster type - // :ref:`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` - // this setting is ignored. - CleanupInterval *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 *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` - // has additional configuration options. - // Specifying ring_hash_lb_config without setting the LbPolicy to - // :ref:`RING_HASH` - // will generate an error at runtime. - // - // Types that are assignable to LbConfig: - // *Cluster_RingHashLbConfig_ - 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"` - // 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 *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=xds.Cluster_ClusterProtocolSelection" json:"protocol_selection,omitempty"` -} - -func (x *Cluster) Reset() { - *x = Cluster{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster) ProtoMessage() {} - -func (x *Cluster) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster.ProtoReflect.Descriptor instead. -func (*Cluster) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0} -} - -func (x *Cluster) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Cluster) GetAltStatName() string { - if x != nil { - return x.AltStatName - } - return "" -} - -func (x *Cluster) GetType() Cluster_DiscoveryType { - if x != nil { - return x.Type - } - return Cluster_STATIC -} - -func (x *Cluster) GetEdsClusterConfig() *Cluster_EdsClusterConfig { - if x != nil { - return x.EdsClusterConfig - } - return nil -} - -func (x *Cluster) GetConnectTimeout() *Duration { - if x != nil { - return x.ConnectTimeout - } - return nil -} - -func (x *Cluster) GetPerConnectionBufferLimitBytes() *UInt32Value { - if x != nil { - return x.PerConnectionBufferLimitBytes - } - return nil -} - -func (x *Cluster) GetLbPolicy() Cluster_LbPolicy { - if x != nil { - return x.LbPolicy - } - return Cluster_ROUND_ROBIN -} - -func (x *Cluster) GetHosts() []*Address { - if x != nil { - return x.Hosts - } - return nil -} - -func (x *Cluster) GetMaxRequestsPerConnection() *UInt32Value { - if x != nil { - return x.MaxRequestsPerConnection - } - return nil -} - -func (x *Cluster) GetDnsRefreshRate() *Duration { - if x != nil { - return x.DnsRefreshRate - } - return nil -} - -func (x *Cluster) GetDnsLookupFamily() Cluster_DnsLookupFamily { - if x != nil { - return x.DnsLookupFamily - } - return Cluster_AUTO -} - -func (x *Cluster) GetDnsResolvers() []*Address { - if x != nil { - return x.DnsResolvers - } - return nil -} - -func (x *Cluster) GetCleanupInterval() *Duration { - if x != nil { - return x.CleanupInterval - } - return nil -} - -func (x *Cluster) GetUpstreamBindConfig() *BindConfig { - if x != nil { - return x.UpstreamBindConfig - } - return nil -} - -func (x *Cluster) GetLbSubsetConfig() *Cluster_LbSubsetConfig { - if x != nil { - return x.LbSubsetConfig - } - return nil -} - -func (m *Cluster) GetLbConfig() isCluster_LbConfig { - if m != nil { - return m.LbConfig - } - return nil -} - -func (x *Cluster) GetRingHashLbConfig() *Cluster_RingHashLbConfig { - if x, ok := x.GetLbConfig().(*Cluster_RingHashLbConfig_); ok { - return x.RingHashLbConfig - } - return nil -} - -func (x *Cluster) GetCommonLbConfig() *Cluster_CommonLbConfig { - if x != nil { - return x.CommonLbConfig - } - return nil -} - -func (x *Cluster) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Cluster) GetProtocolSelection() Cluster_ClusterProtocolSelection { - if x != nil { - return x.ProtocolSelection - } - return Cluster_USE_CONFIGURED_PROTOCOL -} - -type isCluster_LbConfig interface { - isCluster_LbConfig() -} - -type Cluster_RingHashLbConfig_ struct { - // Optional configuration for the Ring Hash load balancing policy. - RingHashLbConfig *Cluster_RingHashLbConfig `protobuf:"bytes,23,opt,name=ring_hash_lb_config,json=ringHashLbConfig,proto3,oneof"` -} - -func (*Cluster_RingHashLbConfig_) isCluster_LbConfig() {} - -// An extensible structure containing the address Envoy should bind to when -// establishing upstream connections. -type UpstreamBindConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The address Envoy should bind to when establishing upstream connections. - SourceAddress *Address `protobuf:"bytes,1,opt,name=source_address,json=sourceAddress,proto3" json:"source_address,omitempty"` -} - -func (x *UpstreamBindConfig) Reset() { - *x = UpstreamBindConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UpstreamBindConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UpstreamBindConfig) ProtoMessage() {} - -func (x *UpstreamBindConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UpstreamBindConfig.ProtoReflect.Descriptor instead. -func (*UpstreamBindConfig) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{1} -} - -func (x *UpstreamBindConfig) GetSourceAddress() *Address { - if x != nil { - return x.SourceAddress - } - return nil -} - -// Configuration for :ref:`listeners `, :ref:`clusters -// `, :ref:`routes -// `, :ref:`endpoints -// ` etc. may either be sourced from the -// filesystem or from an xDS API source. Filesystem configs are watched with -// inotify for updates. -type ConfigSource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ConfigSourceSpecifier: - // *ConfigSource_Path - // *ConfigSource_Ads - ConfigSourceSpecifier isConfigSource_ConfigSourceSpecifier `protobuf_oneof:"config_source_specifier"` -} - -func (x *ConfigSource) Reset() { - *x = ConfigSource{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ConfigSource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ConfigSource) ProtoMessage() {} - -func (x *ConfigSource) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ConfigSource.ProtoReflect.Descriptor instead. -func (*ConfigSource) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{2} -} - -func (m *ConfigSource) GetConfigSourceSpecifier() isConfigSource_ConfigSourceSpecifier { - if m != nil { - return m.ConfigSourceSpecifier - } - return nil -} - -func (x *ConfigSource) GetPath() string { - if x, ok := x.GetConfigSourceSpecifier().(*ConfigSource_Path); ok { - return x.Path - } - return "" -} - -func (x *ConfigSource) GetAds() *AggregatedConfigSource { - if x, ok := x.GetConfigSourceSpecifier().(*ConfigSource_Ads); ok { - return x.Ads - } - return nil -} - -type isConfigSource_ConfigSourceSpecifier interface { - isConfigSource_ConfigSourceSpecifier() -} - -type ConfigSource_Path struct { - // Path on the filesystem to source and watch for configuration updates. - // - // .. note:: - // - // The path to the source must exist at config load time. - // - // .. note:: - // - // Envoy will only watch the file path for *moves.* This is because in general only moves - // are atomic. The same method of swapping files as is demonstrated in the - // :ref:`runtime documentation ` can be used here also. - Path string `protobuf:"bytes,1,opt,name=path,proto3,oneof"` -} - -type ConfigSource_Ads struct { - // API configuration source. - //ApiConfigSource api_config_source = 2; - // When set, ADS will be used to fetch resources. The ADS API configuration - // source in the bootstrap configuration is used. - Ads *AggregatedConfigSource `protobuf:"bytes,3,opt,name=ads,proto3,oneof"` -} - -func (*ConfigSource_Path) isConfigSource_ConfigSourceSpecifier() {} - -func (*ConfigSource_Ads) isConfigSource_ConfigSourceSpecifier() {} - -type AggregatedConfigSource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *AggregatedConfigSource) Reset() { - *x = AggregatedConfigSource{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AggregatedConfigSource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AggregatedConfigSource) ProtoMessage() {} - -func (x *AggregatedConfigSource) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AggregatedConfigSource.ProtoReflect.Descriptor instead. -func (*AggregatedConfigSource) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{3} -} - -// Only valid when discovery type is EDS. -type Cluster_EdsClusterConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Configuration for the source of EDS updates for this Cluster. - EdsConfig *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"` -} - -func (x *Cluster_EdsClusterConfig) Reset() { - *x = Cluster_EdsClusterConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_EdsClusterConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_EdsClusterConfig) ProtoMessage() {} - -func (x *Cluster_EdsClusterConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_EdsClusterConfig.ProtoReflect.Descriptor instead. -func (*Cluster_EdsClusterConfig) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *Cluster_EdsClusterConfig) GetEdsConfig() *ConfigSource { - if x != nil { - return x.EdsConfig - } - return nil -} - -func (x *Cluster_EdsClusterConfig) GetServiceName() string { - if x != nil { - return x.ServiceName - } - return "" -} - -// Optionally divide the endpoints in this cluster into subsets defined by -// endpoint metadata and selected by route and weighted cluster metadata. -type Cluster_LbSubsetConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The behavior used when no endpoint subset matches the selected route's - // metadata. The value defaults to - // :ref:`NO_FALLBACK`. - FallbackPolicy Cluster_LbSubsetConfig_LbSubsetFallbackPolicy `protobuf:"varint,1,opt,name=fallback_policy,json=fallbackPolicy,proto3,enum=xds.Cluster_LbSubsetConfig_LbSubsetFallbackPolicy" json:"fallback_policy,omitempty"` - // Specifies the default subset of endpoints used during fallback if - // fallback_policy is - // :ref:`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`. - DefaultSubset *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"` -} - -func (x *Cluster_LbSubsetConfig) Reset() { - *x = Cluster_LbSubsetConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_LbSubsetConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_LbSubsetConfig) ProtoMessage() {} - -func (x *Cluster_LbSubsetConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_LbSubsetConfig.ProtoReflect.Descriptor instead. -func (*Cluster_LbSubsetConfig) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *Cluster_LbSubsetConfig) GetFallbackPolicy() Cluster_LbSubsetConfig_LbSubsetFallbackPolicy { - if x != nil { - return x.FallbackPolicy - } - return Cluster_LbSubsetConfig_NO_FALLBACK -} - -func (x *Cluster_LbSubsetConfig) GetDefaultSubset() *Struct { - if x != nil { - return x.DefaultSubset - } - return nil -} - -func (x *Cluster_LbSubsetConfig) GetSubsetSelectors() []*Cluster_LbSubsetConfig_LbSubsetSelector { - if x != nil { - return x.SubsetSelectors - } - return nil -} - -// Specific configuration for the :ref:`RingHash` -// load balancing policy. -type Cluster_RingHashLbConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Deprecated settings from v1 config. - // [#not-implemented-hide:] Hide from docs. - // - // Deprecated: Do not use. - DeprecatedV1 *Cluster_RingHashLbConfig_DeprecatedV1 `protobuf:"bytes,2,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` -} - -func (x *Cluster_RingHashLbConfig) Reset() { - *x = Cluster_RingHashLbConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_RingHashLbConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_RingHashLbConfig) ProtoMessage() {} - -func (x *Cluster_RingHashLbConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_RingHashLbConfig.ProtoReflect.Descriptor instead. -func (*Cluster_RingHashLbConfig) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 2} -} - -// Deprecated: Do not use. -func (x *Cluster_RingHashLbConfig) GetDeprecatedV1() *Cluster_RingHashLbConfig_DeprecatedV1 { - if x != nil { - return x.DeprecatedV1 - } - return nil -} - -// Common configuration for all load balancer implementations. -type Cluster_CommonLbConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *Cluster_CommonLbConfig) Reset() { - *x = Cluster_CommonLbConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_CommonLbConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_CommonLbConfig) ProtoMessage() {} - -func (x *Cluster_CommonLbConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_CommonLbConfig.ProtoReflect.Descriptor instead. -func (*Cluster_CommonLbConfig) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 3} -} - -// Specifications for subsets. -type Cluster_LbSubsetConfig_LbSubsetSelector struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // List of keys to match with the weighted cluster metadata. - Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` -} - -func (x *Cluster_LbSubsetConfig_LbSubsetSelector) Reset() { - *x = Cluster_LbSubsetConfig_LbSubsetSelector{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_LbSubsetConfig_LbSubsetSelector) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_LbSubsetConfig_LbSubsetSelector) ProtoMessage() {} - -func (x *Cluster_LbSubsetConfig_LbSubsetSelector) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_LbSubsetConfig_LbSubsetSelector.ProtoReflect.Descriptor instead. -func (*Cluster_LbSubsetConfig_LbSubsetSelector) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 1, 0} -} - -func (x *Cluster_LbSubsetConfig_LbSubsetSelector) GetKeys() []string { - if x != nil { - return x.Keys - } - return nil -} - -// [#not-implemented-hide:] Hide from docs. -type Cluster_RingHashLbConfig_DeprecatedV1 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Defaults to true, meaning that std::hash is used to hash hosts onto - // the ketama ring. std::hash can vary by platform. For this reason, - // Envoy will eventually use `xxHash `_ - // by default. This field exists for - // migration purposes and will eventually be deprecated. Set it to false - // to use `xxHash `_ now. - UseStdHash *BoolValue `protobuf:"bytes,1,opt,name=use_std_hash,json=useStdHash,proto3" json:"use_std_hash,omitempty"` -} - -func (x *Cluster_RingHashLbConfig_DeprecatedV1) Reset() { - *x = Cluster_RingHashLbConfig_DeprecatedV1{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_cds_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Cluster_RingHashLbConfig_DeprecatedV1) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Cluster_RingHashLbConfig_DeprecatedV1) ProtoMessage() {} - -func (x *Cluster_RingHashLbConfig_DeprecatedV1) ProtoReflect() protoreflect.Message { - mi := &file_xds_cds_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Cluster_RingHashLbConfig_DeprecatedV1.ProtoReflect.Descriptor instead. -func (*Cluster_RingHashLbConfig_DeprecatedV1) Descriptor() ([]byte, []int) { - return file_xds_cds_proto_rawDescGZIP(), []int{0, 2, 0} -} - -func (x *Cluster_RingHashLbConfig_DeprecatedV1) GetUseStdHash() *BoolValue { - if x != nil { - return x.UseStdHash - } - return nil -} - -var File_xds_cds_proto protoreflect.FileDescriptor - -var file_xds_cds_proto_rawDesc = []byte{ - 0x0a, 0x0d, 0x78, 0x64, 0x73, 0x2f, 0x63, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x03, 0x78, 0x64, 0x73, 0x1a, 0x0e, 0x78, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0x11, 0x0a, 0x07, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x61, 0x6c, - 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x61, 0x6c, 0x74, 0x53, 0x74, 0x61, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x4b, - 0x0a, 0x12, 0x65, 0x64, 0x73, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x64, 0x73, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x45, 0x64, 0x73, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x65, 0x64, 0x73, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, 0x0a, 0x0f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x12, 0x5a, 0x0a, 0x21, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x1d, 0x70, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, - 0x32, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x2e, 0x4c, 0x62, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x08, 0x6c, 0x62, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, - 0x6d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, - 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x10, 0x64, 0x6e, 0x73, 0x5f, - 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x0e, 0x64, 0x6e, 0x73, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x52, 0x61, 0x74, - 0x65, 0x12, 0x48, 0x0a, 0x11, 0x64, 0x6e, 0x73, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x5f, - 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x44, 0x6e, 0x73, 0x4c, 0x6f, - 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0f, 0x64, 0x6e, 0x73, 0x4c, - 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x31, 0x0a, 0x0d, 0x64, - 0x6e, 0x73, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x73, 0x18, 0x12, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x52, 0x0c, 0x64, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x73, 0x12, 0x38, - 0x0a, 0x10, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x75, 0x70, - 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x14, 0x75, 0x70, 0x73, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x69, 0x6e, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x12, 0x75, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x42, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x45, 0x0a, 0x10, 0x6c, - 0x62, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x0e, 0x6c, 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x4e, 0x0a, 0x13, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x5f, - 0x6c, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x69, - 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, - 0x52, 0x10, 0x72, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x45, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x6c, 0x62, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, - 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x25, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x67, 0x0a, 0x10, 0x45, 0x64, - 0x73, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, - 0x0a, 0x0a, 0x65, 0x64, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x09, 0x65, 0x64, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x1a, 0xf3, 0x02, 0x0a, 0x0e, 0x4c, 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x5b, 0x0a, 0x0f, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, - 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x32, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4c, 0x62, - 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, 0x62, 0x53, - 0x75, 0x62, 0x73, 0x65, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x0e, 0x66, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x32, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x64, - 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x12, 0x57, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x73, 0x65, - 0x74, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, - 0x4c, 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4c, - 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, - 0x0f, 0x73, 0x75, 0x62, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, - 0x1a, 0x26, 0x0a, 0x10, 0x4c, 0x62, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x4f, 0x0a, 0x16, 0x4c, 0x62, 0x53, 0x75, - 0x62, 0x73, 0x65, 0x74, 0x46, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x12, 0x0f, 0x0a, 0x0b, 0x4e, 0x4f, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, - 0x4b, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x41, 0x4e, 0x59, 0x5f, 0x45, 0x4e, 0x44, 0x50, 0x4f, - 0x49, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, - 0x5f, 0x53, 0x55, 0x42, 0x53, 0x45, 0x54, 0x10, 0x02, 0x1a, 0xa9, 0x01, 0x0a, 0x10, 0x52, 0x69, - 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x53, - 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x31, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x2e, 0x52, 0x69, 0x6e, 0x67, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x62, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, - 0x31, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x56, 0x31, 0x1a, 0x40, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x56, 0x31, 0x12, 0x30, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x74, 0x64, 0x5f, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x75, 0x73, 0x65, 0x53, 0x74, - 0x64, 0x48, 0x61, 0x73, 0x68, 0x1a, 0x10, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, - 0x62, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x57, 0x0a, 0x0d, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x41, 0x54, - 0x49, 0x43, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x54, 0x52, 0x49, 0x43, 0x54, 0x5f, 0x44, - 0x4e, 0x53, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x4f, 0x47, 0x49, 0x43, 0x41, 0x4c, 0x5f, - 0x44, 0x4e, 0x53, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x45, 0x44, 0x53, 0x10, 0x03, 0x12, 0x10, - 0x0a, 0x0c, 0x4f, 0x52, 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x5f, 0x44, 0x53, 0x54, 0x10, 0x04, - 0x22, 0x6a, 0x0a, 0x08, 0x4c, 0x62, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0f, 0x0a, 0x0b, - 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, 0x10, 0x00, 0x12, 0x11, 0x0a, - 0x0d, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x48, 0x41, 0x53, 0x48, 0x10, 0x02, 0x12, - 0x0a, 0x0a, 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4f, - 0x52, 0x49, 0x47, 0x49, 0x4e, 0x41, 0x4c, 0x5f, 0x44, 0x53, 0x54, 0x5f, 0x4c, 0x42, 0x10, 0x04, - 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x41, 0x47, 0x4c, 0x45, 0x56, 0x10, 0x05, 0x22, 0x35, 0x0a, 0x0f, - 0x44, 0x6e, 0x73, 0x4c, 0x6f, 0x6f, 0x6b, 0x75, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, - 0x08, 0x0a, 0x04, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x34, 0x5f, - 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x56, 0x36, 0x5f, 0x4f, 0x4e, 0x4c, - 0x59, 0x10, 0x02, 0x22, 0x54, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1b, 0x0a, 0x17, 0x55, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x45, - 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, - 0x55, 0x53, 0x45, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x5f, 0x50, - 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x10, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4a, 0x04, 0x08, 0x0c, 0x10, 0x0d, 0x4a, 0x04, 0x08, 0x0f, - 0x10, 0x10, 0x22, 0x49, 0x0a, 0x12, 0x55, 0x70, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x69, - 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x33, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0c, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x70, 0x0a, - 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x14, 0x0a, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x2f, 0x0a, 0x03, 0x61, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x03, 0x61, 0x64, 0x73, 0x42, 0x19, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, - 0x18, 0x0a, 0x16, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, - 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x78, 0x64, 0x73, 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xds_cds_proto_rawDescOnce sync.Once - file_xds_cds_proto_rawDescData = file_xds_cds_proto_rawDesc -) - -func file_xds_cds_proto_rawDescGZIP() []byte { - file_xds_cds_proto_rawDescOnce.Do(func() { - file_xds_cds_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_cds_proto_rawDescData) - }) - return file_xds_cds_proto_rawDescData -} - -var file_xds_cds_proto_enumTypes = make([]protoimpl.EnumInfo, 5) -var file_xds_cds_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_xds_cds_proto_goTypes = []interface{}{ - (Cluster_DiscoveryType)(0), // 0: xds.Cluster.DiscoveryType - (Cluster_LbPolicy)(0), // 1: xds.Cluster.LbPolicy - (Cluster_DnsLookupFamily)(0), // 2: xds.Cluster.DnsLookupFamily - (Cluster_ClusterProtocolSelection)(0), // 3: xds.Cluster.ClusterProtocolSelection - (Cluster_LbSubsetConfig_LbSubsetFallbackPolicy)(0), // 4: xds.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy - (*Cluster)(nil), // 5: xds.Cluster - (*UpstreamBindConfig)(nil), // 6: xds.UpstreamBindConfig - (*ConfigSource)(nil), // 7: xds.ConfigSource - (*AggregatedConfigSource)(nil), // 8: xds.AggregatedConfigSource - (*Cluster_EdsClusterConfig)(nil), // 9: xds.Cluster.EdsClusterConfig - (*Cluster_LbSubsetConfig)(nil), // 10: xds.Cluster.LbSubsetConfig - (*Cluster_RingHashLbConfig)(nil), // 11: xds.Cluster.RingHashLbConfig - (*Cluster_CommonLbConfig)(nil), // 12: xds.Cluster.CommonLbConfig - (*Cluster_LbSubsetConfig_LbSubsetSelector)(nil), // 13: xds.Cluster.LbSubsetConfig.LbSubsetSelector - (*Cluster_RingHashLbConfig_DeprecatedV1)(nil), // 14: xds.Cluster.RingHashLbConfig.DeprecatedV1 - (*Duration)(nil), // 15: xds.Duration - (*UInt32Value)(nil), // 16: xds.UInt32Value - (*Address)(nil), // 17: xds.Address - (*BindConfig)(nil), // 18: xds.BindConfig - (*Metadata)(nil), // 19: xds.Metadata - (*Struct)(nil), // 20: xds.Struct - (*BoolValue)(nil), // 21: xds.BoolValue -} -var file_xds_cds_proto_depIdxs = []int32{ - 0, // 0: xds.Cluster.type:type_name -> xds.Cluster.DiscoveryType - 9, // 1: xds.Cluster.eds_cluster_config:type_name -> xds.Cluster.EdsClusterConfig - 15, // 2: xds.Cluster.connect_timeout:type_name -> xds.Duration - 16, // 3: xds.Cluster.per_connection_buffer_limit_bytes:type_name -> xds.UInt32Value - 1, // 4: xds.Cluster.lb_policy:type_name -> xds.Cluster.LbPolicy - 17, // 5: xds.Cluster.hosts:type_name -> xds.Address - 16, // 6: xds.Cluster.max_requests_per_connection:type_name -> xds.UInt32Value - 15, // 7: xds.Cluster.dns_refresh_rate:type_name -> xds.Duration - 2, // 8: xds.Cluster.dns_lookup_family:type_name -> xds.Cluster.DnsLookupFamily - 17, // 9: xds.Cluster.dns_resolvers:type_name -> xds.Address - 15, // 10: xds.Cluster.cleanup_interval:type_name -> xds.Duration - 18, // 11: xds.Cluster.upstream_bind_config:type_name -> xds.BindConfig - 10, // 12: xds.Cluster.lb_subset_config:type_name -> xds.Cluster.LbSubsetConfig - 11, // 13: xds.Cluster.ring_hash_lb_config:type_name -> xds.Cluster.RingHashLbConfig - 12, // 14: xds.Cluster.common_lb_config:type_name -> xds.Cluster.CommonLbConfig - 19, // 15: xds.Cluster.metadata:type_name -> xds.Metadata - 3, // 16: xds.Cluster.protocol_selection:type_name -> xds.Cluster.ClusterProtocolSelection - 17, // 17: xds.UpstreamBindConfig.source_address:type_name -> xds.Address - 8, // 18: xds.ConfigSource.ads:type_name -> xds.AggregatedConfigSource - 7, // 19: xds.Cluster.EdsClusterConfig.eds_config:type_name -> xds.ConfigSource - 4, // 20: xds.Cluster.LbSubsetConfig.fallback_policy:type_name -> xds.Cluster.LbSubsetConfig.LbSubsetFallbackPolicy - 20, // 21: xds.Cluster.LbSubsetConfig.default_subset:type_name -> xds.Struct - 13, // 22: xds.Cluster.LbSubsetConfig.subset_selectors:type_name -> xds.Cluster.LbSubsetConfig.LbSubsetSelector - 14, // 23: xds.Cluster.RingHashLbConfig.deprecated_v1:type_name -> xds.Cluster.RingHashLbConfig.DeprecatedV1 - 21, // 24: xds.Cluster.RingHashLbConfig.DeprecatedV1.use_std_hash:type_name -> xds.BoolValue - 25, // [25:25] is the sub-list for method output_type - 25, // [25:25] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name -} - -func init() { file_xds_cds_proto_init() } -func file_xds_cds_proto_init() { - if File_xds_cds_proto != nil { - return - } - file_xds_base_proto_init() - file_xds_envoy_base_proto_init() - if !protoimpl.UnsafeEnabled { - file_xds_cds_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpstreamBindConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConfigSource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AggregatedConfigSource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_EdsClusterConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_LbSubsetConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_RingHashLbConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_CommonLbConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_LbSubsetConfig_LbSubsetSelector); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_cds_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cluster_RingHashLbConfig_DeprecatedV1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_xds_cds_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*Cluster_RingHashLbConfig_)(nil), - } - file_xds_cds_proto_msgTypes[2].OneofWrappers = []interface{}{ - (*ConfigSource_Path)(nil), - (*ConfigSource_Ads)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_cds_proto_rawDesc, - NumEnums: 5, - NumMessages: 10, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_cds_proto_goTypes, - DependencyIndexes: file_xds_cds_proto_depIdxs, - EnumInfos: file_xds_cds_proto_enumTypes, - MessageInfos: file_xds_cds_proto_msgTypes, - }.Build() - File_xds_cds_proto = out.File - file_xds_cds_proto_rawDesc = nil - file_xds_cds_proto_goTypes = nil - file_xds_cds_proto_depIdxs = nil -} diff --git a/gen/proto/xds/eds.pb.go b/gen/proto/xds/eds.pb.go deleted file mode 100644 index 9e41efb..0000000 --- a/gen/proto/xds/eds.pb.go +++ /dev/null @@ -1,488 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/eds.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// 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. For a given cluster, the -// effective weight of a host is its load_balancing_weight multiplied by the -// load_balancing_weight of its Locality. -type ClusterLoadAssignment struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Name of the cluster. This will be the :ref:`service_name - // ` value if specified - // in the cluster :ref:`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 []*LocalityLbEndpoints `protobuf:"bytes,2,rep,name=endpoints,proto3" json:"endpoints,omitempty"` -} - -func (x *ClusterLoadAssignment) Reset() { - *x = ClusterLoadAssignment{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_eds_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClusterLoadAssignment) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClusterLoadAssignment) ProtoMessage() {} - -func (x *ClusterLoadAssignment) ProtoReflect() protoreflect.Message { - mi := &file_xds_eds_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClusterLoadAssignment.ProtoReflect.Descriptor instead. -func (*ClusterLoadAssignment) Descriptor() ([]byte, []int) { - return file_xds_eds_proto_rawDescGZIP(), []int{0} -} - -func (x *ClusterLoadAssignment) GetClusterName() string { - if x != nil { - return x.ClusterName - } - return "" -} - -func (x *ClusterLoadAssignment) GetEndpoints() []*LocalityLbEndpoints { - if x != nil { - return x.Endpoints - } - return 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. -type LocalityLbEndpoints struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Identifies location of where the upstream hosts run. - Locality *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 - range 1-128. 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. - // - // Weights must be specified for either all localities in a given priority - // level or none. - // - // If unspecified, each locality is presumed to have equal weight in a - // cluster. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - LoadBalancingWeight *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"` -} - -func (x *LocalityLbEndpoints) Reset() { - *x = LocalityLbEndpoints{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_eds_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocalityLbEndpoints) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocalityLbEndpoints) ProtoMessage() {} - -func (x *LocalityLbEndpoints) ProtoReflect() protoreflect.Message { - mi := &file_xds_eds_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LocalityLbEndpoints.ProtoReflect.Descriptor instead. -func (*LocalityLbEndpoints) Descriptor() ([]byte, []int) { - return file_xds_eds_proto_rawDescGZIP(), []int{1} -} - -func (x *LocalityLbEndpoints) GetLocality() *Locality { - if x != nil { - return x.Locality - } - return nil -} - -func (x *LocalityLbEndpoints) GetLbEndpoints() []*LbEndpoint { - if x != nil { - return x.LbEndpoints - } - return nil -} - -func (x *LocalityLbEndpoints) GetLoadBalancingWeight() *UInt32Value { - if x != nil { - return x.LoadBalancingWeight - } - return nil -} - -func (x *LocalityLbEndpoints) GetPriority() uint32 { - if x != nil { - return x.Priority - } - return 0 -} - -// An Endpoint that Envoy can route traffic to. -type LbEndpoint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Upstream host identifier - Endpoint *Endpoint `protobuf:"bytes,1,opt,name=endpoint,proto3" json:"endpoint,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 ForwardAction metadata_match field - // to subset the endpoints considered in cluster load balancing. - Metadata *Metadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` - // The optional load balancing weight of the upstream host, in the range 1 - - // 128. 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. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - LoadBalancingWeight *UInt32Value `protobuf:"bytes,4,opt,name=load_balancing_weight,json=loadBalancingWeight,proto3" json:"load_balancing_weight,omitempty"` -} - -func (x *LbEndpoint) Reset() { - *x = LbEndpoint{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_eds_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LbEndpoint) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LbEndpoint) ProtoMessage() {} - -func (x *LbEndpoint) ProtoReflect() protoreflect.Message { - mi := &file_xds_eds_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LbEndpoint.ProtoReflect.Descriptor instead. -func (*LbEndpoint) Descriptor() ([]byte, []int) { - return file_xds_eds_proto_rawDescGZIP(), []int{2} -} - -func (x *LbEndpoint) GetEndpoint() *Endpoint { - if x != nil { - return x.Endpoint - } - return nil -} - -func (x *LbEndpoint) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *LbEndpoint) GetLoadBalancingWeight() *UInt32Value { - if x != nil { - return x.LoadBalancingWeight - } - return nil -} - -// Upstream host identifier. -type Endpoint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Address *Address `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` -} - -func (x *Endpoint) Reset() { - *x = Endpoint{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_eds_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Endpoint) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Endpoint) ProtoMessage() {} - -func (x *Endpoint) ProtoReflect() protoreflect.Message { - mi := &file_xds_eds_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Endpoint.ProtoReflect.Descriptor instead. -func (*Endpoint) Descriptor() ([]byte, []int) { - return file_xds_eds_proto_rawDescGZIP(), []int{3} -} - -func (x *Endpoint) GetAddress() *Address { - if x != nil { - return x.Address - } - return nil -} - -var File_xds_eds_proto protoreflect.FileDescriptor - -var file_xds_eds_proto_rawDesc = []byte{ - 0x0a, 0x0d, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x03, 0x78, 0x64, 0x73, 0x1a, 0x0e, 0x78, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x72, 0x0a, 0x15, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x62, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x73, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x22, 0xd6, - 0x01, 0x0a, 0x13, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x62, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, - 0x79, 0x12, 0x32, 0x0a, 0x0c, 0x6c, 0x62, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, 0x62, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0b, 0x6c, 0x62, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, - 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, - 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x4c, 0x62, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x45, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x15, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x77, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, - 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x6c, - 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x57, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, - 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0c, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x42, 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, - 0x63, 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2f, 0x67, 0x6f, 0x2f, 0x78, 0x64, 0x73, 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -} - -var ( - file_xds_eds_proto_rawDescOnce sync.Once - file_xds_eds_proto_rawDescData = file_xds_eds_proto_rawDesc -) - -func file_xds_eds_proto_rawDescGZIP() []byte { - file_xds_eds_proto_rawDescOnce.Do(func() { - file_xds_eds_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_eds_proto_rawDescData) - }) - return file_xds_eds_proto_rawDescData -} - -var file_xds_eds_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_xds_eds_proto_goTypes = []interface{}{ - (*ClusterLoadAssignment)(nil), // 0: xds.ClusterLoadAssignment - (*LocalityLbEndpoints)(nil), // 1: xds.LocalityLbEndpoints - (*LbEndpoint)(nil), // 2: xds.LbEndpoint - (*Endpoint)(nil), // 3: xds.Endpoint - (*Locality)(nil), // 4: xds.Locality - (*UInt32Value)(nil), // 5: xds.UInt32Value - (*Metadata)(nil), // 6: xds.Metadata - (*Address)(nil), // 7: xds.Address -} -var file_xds_eds_proto_depIdxs = []int32{ - 1, // 0: xds.ClusterLoadAssignment.endpoints:type_name -> xds.LocalityLbEndpoints - 4, // 1: xds.LocalityLbEndpoints.locality:type_name -> xds.Locality - 2, // 2: xds.LocalityLbEndpoints.lb_endpoints:type_name -> xds.LbEndpoint - 5, // 3: xds.LocalityLbEndpoints.load_balancing_weight:type_name -> xds.UInt32Value - 3, // 4: xds.LbEndpoint.endpoint:type_name -> xds.Endpoint - 6, // 5: xds.LbEndpoint.metadata:type_name -> xds.Metadata - 5, // 6: xds.LbEndpoint.load_balancing_weight:type_name -> xds.UInt32Value - 7, // 7: xds.Endpoint.address:type_name -> xds.Address - 8, // [8:8] is the sub-list for method output_type - 8, // [8:8] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name -} - -func init() { file_xds_eds_proto_init() } -func file_xds_eds_proto_init() { - if File_xds_eds_proto != nil { - return - } - file_xds_base_proto_init() - file_xds_envoy_base_proto_init() - if !protoimpl.UnsafeEnabled { - file_xds_eds_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClusterLoadAssignment); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_eds_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalityLbEndpoints); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_eds_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LbEndpoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_eds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Endpoint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_eds_proto_rawDesc, - NumEnums: 0, - NumMessages: 4, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_eds_proto_goTypes, - DependencyIndexes: file_xds_eds_proto_depIdxs, - MessageInfos: file_xds_eds_proto_msgTypes, - }.Build() - File_xds_eds_proto = out.File - file_xds_eds_proto_rawDesc = nil - file_xds_eds_proto_goTypes = nil - file_xds_eds_proto_depIdxs = nil -} diff --git a/gen/proto/xds/envoy_base.pb.go b/gen/proto/xds/envoy_base.pb.go deleted file mode 100644 index aced6cf..0000000 --- a/gen/proto/xds/envoy_base.pb.go +++ /dev/null @@ -1,812 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/envoy_base.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type SocketAddress_Protocol int32 - -const ( - SocketAddress_TCP SocketAddress_Protocol = 0 - // [#not-implemented-hide:] - SocketAddress_UDP SocketAddress_Protocol = 1 -) - -// Enum value maps for SocketAddress_Protocol. -var ( - SocketAddress_Protocol_name = map[int32]string{ - 0: "TCP", - 1: "UDP", - } - SocketAddress_Protocol_value = map[string]int32{ - "TCP": 0, - "UDP": 1, - } -) - -func (x SocketAddress_Protocol) Enum() *SocketAddress_Protocol { - p := new(SocketAddress_Protocol) - *p = x - return p -} - -func (x SocketAddress_Protocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (SocketAddress_Protocol) Descriptor() protoreflect.EnumDescriptor { - return file_xds_envoy_base_proto_enumTypes[0].Descriptor() -} - -func (SocketAddress_Protocol) Type() protoreflect.EnumType { - return &file_xds_envoy_base_proto_enumTypes[0] -} - -func (x SocketAddress_Protocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use SocketAddress_Protocol.Descriptor instead. -func (SocketAddress_Protocol) EnumDescriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{1, 0} -} - -// Identifies location of where either Envoy runs or where upstream hosts run. -type Locality struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Region this :ref:`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 `, - // either in this message or via :option:`--service-zone`. The meaning of zone - // is context dependent, e.g. `Availability Zone (AZ) - // `_ - // on AWS, `Zone `_ 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"` -} - -func (x *Locality) Reset() { - *x = Locality{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Locality) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Locality) ProtoMessage() {} - -func (x *Locality) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Locality.ProtoReflect.Descriptor instead. -func (*Locality) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{0} -} - -func (x *Locality) GetRegion() string { - if x != nil { - return x.Region - } - return "" -} - -func (x *Locality) GetZone() string { - if x != nil { - return x.Zone - } - return "" -} - -func (x *Locality) GetSubZone() string { - if x != nil { - return x.SubZone - } - return "" -} - -type SocketAddress struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Protocol SocketAddress_Protocol `protobuf:"varint,1,opt,name=protocol,proto3,enum=xds.SocketAddress_Protocol" json:"protocol,omitempty"` - // The address for this socket. :ref:`Listeners ` will bind - // to the address or outbound connections will be made. An empty address is - // not allowed, specify ``0.0.0.0`` or ``::`` to bind any. It's still possible to - // distinguish on an address via the prefix/suffix matching in - // FilterChainMatch after connection. For :ref:`clusters - // `, an address may be either an IP or - // hostname to be resolved via DNS. If it is a hostname, :ref:`resolver_name - // ` should be set unless default - // (i.e. DNS) resolution is expected. - Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - // Types that are assignable to PortSpecifier: - // *SocketAddress_PortValue - // *SocketAddress_NamedPort - PortSpecifier isSocketAddress_PortSpecifier `protobuf_oneof:"port_specifier"` - // The name of the resolver. This must have been registered with Envoy. If this is - // empty, a context dependent default applies. If address is a hostname this - // should be set for resolution other than DNS. If the address is a concrete - // IP address, no resolution will occur. - 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 compatibity - // `_. Binding to ``::`` will - // allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into - // IPv6 space as ``::FFFF:``. - Ipv4Compat bool `protobuf:"varint,6,opt,name=ipv4_compat,json=ipv4Compat,proto3" json:"ipv4_compat,omitempty"` -} - -func (x *SocketAddress) Reset() { - *x = SocketAddress{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SocketAddress) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SocketAddress) ProtoMessage() {} - -func (x *SocketAddress) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SocketAddress.ProtoReflect.Descriptor instead. -func (*SocketAddress) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{1} -} - -func (x *SocketAddress) GetProtocol() SocketAddress_Protocol { - if x != nil { - return x.Protocol - } - return SocketAddress_TCP -} - -func (x *SocketAddress) GetAddress() string { - if x != nil { - return x.Address - } - return "" -} - -func (m *SocketAddress) GetPortSpecifier() isSocketAddress_PortSpecifier { - if m != nil { - return m.PortSpecifier - } - return nil -} - -func (x *SocketAddress) GetPortValue() uint32 { - if x, ok := x.GetPortSpecifier().(*SocketAddress_PortValue); ok { - return x.PortValue - } - return 0 -} - -func (x *SocketAddress) GetNamedPort() string { - if x, ok := x.GetPortSpecifier().(*SocketAddress_NamedPort); ok { - return x.NamedPort - } - return "" -} - -func (x *SocketAddress) GetResolverName() string { - if x != nil { - return x.ResolverName - } - return "" -} - -func (x *SocketAddress) GetIpv4Compat() bool { - if x != nil { - return x.Ipv4Compat - } - return false -} - -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 { - // This is only valid if :ref:`resolver_name - // ` is specified below and the - // named resolver is capable of named port resolution. - NamedPort string `protobuf:"bytes,4,opt,name=named_port,json=namedPort,proto3,oneof"` -} - -func (*SocketAddress_PortValue) isSocketAddress_PortSpecifier() {} - -func (*SocketAddress_NamedPort) isSocketAddress_PortSpecifier() {} - -// Metadata provides additional inputs to filters based on matched listeners, -// filter chains, routes and endpoints. It is structured as a map 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. -// -// 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": }}`` 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 { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 `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"` -} - -func (x *Metadata) Reset() { - *x = Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Metadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Metadata) ProtoMessage() {} - -func (x *Metadata) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Metadata.ProtoReflect.Descriptor instead. -func (*Metadata) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{2} -} - -func (x *Metadata) GetFilterMetadata() map[string]*Struct { - if x != nil { - return x.FilterMetadata - } - 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 { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Address: - // *Address_SocketAddress - // *Address_Pipe - Address isAddress_Address `protobuf_oneof:"address"` -} - -func (x *Address) Reset() { - *x = Address{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Address) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Address) ProtoMessage() {} - -func (x *Address) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Address.ProtoReflect.Descriptor instead. -func (*Address) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{3} -} - -func (m *Address) GetAddress() isAddress_Address { - if m != nil { - return m.Address - } - return nil -} - -func (x *Address) GetSocketAddress() *SocketAddress { - if x, ok := x.GetAddress().(*Address_SocketAddress); ok { - return x.SocketAddress - } - return nil -} - -func (x *Address) GetPipe() *Pipe { - if x, ok := x.GetAddress().(*Address_Pipe); ok { - return x.Pipe - } - return nil -} - -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() {} - -type Pipe struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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"` -} - -func (x *Pipe) Reset() { - *x = Pipe{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Pipe) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Pipe) ProtoMessage() {} - -func (x *Pipe) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Pipe.ProtoReflect.Descriptor instead. -func (*Pipe) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{4} -} - -func (x *Pipe) GetPath() string { - if x != nil { - return x.Path - } - return "" -} - -type BindConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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"` -} - -func (x *BindConfig) Reset() { - *x = BindConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BindConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BindConfig) ProtoMessage() {} - -func (x *BindConfig) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BindConfig.ProtoReflect.Descriptor instead. -func (*BindConfig) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{5} -} - -func (x *BindConfig) GetSourceAddress() *SocketAddress { - if x != nil { - return x.SourceAddress - } - return nil -} - -// CidrRange specifies an IP Address and a prefix length to construct -// the subnet mask for a `CIDR `_ range. -type CidrRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 *UInt32Value `protobuf:"bytes,2,opt,name=prefix_len,json=prefixLen,proto3" json:"prefix_len,omitempty"` -} - -func (x *CidrRange) Reset() { - *x = CidrRange{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_base_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CidrRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CidrRange) ProtoMessage() {} - -func (x *CidrRange) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_base_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CidrRange.ProtoReflect.Descriptor instead. -func (*CidrRange) Descriptor() ([]byte, []int) { - return file_xds_envoy_base_proto_rawDescGZIP(), []int{6} -} - -func (x *CidrRange) GetAddressPrefix() string { - if x != nil { - return x.AddressPrefix - } - return "" -} - -func (x *CidrRange) GetPrefixLen() *UInt32Value { - if x != nil { - return x.PrefixLen - } - return nil -} - -var File_xds_envoy_base_proto protoreflect.FileDescriptor - -var file_xds_envoy_base_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x62, 0x61, 0x73, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x78, 0x64, 0x73, 0x1a, 0x0e, 0x78, 0x64, 0x73, - 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x51, 0x0a, 0x08, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, - 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, - 0x6f, 0x6e, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x5f, 0x7a, 0x6f, 0x6e, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x5a, 0x6f, 0x6e, 0x65, 0x22, 0x9a, - 0x02, 0x0a, 0x0d, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x12, 0x37, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x0a, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x70, - 0x76, 0x34, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x69, 0x70, 0x76, 0x34, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x22, 0x1c, 0x0a, 0x08, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, - 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x70, 0x6f, 0x72, - 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x08, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x4a, 0x0a, 0x0f, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x1a, 0x4e, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0x72, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x3b, 0x0a, 0x0e, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x53, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, - 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1f, 0x0a, 0x04, - 0x70, 0x69, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x78, 0x64, 0x73, - 0x2e, 0x50, 0x69, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x70, 0x65, 0x42, 0x09, 0x0a, - 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x1a, 0x0a, 0x04, 0x50, 0x69, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x70, 0x61, 0x74, 0x68, 0x22, 0x47, 0x0a, 0x0a, 0x42, 0x69, 0x6e, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x64, 0x73, - 0x2e, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0d, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x63, 0x0a, - 0x09, 0x43, 0x69, 0x64, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x2f, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x6c, 0x65, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, - 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x4c, - 0x65, 0x6e, 0x42, 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, - 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, - 0x78, 0x64, 0x73, 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xds_envoy_base_proto_rawDescOnce sync.Once - file_xds_envoy_base_proto_rawDescData = file_xds_envoy_base_proto_rawDesc -) - -func file_xds_envoy_base_proto_rawDescGZIP() []byte { - file_xds_envoy_base_proto_rawDescOnce.Do(func() { - file_xds_envoy_base_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_envoy_base_proto_rawDescData) - }) - return file_xds_envoy_base_proto_rawDescData -} - -var file_xds_envoy_base_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_xds_envoy_base_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_xds_envoy_base_proto_goTypes = []interface{}{ - (SocketAddress_Protocol)(0), // 0: xds.SocketAddress.Protocol - (*Locality)(nil), // 1: xds.Locality - (*SocketAddress)(nil), // 2: xds.SocketAddress - (*Metadata)(nil), // 3: xds.Metadata - (*Address)(nil), // 4: xds.Address - (*Pipe)(nil), // 5: xds.Pipe - (*BindConfig)(nil), // 6: xds.BindConfig - (*CidrRange)(nil), // 7: xds.CidrRange - nil, // 8: xds.Metadata.FilterMetadataEntry - (*UInt32Value)(nil), // 9: xds.UInt32Value - (*Struct)(nil), // 10: xds.Struct -} -var file_xds_envoy_base_proto_depIdxs = []int32{ - 0, // 0: xds.SocketAddress.protocol:type_name -> xds.SocketAddress.Protocol - 8, // 1: xds.Metadata.filter_metadata:type_name -> xds.Metadata.FilterMetadataEntry - 2, // 2: xds.Address.socket_address:type_name -> xds.SocketAddress - 5, // 3: xds.Address.pipe:type_name -> xds.Pipe - 2, // 4: xds.BindConfig.source_address:type_name -> xds.SocketAddress - 9, // 5: xds.CidrRange.prefix_len:type_name -> xds.UInt32Value - 10, // 6: xds.Metadata.FilterMetadataEntry.value:type_name -> xds.Struct - 7, // [7:7] is the sub-list for method output_type - 7, // [7:7] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name -} - -func init() { file_xds_envoy_base_proto_init() } -func file_xds_envoy_base_proto_init() { - if File_xds_envoy_base_proto != nil { - return - } - file_xds_base_proto_init() - if !protoimpl.UnsafeEnabled { - file_xds_envoy_base_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Locality); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SocketAddress); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Address); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pipe); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BindConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_base_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CidrRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_xds_envoy_base_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*SocketAddress_PortValue)(nil), - (*SocketAddress_NamedPort)(nil), - } - file_xds_envoy_base_proto_msgTypes[3].OneofWrappers = []interface{}{ - (*Address_SocketAddress)(nil), - (*Address_Pipe)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_envoy_base_proto_rawDesc, - NumEnums: 1, - NumMessages: 8, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_envoy_base_proto_goTypes, - DependencyIndexes: file_xds_envoy_base_proto_depIdxs, - EnumInfos: file_xds_envoy_base_proto_enumTypes, - MessageInfos: file_xds_envoy_base_proto_msgTypes, - }.Build() - File_xds_envoy_base_proto = out.File - file_xds_envoy_base_proto_rawDesc = nil - file_xds_envoy_base_proto_goTypes = nil - file_xds_envoy_base_proto_depIdxs = nil -} diff --git a/gen/proto/xds/envoy_simplified.pb.go b/gen/proto/xds/envoy_simplified.pb.go deleted file mode 100644 index cfbedc8..0000000 --- a/gen/proto/xds/envoy_simplified.pb.go +++ /dev/null @@ -1,511 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/envoy_simplified.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -// 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. -type Node struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 `, :ref:`CDS - // `, and :ref:`HTTP 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 `, :ref:`health check cluster - // verification `, - // :ref:`runtime override directory `, - // :ref:`user agent addition `, - // :ref:`HTTP global rate limiting `, - // :ref:`CDS `, and :ref:`HTTP 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 `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"` -} - -func (x *Node) Reset() { - *x = Node{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_simplified_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Node) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Node) ProtoMessage() {} - -func (x *Node) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_simplified_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Node.ProtoReflect.Descriptor instead. -func (*Node) Descriptor() ([]byte, []int) { - return file_xds_envoy_simplified_proto_rawDescGZIP(), []int{0} -} - -func (x *Node) GetId() string { - if x != nil { - return x.Id - } - return "" -} - -func (x *Node) GetCluster() string { - if x != nil { - return x.Cluster - } - return "" -} - -func (x *Node) GetMetadata() *Struct { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Node) GetLocality() *Locality { - if x != nil { - return x.Locality - } - return nil -} - -func (x *Node) GetBuildVersion() string { - if x != nil { - return x.BuildVersion - } - return "" -} - -// A DiscoveryRequest requests a set of versioned resources of the same type for -// a given Envoy node on some API. -type DiscoveryRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 *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 expect empty resource_names, since this is global - // discovery for the Envoy instance. 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 if no nonce is available, e.g. at startup or for non-stream - // xDS implementations. - ResponseNonce string `protobuf:"bytes,5,opt,name=response_nonce,json=responseNonce,proto3" json:"response_nonce,omitempty"` - // This is populated when the previous :ref:`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. - // google.rpc.Status - ErrorDetail *Status `protobuf:"bytes,6,opt,name=error_detail,json=errorDetail,proto3" json:"error_detail,omitempty"` - // Extension to Envoy - allow push - Resources []*Any `protobuf:"bytes,7,rep,name=resources,proto3" json:"resources,omitempty"` -} - -func (x *DiscoveryRequest) Reset() { - *x = DiscoveryRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_simplified_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DiscoveryRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DiscoveryRequest) ProtoMessage() {} - -func (x *DiscoveryRequest) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_simplified_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DiscoveryRequest.ProtoReflect.Descriptor instead. -func (*DiscoveryRequest) Descriptor() ([]byte, []int) { - return file_xds_envoy_simplified_proto_rawDescGZIP(), []int{1} -} - -func (x *DiscoveryRequest) GetVersionInfo() string { - if x != nil { - return x.VersionInfo - } - return "" -} - -func (x *DiscoveryRequest) GetNode() *Node { - if x != nil { - return x.Node - } - return nil -} - -func (x *DiscoveryRequest) GetResourceNames() []string { - if x != nil { - return x.ResourceNames - } - return nil -} - -func (x *DiscoveryRequest) GetTypeUrl() string { - if x != nil { - return x.TypeUrl - } - return "" -} - -func (x *DiscoveryRequest) GetResponseNonce() string { - if x != nil { - return x.ResponseNonce - } - return "" -} - -func (x *DiscoveryRequest) GetErrorDetail() *Status { - if x != nil { - return x.ErrorDetail - } - return nil -} - -func (x *DiscoveryRequest) GetResources() []*Any { - if x != nil { - return x.Resources - } - return nil -} - -type DiscoveryResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - // google.protobuf.Any - Resources []*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. This must be consistent with the type_url in the - // Any messages for resources if resources is non-empty. This effectively - // identifies the xDS API when muxing over ADS. - 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"` -} - -func (x *DiscoveryResponse) Reset() { - *x = DiscoveryResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_envoy_simplified_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DiscoveryResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DiscoveryResponse) ProtoMessage() {} - -func (x *DiscoveryResponse) ProtoReflect() protoreflect.Message { - mi := &file_xds_envoy_simplified_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DiscoveryResponse.ProtoReflect.Descriptor instead. -func (*DiscoveryResponse) Descriptor() ([]byte, []int) { - return file_xds_envoy_simplified_proto_rawDescGZIP(), []int{2} -} - -func (x *DiscoveryResponse) GetVersionInfo() string { - if x != nil { - return x.VersionInfo - } - return "" -} - -func (x *DiscoveryResponse) GetResources() []*Any { - if x != nil { - return x.Resources - } - return nil -} - -func (x *DiscoveryResponse) GetCanary() bool { - if x != nil { - return x.Canary - } - return false -} - -func (x *DiscoveryResponse) GetTypeUrl() string { - if x != nil { - return x.TypeUrl - } - return "" -} - -func (x *DiscoveryResponse) GetNonce() string { - if x != nil { - return x.Nonce - } - return "" -} - -var File_xds_envoy_simplified_proto protoreflect.FileDescriptor - -var file_xds_envoy_simplified_proto_rawDesc = []byte{ - 0x0a, 0x1a, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x69, 0x66, 0x69, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x78, 0x64, - 0x73, 0x1a, 0x0e, 0x78, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x14, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, 0x62, 0x61, 0x73, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x74, 0x79, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x23, - 0x0a, 0x0d, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x02, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x04, 0x6e, - 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x25, 0x0a, 0x0e, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4e, 0x6f, - 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x12, 0x26, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x6e, 0x79, - 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x11, - 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x63, 0x61, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x61, - 0x6e, 0x61, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, - 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x42, 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, - 0x2d, 0x6d, 0x65, 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, - 0x67, 0x6f, 0x2f, 0x78, 0x64, 0x73, 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, -} - -var ( - file_xds_envoy_simplified_proto_rawDescOnce sync.Once - file_xds_envoy_simplified_proto_rawDescData = file_xds_envoy_simplified_proto_rawDesc -) - -func file_xds_envoy_simplified_proto_rawDescGZIP() []byte { - file_xds_envoy_simplified_proto_rawDescOnce.Do(func() { - file_xds_envoy_simplified_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_envoy_simplified_proto_rawDescData) - }) - return file_xds_envoy_simplified_proto_rawDescData -} - -var file_xds_envoy_simplified_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_xds_envoy_simplified_proto_goTypes = []interface{}{ - (*Node)(nil), // 0: xds.Node - (*DiscoveryRequest)(nil), // 1: xds.DiscoveryRequest - (*DiscoveryResponse)(nil), // 2: xds.DiscoveryResponse - (*Struct)(nil), // 3: xds.Struct - (*Locality)(nil), // 4: xds.Locality - (*Status)(nil), // 5: xds.Status - (*Any)(nil), // 6: xds.Any -} -var file_xds_envoy_simplified_proto_depIdxs = []int32{ - 3, // 0: xds.Node.metadata:type_name -> xds.Struct - 4, // 1: xds.Node.locality:type_name -> xds.Locality - 0, // 2: xds.DiscoveryRequest.node:type_name -> xds.Node - 5, // 3: xds.DiscoveryRequest.error_detail:type_name -> xds.Status - 6, // 4: xds.DiscoveryRequest.resources:type_name -> xds.Any - 6, // 5: xds.DiscoveryResponse.resources:type_name -> xds.Any - 6, // [6:6] is the sub-list for method output_type - 6, // [6:6] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name -} - -func init() { file_xds_envoy_simplified_proto_init() } -func file_xds_envoy_simplified_proto_init() { - if File_xds_envoy_simplified_proto != nil { - return - } - file_xds_base_proto_init() - file_xds_envoy_base_proto_init() - if !protoimpl.UnsafeEnabled { - file_xds_envoy_simplified_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Node); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_simplified_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiscoveryRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_envoy_simplified_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DiscoveryResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_envoy_simplified_proto_rawDesc, - NumEnums: 0, - NumMessages: 3, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_envoy_simplified_proto_goTypes, - DependencyIndexes: file_xds_envoy_simplified_proto_depIdxs, - MessageInfos: file_xds_envoy_simplified_proto_msgTypes, - }.Build() - File_xds_envoy_simplified_proto = out.File - file_xds_envoy_simplified_proto_rawDesc = nil - file_xds_envoy_simplified_proto_goTypes = nil - file_xds_envoy_simplified_proto_depIdxs = nil -} diff --git a/gen/proto/xds/lds.pb.go b/gen/proto/xds/lds.pb.go deleted file mode 100644 index 1b8de72..0000000 --- a/gen/proto/xds/lds.pb.go +++ /dev/null @@ -1,1908 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.28.0 -// protoc (unknown) -// source: xds/lds.proto - -package xds - -import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - reflect "reflect" - sync "sync" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -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 -) - -// Enum value maps for Listener_DrainType. -var ( - Listener_DrainType_name = map[int32]string{ - 0: "DEFAULT", - 1: "MODIFY_ONLY", - } - Listener_DrainType_value = map[string]int32{ - "DEFAULT": 0, - "MODIFY_ONLY": 1, - } -) - -func (x Listener_DrainType) Enum() *Listener_DrainType { - p := new(Listener_DrainType) - *p = x - return p -} - -func (x Listener_DrainType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Listener_DrainType) Descriptor() protoreflect.EnumDescriptor { - return file_xds_lds_proto_enumTypes[0].Descriptor() -} - -func (Listener_DrainType) Type() protoreflect.EnumType { - return &file_xds_lds_proto_enumTypes[0] -} - -func (x Listener_DrainType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Listener_DrainType.Descriptor instead. -func (Listener_DrainType) EnumDescriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{0, 0} -} - -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 -) - -// Enum value maps for TlsParameters_TlsProtocol. -var ( - TlsParameters_TlsProtocol_name = map[int32]string{ - 0: "TLS_AUTO", - 1: "TLSv1_0", - 2: "TLSv1_1", - 3: "TLSv1_2", - 4: "TLSv1_3", - } - 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) Enum() *TlsParameters_TlsProtocol { - p := new(TlsParameters_TlsProtocol) - *p = x - return p -} - -func (x TlsParameters_TlsProtocol) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (TlsParameters_TlsProtocol) Descriptor() protoreflect.EnumDescriptor { - return file_xds_lds_proto_enumTypes[1].Descriptor() -} - -func (TlsParameters_TlsProtocol) Type() protoreflect.EnumType { - return &file_xds_lds_proto_enumTypes[1] -} - -func (x TlsParameters_TlsProtocol) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use TlsParameters_TlsProtocol.Descriptor instead. -func (TlsParameters_TlsProtocol) EnumDescriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{10, 0} -} - -type Listener struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 ` a unique name must be provided. - // By default, the maximum length of a listener's name is limited to 60 characters. This limit can - // be increased by setting the :option:`--max-obj-name-len` command line argument to the desired - // value. - 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 *Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` - // A list of filter chains to consider for this listener. The - // :ref:`FilterChain ` with the most specific - // :ref:`FilterChainMatch ` criteria is used on a - // connection. - // - // .. attention:: - // - // In the current version, multiple filter chains are supported **only** so that SNI can be - // configured. See the :ref:`FAQ entry ` on how to configure SNI for more - // information. When multiple filter chains are configured, each filter chain must have an - // **identical** set of :ref:`filters `. If the - // filters differ, the configuration will fail to load. In the future, this limitation will be - // relaxed such that different filters can be used depending on which filter chain matches - // (based on SNI or some other parameter). - FilterChains []*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 ` - // :ref:`listener filter ` instead. - // - // Note that hand off to another listener is *NOT* performed without this flag. Once - // :ref:`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. - // - // Deprecated: Do not use. - UseOriginalDst *BoolValue `protobuf:"bytes,4,opt,name=use_original_dst,json=useOriginalDst,proto3" json:"use_original_dst,omitempty"` - // Soft limit on size of the listener’s new connection read and write buffers. - // If unspecified, an implementation defined default is applied (1MiB). - PerConnectionBufferLimitBytes *UInt32Value `protobuf:"bytes,5,opt,name=per_connection_buffer_limit_bytes,json=perConnectionBufferLimitBytes,proto3" json:"per_connection_buffer_limit_bytes,omitempty"` - // Listener metadata. - Metadata *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=xds.Listener_DrainType" json:"drain_type,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. Requires Envoy to run with the *CAP_NET_ADMIN* capability. Defaults to false. - Transparent bool `protobuf:"varint,10,opt,name=transparent,proto3" json:"transparent,omitempty"` -} - -func (x *Listener) Reset() { - *x = Listener{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Listener) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Listener) ProtoMessage() {} - -func (x *Listener) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Listener.ProtoReflect.Descriptor instead. -func (*Listener) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{0} -} - -func (x *Listener) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Listener) GetAddress() *Address { - if x != nil { - return x.Address - } - return nil -} - -func (x *Listener) GetFilterChains() []*FilterChain { - if x != nil { - return x.FilterChains - } - return nil -} - -// Deprecated: Do not use. -func (x *Listener) GetUseOriginalDst() *BoolValue { - if x != nil { - return x.UseOriginalDst - } - return nil -} - -func (x *Listener) GetPerConnectionBufferLimitBytes() *UInt32Value { - if x != nil { - return x.PerConnectionBufferLimitBytes - } - return nil -} - -func (x *Listener) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *Listener) GetDeprecatedV1() *Listener_DeprecatedV1 { - if x != nil { - return x.DeprecatedV1 - } - return nil -} - -func (x *Listener) GetDrainType() Listener_DrainType { - if x != nil { - return x.DrainType - } - return Listener_DEFAULT -} - -func (x *Listener) GetTransparent() bool { - if x != nil { - return x.Transparent - } - return false -} - -// A filter chain wraps a set of match criteria, an option TLS context, a set of filters, and -// various other parameters. -type FilterChain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - TlsContext *DownstreamTlsContext `protobuf:"bytes,2,opt,name=tls_context,json=tlsContext,proto3" json:"tls_context,omitempty"` - // 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 *BoolValue `protobuf:"bytes,4,opt,name=use_proxy_proto,json=useProxyProto,proto3" json:"use_proxy_proto,omitempty"` - // [#not-implemented-hide:] filter chain metadata. - Metadata *Metadata `protobuf:"bytes,5,opt,name=metadata,proto3" json:"metadata,omitempty"` - // See :ref:`base.TransportSocket` description. - TransportSocket *TransportSocket `protobuf:"bytes,6,opt,name=transport_socket,json=transportSocket,proto3" json:"transport_socket,omitempty"` -} - -func (x *FilterChain) Reset() { - *x = FilterChain{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FilterChain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FilterChain) ProtoMessage() {} - -func (x *FilterChain) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FilterChain.ProtoReflect.Descriptor instead. -func (*FilterChain) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{1} -} - -func (x *FilterChain) GetFilterChainMatch() *FilterChainMatch { - if x != nil { - return x.FilterChainMatch - } - return nil -} - -func (x *FilterChain) GetTlsContext() *DownstreamTlsContext { - if x != nil { - return x.TlsContext - } - return nil -} - -func (x *FilterChain) GetFilters() []*Filter { - if x != nil { - return x.Filters - } - return nil -} - -func (x *FilterChain) GetUseProxyProto() *BoolValue { - if x != nil { - return x.UseProxyProto - } - return nil -} - -func (x *FilterChain) GetMetadata() *Metadata { - if x != nil { - return x.Metadata - } - return nil -} - -func (x *FilterChain) GetTransportSocket() *TransportSocket { - if x != nil { - return x.TransportSocket - } - return nil -} - -// Specifies the match criteria for selecting a specific filter chain for a -// listener. -type FilterChainMatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // If non-empty, the SNI domains to consider. May contain a wildcard prefix, - // e.g. ``*.example.com``. - // - // .. attention:: - // - // See the :ref:`FAQ entry ` on how to configure SNI for more - // information. - SniDomains []string `protobuf:"bytes,1,rep,name=sni_domains,json=sniDomains,proto3" json:"sni_domains,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. - // [#not-implemented-hide:] - PrefixRanges []*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 *UInt32Value `protobuf:"bytes,5,opt,name=suffix_len,json=suffixLen,proto3" json:"suffix_len,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. - // [#not-implemented-hide:] - SourcePrefixRanges []*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. - // [#not-implemented-hide:] - SourcePorts []*UInt32Value `protobuf:"bytes,7,rep,name=source_ports,json=sourcePorts,proto3" json:"source_ports,omitempty"` - // Optional destination port to consider when use_original_dst is set on the - // listener in determining a filter chain match. - // [#not-implemented-hide:] - DestinationPort *UInt32Value `protobuf:"bytes,8,opt,name=destination_port,json=destinationPort,proto3" json:"destination_port,omitempty"` -} - -func (x *FilterChainMatch) Reset() { - *x = FilterChainMatch{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FilterChainMatch) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FilterChainMatch) ProtoMessage() {} - -func (x *FilterChainMatch) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FilterChainMatch.ProtoReflect.Descriptor instead. -func (*FilterChainMatch) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{2} -} - -func (x *FilterChainMatch) GetSniDomains() []string { - if x != nil { - return x.SniDomains - } - return nil -} - -func (x *FilterChainMatch) GetPrefixRanges() []*CidrRange { - if x != nil { - return x.PrefixRanges - } - return nil -} - -func (x *FilterChainMatch) GetAddressSuffix() string { - if x != nil { - return x.AddressSuffix - } - return "" -} - -func (x *FilterChainMatch) GetSuffixLen() *UInt32Value { - if x != nil { - return x.SuffixLen - } - return nil -} - -func (x *FilterChainMatch) GetSourcePrefixRanges() []*CidrRange { - if x != nil { - return x.SourcePrefixRanges - } - return nil -} - -func (x *FilterChainMatch) GetSourcePorts() []*UInt32Value { - if x != nil { - return x.SourcePorts - } - return nil -} - -func (x *FilterChainMatch) GetDestinationPort() *UInt32Value { - if x != nil { - return x.DestinationPort - } - return nil -} - -type Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The name of the filter to instantiate. The name must match a supported - // filter. The built-in filters are: - // - // [#comment:TODO(mattklein123): Auto generate the following list] - // * :ref:`envoy.client_ssl_auth` - // * :ref:`envoy.echo ` - // * :ref:`envoy.http_connection_manager ` - // * :ref:`envoy.mongo_proxy ` - // * :ref:`envoy.ratelimit ` - // * :ref:`envoy.redis_proxy ` - // * :ref:`envoy.tcp_proxy ` - 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 *Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` - // [#not-implemented-hide:] - // - // Deprecated: Do not use. - DeprecatedV1 *Filter_DeprecatedV1 `protobuf:"bytes,3,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` -} - -func (x *Filter) Reset() { - *x = Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Filter) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Filter) ProtoMessage() {} - -func (x *Filter) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Filter.ProtoReflect.Descriptor instead. -func (*Filter) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{3} -} - -func (x *Filter) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *Filter) GetConfig() *Struct { - if x != nil { - return x.Config - } - return nil -} - -// Deprecated: Do not use. -func (x *Filter) GetDeprecatedV1() *Filter_DeprecatedV1 { - if x != nil { - return x.DeprecatedV1 - } - return nil -} - -// Configuration for transport socket in :ref:`listeners ` and -// :ref:`clusters `. 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 { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - Config *Struct `protobuf:"bytes,2,opt,name=config,proto3" json:"config,omitempty"` -} - -func (x *TransportSocket) Reset() { - *x = TransportSocket{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TransportSocket) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TransportSocket) ProtoMessage() {} - -func (x *TransportSocket) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TransportSocket.ProtoReflect.Descriptor instead. -func (*TransportSocket) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{4} -} - -func (x *TransportSocket) GetName() string { - if x != nil { - return x.Name - } - return "" -} - -func (x *TransportSocket) GetConfig() *Struct { - if x != nil { - return x.Config - } - return nil -} - -type DownstreamTlsContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 *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 *BoolValue `protobuf:"bytes,3,opt,name=require_sni,json=requireSni,proto3" json:"require_sni,omitempty"` -} - -func (x *DownstreamTlsContext) Reset() { - *x = DownstreamTlsContext{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DownstreamTlsContext) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DownstreamTlsContext) ProtoMessage() {} - -func (x *DownstreamTlsContext) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DownstreamTlsContext.ProtoReflect.Descriptor instead. -func (*DownstreamTlsContext) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{5} -} - -func (x *DownstreamTlsContext) GetCommonTlsContext() *CommonTlsContext { - if x != nil { - return x.CommonTlsContext - } - return nil -} - -func (x *DownstreamTlsContext) GetRequireClientCertificate() *BoolValue { - if x != nil { - return x.RequireClientCertificate - } - return nil -} - -func (x *DownstreamTlsContext) GetRequireSni() *BoolValue { - if x != nil { - return x.RequireSni - } - return nil -} - -// TLS context shared by both client and server TLS contexts. -type CommonTlsContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // TLS protocol versions, cipher suites etc. - TlsParams *TlsParameters `protobuf:"bytes,1,opt,name=tls_params,json=tlsParams,proto3" json:"tls_params,omitempty"` - // Multiple TLS certificates can be associated with the same context. - // E.g. to allow both RSA and ECDSA certificates, two TLS certificates can be configured. - // - // .. attention:: - // - // Although this is a list, currently only a single certificate is supported. This will be - // relaxed in the future. - TlsCertificates []*TlsCertificate `protobuf:"bytes,2,rep,name=tls_certificates,json=tlsCertificates,proto3" json:"tls_certificates,omitempty"` - // How to validate peer certificates. - ValidationContext *CertificateValidationContext `protobuf:"bytes,3,opt,name=validation_context,json=validationContext,proto3" json:"validation_context,omitempty"` - // 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 ` 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"` - // [#not-implemented-hide:] - // - // Deprecated: Do not use. - DeprecatedV1 *CommonTlsContext_DeprecatedV1 `protobuf:"bytes,5,opt,name=deprecated_v1,json=deprecatedV1,proto3" json:"deprecated_v1,omitempty"` -} - -func (x *CommonTlsContext) Reset() { - *x = CommonTlsContext{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CommonTlsContext) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CommonTlsContext) ProtoMessage() {} - -func (x *CommonTlsContext) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CommonTlsContext.ProtoReflect.Descriptor instead. -func (*CommonTlsContext) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{6} -} - -func (x *CommonTlsContext) GetTlsParams() *TlsParameters { - if x != nil { - return x.TlsParams - } - return nil -} - -func (x *CommonTlsContext) GetTlsCertificates() []*TlsCertificate { - if x != nil { - return x.TlsCertificates - } - return nil -} - -func (x *CommonTlsContext) GetValidationContext() *CertificateValidationContext { - if x != nil { - return x.ValidationContext - } - return nil -} - -func (x *CommonTlsContext) GetAlpnProtocols() []string { - if x != nil { - return x.AlpnProtocols - } - return nil -} - -// Deprecated: Do not use. -func (x *CommonTlsContext) GetDeprecatedV1() *CommonTlsContext_DeprecatedV1 { - if x != nil { - return x.DeprecatedV1 - } - return nil -} - -type CertificateValidationContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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 - // `, - // :ref:`verify_certificate_hash - // `, or - // :ref:`verify_subject_alt_name - // `) is also - // specified. - // - // See :ref:`the TLS overview ` for a list of common - // system CA locations. - TrustedCa *DataSource `protobuf:"bytes,1,opt,name=trusted_ca,json=trustedCa,proto3" json:"trusted_ca,omitempty"` - // If specified, Envoy will verify (pin) the hex-encoded SHA-256 hash of - // the presented certificate. - VerifyCertificateHash []string `protobuf:"bytes,2,rep,name=verify_certificate_hash,json=verifyCertificateHash,proto3" json:"verify_certificate_hash,omitempty"` - // If specified, Envoy will verify (pin) base64-encoded SHA-256 hash of - // the Subject Public Key Information (SPKI) of the presented certificate. - // This is the same format as used in HTTP Public Key Pinning. - // [#not-implemented-hide:] - VerifySpkiSha256 []string `protobuf:"bytes,3,rep,name=verify_spki_sha256,json=verifySpkiSha256,proto3" json:"verify_spki_sha256,omitempty"` - // An optional list of subject alternative names. If specified, Envoy will verify that - // the certificate’s subject alternative name matches one of the specified values. - 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 *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 *BoolValue `protobuf:"bytes,6,opt,name=require_signed_certificate_timestamp,json=requireSignedCertificateTimestamp,proto3" json:"require_signed_certificate_timestamp,omitempty"` - // An optional `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 *DataSource `protobuf:"bytes,7,opt,name=crl,proto3" json:"crl,omitempty"` -} - -func (x *CertificateValidationContext) Reset() { - *x = CertificateValidationContext{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CertificateValidationContext) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CertificateValidationContext) ProtoMessage() {} - -func (x *CertificateValidationContext) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CertificateValidationContext.ProtoReflect.Descriptor instead. -func (*CertificateValidationContext) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{7} -} - -func (x *CertificateValidationContext) GetTrustedCa() *DataSource { - if x != nil { - return x.TrustedCa - } - return nil -} - -func (x *CertificateValidationContext) GetVerifyCertificateHash() []string { - if x != nil { - return x.VerifyCertificateHash - } - return nil -} - -func (x *CertificateValidationContext) GetVerifySpkiSha256() []string { - if x != nil { - return x.VerifySpkiSha256 - } - return nil -} - -func (x *CertificateValidationContext) GetVerifySubjectAltName() []string { - if x != nil { - return x.VerifySubjectAltName - } - return nil -} - -func (x *CertificateValidationContext) GetRequireOcspStaple() *BoolValue { - if x != nil { - return x.RequireOcspStaple - } - return nil -} - -func (x *CertificateValidationContext) GetRequireSignedCertificateTimestamp() *BoolValue { - if x != nil { - return x.RequireSignedCertificateTimestamp - } - return nil -} - -func (x *CertificateValidationContext) GetCrl() *DataSource { - if x != nil { - return x.Crl - } - return nil -} - -type TlsCertificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // The TLS certificate chain. - CertificateChain *DataSource `protobuf:"bytes,1,opt,name=certificate_chain,json=certificateChain,proto3" json:"certificate_chain,omitempty"` - // The TLS private key. - PrivateKey *DataSource `protobuf:"bytes,2,opt,name=private_key,json=privateKey,proto3" json:"private_key,omitempty"` - // [#not-implemented-hide:] - Password *DataSource `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` - // [#not-implemented-hide:] - OcspStaple *DataSource `protobuf:"bytes,4,opt,name=ocsp_staple,json=ocspStaple,proto3" json:"ocsp_staple,omitempty"` - // [#not-implemented-hide:] - SignedCertificateTimestamp []*DataSource `protobuf:"bytes,5,rep,name=signed_certificate_timestamp,json=signedCertificateTimestamp,proto3" json:"signed_certificate_timestamp,omitempty"` -} - -func (x *TlsCertificate) Reset() { - *x = TlsCertificate{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TlsCertificate) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TlsCertificate) ProtoMessage() {} - -func (x *TlsCertificate) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TlsCertificate.ProtoReflect.Descriptor instead. -func (*TlsCertificate) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{8} -} - -func (x *TlsCertificate) GetCertificateChain() *DataSource { - if x != nil { - return x.CertificateChain - } - return nil -} - -func (x *TlsCertificate) GetPrivateKey() *DataSource { - if x != nil { - return x.PrivateKey - } - return nil -} - -func (x *TlsCertificate) GetPassword() *DataSource { - if x != nil { - return x.Password - } - return nil -} - -func (x *TlsCertificate) GetOcspStaple() *DataSource { - if x != nil { - return x.OcspStaple - } - return nil -} - -func (x *TlsCertificate) GetSignedCertificateTimestamp() []*DataSource { - if x != nil { - return x.SignedCertificateTimestamp - } - return nil -} - -// Data source consisting of either a file or an inline value. -type DataSource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Specifier: - // *DataSource_Filename - // *DataSource_InlineBytes - // *DataSource_InlineString - Specifier isDataSource_Specifier `protobuf_oneof:"specifier"` -} - -func (x *DataSource) Reset() { - *x = DataSource{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DataSource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DataSource) ProtoMessage() {} - -func (x *DataSource) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DataSource.ProtoReflect.Descriptor instead. -func (*DataSource) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{9} -} - -func (m *DataSource) GetSpecifier() isDataSource_Specifier { - if m != nil { - return m.Specifier - } - return nil -} - -func (x *DataSource) GetFilename() string { - if x, ok := x.GetSpecifier().(*DataSource_Filename); ok { - return x.Filename - } - return "" -} - -func (x *DataSource) GetInlineBytes() []byte { - if x, ok := x.GetSpecifier().(*DataSource_InlineBytes); ok { - return x.InlineBytes - } - return nil -} - -func (x *DataSource) GetInlineString() string { - if x, ok := x.GetSpecifier().(*DataSource_InlineString); ok { - return x.InlineString - } - return "" -} - -type isDataSource_Specifier interface { - isDataSource_Specifier() -} - -type DataSource_Filename struct { - // Local filesystem data source. - Filename string `protobuf:"bytes,1,opt,name=filename,proto3,oneof"` -} - -type DataSource_InlineBytes struct { - // Bytes inlined in the configuration. - InlineBytes []byte `protobuf:"bytes,2,opt,name=inline_bytes,json=inlineBytes,proto3,oneof"` -} - -type DataSource_InlineString struct { - // String inlined in the configuration. - 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() {} - -type TlsParameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Minimum TLS protocol version. - TlsMinimumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,1,opt,name=tls_minimum_protocol_version,json=tlsMinimumProtocolVersion,proto3,enum=xds.TlsParameters_TlsProtocol" json:"tls_minimum_protocol_version,omitempty"` - // Maximum TLS protocol version. - TlsMaximumProtocolVersion TlsParameters_TlsProtocol `protobuf:"varint,2,opt,name=tls_maximum_protocol_version,json=tlsMaximumProtocolVersion,proto3,enum=xds.TlsParameters_TlsProtocol" json:"tls_maximum_protocol_version,omitempty"` - // If specified, the TLS listener will only support the specified `cipher list - // `_. - // If not specified, the default list: - // - // .. code-block:: none - // - // [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305] - // [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305] - // ECDHE-ECDSA-AES128-SHA256 - // ECDHE-RSA-AES128-SHA256 - // ECDHE-ECDSA-AES128-SHA - // ECDHE-RSA-AES128-SHA - // AES128-GCM-SHA256 - // AES128-SHA256 - // AES128-SHA - // ECDHE-ECDSA-AES256-GCM-SHA384 - // ECDHE-RSA-AES256-GCM-SHA384 - // ECDHE-ECDSA-AES256-SHA384 - // ECDHE-RSA-AES256-SHA384 - // ECDHE-ECDSA-AES256-SHA - // ECDHE-RSA-AES256-SHA - // AES256-GCM-SHA384 - // AES256-SHA256 - // AES256-SHA - // - // will be used. - 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 (X25519, P-256) will be used. - EcdhCurves []string `protobuf:"bytes,4,rep,name=ecdh_curves,json=ecdhCurves,proto3" json:"ecdh_curves,omitempty"` -} - -func (x *TlsParameters) Reset() { - *x = TlsParameters{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TlsParameters) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TlsParameters) ProtoMessage() {} - -func (x *TlsParameters) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TlsParameters.ProtoReflect.Descriptor instead. -func (*TlsParameters) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{10} -} - -func (x *TlsParameters) GetTlsMinimumProtocolVersion() TlsParameters_TlsProtocol { - if x != nil { - return x.TlsMinimumProtocolVersion - } - return TlsParameters_TLS_AUTO -} - -func (x *TlsParameters) GetTlsMaximumProtocolVersion() TlsParameters_TlsProtocol { - if x != nil { - return x.TlsMaximumProtocolVersion - } - return TlsParameters_TLS_AUTO -} - -func (x *TlsParameters) GetCipherSuites() []string { - if x != nil { - return x.CipherSuites - } - return nil -} - -func (x *TlsParameters) GetEcdhCurves() []string { - if x != nil { - return x.EcdhCurves - } - return nil -} - -// [#not-implemented-hide:] -type Listener_DeprecatedV1 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // 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. - // - // [V2-API-DIFF] 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. - BindToPort *BoolValue `protobuf:"bytes,1,opt,name=bind_to_port,json=bindToPort,proto3" json:"bind_to_port,omitempty"` -} - -func (x *Listener_DeprecatedV1) Reset() { - *x = Listener_DeprecatedV1{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Listener_DeprecatedV1) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Listener_DeprecatedV1) ProtoMessage() {} - -func (x *Listener_DeprecatedV1) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Listener_DeprecatedV1.ProtoReflect.Descriptor instead. -func (*Listener_DeprecatedV1) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *Listener_DeprecatedV1) GetBindToPort() *BoolValue { - if x != nil { - return x.BindToPort - } - return nil -} - -// [#not-implemented-hide:] -type Filter_DeprecatedV1 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` -} - -func (x *Filter_DeprecatedV1) Reset() { - *x = Filter_DeprecatedV1{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Filter_DeprecatedV1) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Filter_DeprecatedV1) ProtoMessage() {} - -func (x *Filter_DeprecatedV1) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Filter_DeprecatedV1.ProtoReflect.Descriptor instead. -func (*Filter_DeprecatedV1) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *Filter_DeprecatedV1) GetType() string { - if x != nil { - return x.Type - } - return "" -} - -// These fields are deprecated and only are used during the interim v1 -> v2 -// transition period for internal purposes. They should not be used outside of -// the Envoy binary. [#not-implemented-hide:] -type CommonTlsContext_DeprecatedV1 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AltAlpnProtocols string `protobuf:"bytes,1,opt,name=alt_alpn_protocols,json=altAlpnProtocols,proto3" json:"alt_alpn_protocols,omitempty"` -} - -func (x *CommonTlsContext_DeprecatedV1) Reset() { - *x = CommonTlsContext_DeprecatedV1{} - if protoimpl.UnsafeEnabled { - mi := &file_xds_lds_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CommonTlsContext_DeprecatedV1) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CommonTlsContext_DeprecatedV1) ProtoMessage() {} - -func (x *CommonTlsContext_DeprecatedV1) ProtoReflect() protoreflect.Message { - mi := &file_xds_lds_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CommonTlsContext_DeprecatedV1.ProtoReflect.Descriptor instead. -func (*CommonTlsContext_DeprecatedV1) Descriptor() ([]byte, []int) { - return file_xds_lds_proto_rawDescGZIP(), []int{6, 0} -} - -func (x *CommonTlsContext_DeprecatedV1) GetAltAlpnProtocols() string { - if x != nil { - return x.AltAlpnProtocols - } - return "" -} - -var File_xds_lds_proto protoreflect.FileDescriptor - -var file_xds_lds_proto_rawDesc = []byte{ - 0x0a, 0x0d, 0x78, 0x64, 0x73, 0x2f, 0x6c, 0x64, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x03, 0x78, 0x64, 0x73, 0x1a, 0x0e, 0x78, 0x64, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x78, 0x64, 0x73, 0x2f, 0x65, 0x6e, 0x76, 0x6f, 0x79, 0x5f, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xca, 0x04, 0x0a, 0x08, 0x4c, - 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x07, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x35, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, - 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x10, 0x75, 0x73, - 0x65, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x44, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x21, 0x70, 0x65, 0x72, 0x5f, - 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x1d, 0x70, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x3f, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x31, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x65, 0x72, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x56, 0x31, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, - 0x12, 0x36, 0x0a, 0x0a, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x65, 0x72, 0x2e, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x64, - 0x72, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x1a, 0x40, 0x0a, 0x0c, 0x44, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, 0x12, 0x30, 0x0a, 0x0c, 0x62, 0x69, - 0x6e, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0a, 0x62, 0x69, 0x6e, 0x64, 0x54, 0x6f, 0x50, 0x6f, 0x72, 0x74, 0x22, 0x29, 0x0a, 0x09, - 0x44, 0x72, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, - 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4d, 0x4f, 0x44, 0x49, 0x46, 0x59, - 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x01, 0x22, 0xd9, 0x02, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x43, 0x0a, 0x12, 0x66, 0x69, 0x6c, 0x74, 0x65, - 0x72, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x10, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x3a, 0x0a, 0x0b, - 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x74, 0x6c, - 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x25, 0x0a, 0x07, 0x66, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x07, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x36, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x50, 0x72, 0x6f, - 0x78, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x29, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x10, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x5f, - 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, - 0x65, 0x74, 0x52, 0x0f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x22, 0xf4, 0x02, 0x0a, 0x10, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x69, 0x5f, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x73, - 0x6e, 0x69, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x0d, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x69, 0x64, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x0c, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x25, - 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, - 0x75, 0x66, 0x66, 0x69, 0x78, 0x12, 0x2f, 0x0a, 0x0a, 0x73, 0x75, 0x66, 0x66, 0x69, 0x78, 0x5f, - 0x6c, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x73, 0x75, 0x66, - 0x66, 0x69, 0x78, 0x4c, 0x65, 0x6e, 0x12, 0x40, 0x0a, 0x14, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x06, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x69, 0x64, 0x72, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x52, 0x12, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, - 0x69, 0x78, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x3b, 0x0a, - 0x10, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x55, 0x49, - 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xa8, 0x01, 0x0a, 0x06, 0x46, - 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, 0x64, 0x73, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x41, - 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x31, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x46, 0x69, 0x6c, 0x74, - 0x65, 0x72, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, - 0x31, 0x1a, 0x22, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, - 0x31, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x4a, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, - 0x72, 0x74, 0x53, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x06, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x78, - 0x64, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x22, 0xda, 0x01, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x43, 0x0a, 0x12, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x10, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x4c, 0x0a, 0x1a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x18, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, - 0x0b, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x5f, 0x73, 0x6e, 0x69, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x53, 0x6e, 0x69, 0x22, 0x89, - 0x03, 0x0a, 0x10, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x31, 0x0a, 0x0a, 0x74, 0x6c, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x54, 0x6c, - 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x52, 0x09, 0x74, 0x6c, 0x73, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x3e, 0x0a, 0x10, 0x74, 0x6c, 0x73, 0x5f, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x54, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0f, 0x74, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x70, 0x6e, - 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0d, 0x61, 0x6c, 0x70, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x12, - 0x4b, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x31, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x2e, 0x44, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0c, - 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, 0x1a, 0x3c, 0x0a, 0x0c, - 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x56, 0x31, 0x12, 0x2c, 0x0a, 0x12, - 0x61, 0x6c, 0x74, 0x5f, 0x61, 0x6c, 0x70, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x6c, 0x74, 0x41, 0x6c, 0x70, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x73, 0x22, 0xaf, 0x03, 0x0a, 0x1c, 0x43, - 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x74, - 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x09, 0x74, 0x72, 0x75, 0x73, 0x74, 0x65, 0x64, 0x43, 0x61, 0x12, 0x36, 0x0a, 0x17, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x2c, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x73, 0x70, - 0x6b, 0x69, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x70, 0x6b, 0x69, 0x53, 0x68, 0x61, 0x32, 0x35, - 0x36, 0x12, 0x35, 0x0a, 0x17, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x5f, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x14, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x13, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x5f, 0x6f, 0x63, 0x73, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4f, 0x63, - 0x73, 0x70, 0x53, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x12, 0x5f, 0x0a, 0x24, 0x72, 0x65, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x21, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x53, - 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x21, 0x0a, 0x03, 0x63, 0x72, 0x6c, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, 0x63, 0x72, 0x6c, 0x22, 0xb2, 0x02, 0x0a, - 0x0e, 0x54, 0x6c, 0x73, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, - 0x3c, 0x0a, 0x11, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, - 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x10, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x30, 0x0a, - 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, - 0x2b, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x30, 0x0a, 0x0b, - 0x6f, 0x63, 0x73, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x0a, 0x6f, 0x63, 0x73, 0x70, 0x53, 0x74, 0x61, 0x70, 0x6c, 0x65, 0x12, 0x51, - 0x0a, 0x1c, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x1a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x43, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x22, 0x83, 0x01, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0x1c, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, - 0x0a, 0x0c, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0d, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e, - 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x70, - 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0xe8, 0x02, 0x0a, 0x0d, 0x54, 0x6c, 0x73, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x5f, 0x0a, 0x1c, 0x74, 0x6c, 0x73, - 0x5f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x54, 0x6c, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, - 0x65, 0x72, 0x73, 0x2e, 0x54, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, - 0x19, 0x74, 0x6c, 0x73, 0x4d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5f, 0x0a, 0x1c, 0x74, 0x6c, - 0x73, 0x5f, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1e, 0x2e, 0x78, 0x64, 0x73, 0x2e, 0x54, 0x6c, 0x73, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, - 0x74, 0x65, 0x72, 0x73, 0x2e, 0x54, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x52, 0x19, 0x74, 0x6c, 0x73, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, - 0x69, 0x70, 0x68, 0x65, 0x72, 0x5f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x0c, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x53, 0x75, 0x69, 0x74, 0x65, 0x73, - 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x63, 0x64, 0x68, 0x5f, 0x63, 0x75, 0x72, 0x76, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x63, 0x64, 0x68, 0x43, 0x75, 0x72, 0x76, 0x65, - 0x73, 0x22, 0x4f, 0x0a, 0x0b, 0x54, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x30, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, - 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x31, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x76, - 0x31, 0x5f, 0x32, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x76, 0x31, 0x5f, 0x33, - 0x10, 0x04, 0x42, 0x32, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x63, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x6d, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2d, 0x6d, 0x65, - 0x73, 0x68, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, - 0x78, 0x64, 0x73, 0x88, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_xds_lds_proto_rawDescOnce sync.Once - file_xds_lds_proto_rawDescData = file_xds_lds_proto_rawDesc -) - -func file_xds_lds_proto_rawDescGZIP() []byte { - file_xds_lds_proto_rawDescOnce.Do(func() { - file_xds_lds_proto_rawDescData = protoimpl.X.CompressGZIP(file_xds_lds_proto_rawDescData) - }) - return file_xds_lds_proto_rawDescData -} - -var file_xds_lds_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_xds_lds_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_xds_lds_proto_goTypes = []interface{}{ - (Listener_DrainType)(0), // 0: xds.Listener.DrainType - (TlsParameters_TlsProtocol)(0), // 1: xds.TlsParameters.TlsProtocol - (*Listener)(nil), // 2: xds.Listener - (*FilterChain)(nil), // 3: xds.FilterChain - (*FilterChainMatch)(nil), // 4: xds.FilterChainMatch - (*Filter)(nil), // 5: xds.Filter - (*TransportSocket)(nil), // 6: xds.TransportSocket - (*DownstreamTlsContext)(nil), // 7: xds.DownstreamTlsContext - (*CommonTlsContext)(nil), // 8: xds.CommonTlsContext - (*CertificateValidationContext)(nil), // 9: xds.CertificateValidationContext - (*TlsCertificate)(nil), // 10: xds.TlsCertificate - (*DataSource)(nil), // 11: xds.DataSource - (*TlsParameters)(nil), // 12: xds.TlsParameters - (*Listener_DeprecatedV1)(nil), // 13: xds.Listener.DeprecatedV1 - (*Filter_DeprecatedV1)(nil), // 14: xds.Filter.DeprecatedV1 - (*CommonTlsContext_DeprecatedV1)(nil), // 15: xds.CommonTlsContext.DeprecatedV1 - (*Address)(nil), // 16: xds.Address - (*BoolValue)(nil), // 17: xds.BoolValue - (*UInt32Value)(nil), // 18: xds.UInt32Value - (*Metadata)(nil), // 19: xds.Metadata - (*CidrRange)(nil), // 20: xds.CidrRange - (*Struct)(nil), // 21: xds.Struct -} -var file_xds_lds_proto_depIdxs = []int32{ - 16, // 0: xds.Listener.address:type_name -> xds.Address - 3, // 1: xds.Listener.filter_chains:type_name -> xds.FilterChain - 17, // 2: xds.Listener.use_original_dst:type_name -> xds.BoolValue - 18, // 3: xds.Listener.per_connection_buffer_limit_bytes:type_name -> xds.UInt32Value - 19, // 4: xds.Listener.metadata:type_name -> xds.Metadata - 13, // 5: xds.Listener.deprecated_v1:type_name -> xds.Listener.DeprecatedV1 - 0, // 6: xds.Listener.drain_type:type_name -> xds.Listener.DrainType - 4, // 7: xds.FilterChain.filter_chain_match:type_name -> xds.FilterChainMatch - 7, // 8: xds.FilterChain.tls_context:type_name -> xds.DownstreamTlsContext - 5, // 9: xds.FilterChain.filters:type_name -> xds.Filter - 17, // 10: xds.FilterChain.use_proxy_proto:type_name -> xds.BoolValue - 19, // 11: xds.FilterChain.metadata:type_name -> xds.Metadata - 6, // 12: xds.FilterChain.transport_socket:type_name -> xds.TransportSocket - 20, // 13: xds.FilterChainMatch.prefix_ranges:type_name -> xds.CidrRange - 18, // 14: xds.FilterChainMatch.suffix_len:type_name -> xds.UInt32Value - 20, // 15: xds.FilterChainMatch.source_prefix_ranges:type_name -> xds.CidrRange - 18, // 16: xds.FilterChainMatch.source_ports:type_name -> xds.UInt32Value - 18, // 17: xds.FilterChainMatch.destination_port:type_name -> xds.UInt32Value - 21, // 18: xds.Filter.config:type_name -> xds.Struct - 14, // 19: xds.Filter.deprecated_v1:type_name -> xds.Filter.DeprecatedV1 - 21, // 20: xds.TransportSocket.config:type_name -> xds.Struct - 8, // 21: xds.DownstreamTlsContext.common_tls_context:type_name -> xds.CommonTlsContext - 17, // 22: xds.DownstreamTlsContext.require_client_certificate:type_name -> xds.BoolValue - 17, // 23: xds.DownstreamTlsContext.require_sni:type_name -> xds.BoolValue - 12, // 24: xds.CommonTlsContext.tls_params:type_name -> xds.TlsParameters - 10, // 25: xds.CommonTlsContext.tls_certificates:type_name -> xds.TlsCertificate - 9, // 26: xds.CommonTlsContext.validation_context:type_name -> xds.CertificateValidationContext - 15, // 27: xds.CommonTlsContext.deprecated_v1:type_name -> xds.CommonTlsContext.DeprecatedV1 - 11, // 28: xds.CertificateValidationContext.trusted_ca:type_name -> xds.DataSource - 17, // 29: xds.CertificateValidationContext.require_ocsp_staple:type_name -> xds.BoolValue - 17, // 30: xds.CertificateValidationContext.require_signed_certificate_timestamp:type_name -> xds.BoolValue - 11, // 31: xds.CertificateValidationContext.crl:type_name -> xds.DataSource - 11, // 32: xds.TlsCertificate.certificate_chain:type_name -> xds.DataSource - 11, // 33: xds.TlsCertificate.private_key:type_name -> xds.DataSource - 11, // 34: xds.TlsCertificate.password:type_name -> xds.DataSource - 11, // 35: xds.TlsCertificate.ocsp_staple:type_name -> xds.DataSource - 11, // 36: xds.TlsCertificate.signed_certificate_timestamp:type_name -> xds.DataSource - 1, // 37: xds.TlsParameters.tls_minimum_protocol_version:type_name -> xds.TlsParameters.TlsProtocol - 1, // 38: xds.TlsParameters.tls_maximum_protocol_version:type_name -> xds.TlsParameters.TlsProtocol - 17, // 39: xds.Listener.DeprecatedV1.bind_to_port:type_name -> xds.BoolValue - 40, // [40:40] is the sub-list for method output_type - 40, // [40:40] is the sub-list for method input_type - 40, // [40:40] is the sub-list for extension type_name - 40, // [40:40] is the sub-list for extension extendee - 0, // [0:40] is the sub-list for field type_name -} - -func init() { file_xds_lds_proto_init() } -func file_xds_lds_proto_init() { - if File_xds_lds_proto != nil { - return - } - file_xds_base_proto_init() - file_xds_envoy_base_proto_init() - if !protoimpl.UnsafeEnabled { - file_xds_lds_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Listener); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterChain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FilterChainMatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TransportSocket); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DownstreamTlsContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommonTlsContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CertificateValidationContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TlsCertificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataSource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TlsParameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Listener_DeprecatedV1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Filter_DeprecatedV1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_xds_lds_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommonTlsContext_DeprecatedV1); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_xds_lds_proto_msgTypes[9].OneofWrappers = []interface{}{ - (*DataSource_Filename)(nil), - (*DataSource_InlineBytes)(nil), - (*DataSource_InlineString)(nil), - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_xds_lds_proto_rawDesc, - NumEnums: 2, - NumMessages: 14, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_xds_lds_proto_goTypes, - DependencyIndexes: file_xds_lds_proto_depIdxs, - EnumInfos: file_xds_lds_proto_enumTypes, - MessageInfos: file_xds_lds_proto_msgTypes, - }.Build() - File_xds_lds_proto = out.File - file_xds_lds_proto_rawDesc = nil - file_xds_lds_proto_goTypes = nil - file_xds_lds_proto_depIdxs = nil -} diff --git a/go.mod b/go.mod index b61a29d..0802046 100644 --- a/go.mod +++ b/go.mod @@ -1,29 +1,20 @@ module github.com/costinm/ugate -go 1.18 - -replace github.com/costinm/hbone => ../hbone - -replace github.com/costinm/meshauth => ../meshauth +go 1.21 require ( - github.com/coreos/go-oidc v2.2.1+incompatible - github.com/costinm/hbone v0.0.0-20221011174620-f25926c0b194 - github.com/costinm/meshauth v0.0.0-20221013185453-bb5aae6632f8 + github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d github.com/miekg/dns v1.1.50 - golang.org/x/net v0.1.0 - golang.org/x/sys v0.1.0 + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc + golang.org/x/net v0.19.0 + golang.org/x/sys v0.16.0 + sigs.k8s.io/yaml v1.4.0 ) require ( - github.com/golang/protobuf v1.5.2 // indirect - github.com/pquerna/cachecontrol v0.1.0 // indirect - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/oauth2 v0.1.0 // indirect - golang.org/x/text v0.4.0 // indirect - golang.org/x/tools v0.1.12 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/square/go-jose.v2 v2.6.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.16.0 // indirect ) diff --git a/go.sum b/go.sum index 7a83bae..9a0a973 100644 --- a/go.sum +++ b/go.sum @@ -1,42 +1,31 @@ -github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 h1:o8CM8eNRGDSFS1QrFN8Wb7pSfEFQFtdIk61smVNxTHQ= +github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0/go.mod h1:DyjbOGzDaVKYEQhuv4CrS/wZqplESvKaLCvF11hRgPs= +github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d h1:SsxuU+DSeqPeY2JHrBp5qfG3PdIjlrfb2VZck7V7OnE= +github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d/go.mod h1:Ez/sUx4fAqKWesQrTaoVjH6Lyi2x6QWW0fhcKvhe28g= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8cTqKc= -github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/oauth2 v0.1.0 h1:isLCZuhj4v+tYv7eskaN4v/TM+A1begWWgyVJDdl1+Y= -golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -44,32 +33,25 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/hbone.go b/hbone.go new file mode 100644 index 0000000..b03b268 --- /dev/null +++ b/hbone.go @@ -0,0 +1,183 @@ +package ugate + +// HBone for compatibility with Istio + + +// MuxDialer creates an association with a node and returns a mechanism to +// make roundtrips. This is focused on HBone-like connections - but the mux +// can make any HTTP requests as well. +//type MuxDialer interface { +// // DialMux creates a bi-directional multiplexed association with the node. +// // The node must support a multiplexing protocol - the fallback is H2. +// // +// // Fallback: +// // For non-mesh nodes the H2 connection may not allow incoming streams or +// // messages. Mesh nodes emulate incoming streams using /h2r/ and send/receive +// // messages using /.dm/msg/ +// DialMux(ctx context.Context, node *MeshCluster, meta http.Header, +// ev func(t string, stream util.Stream)) (http.RoundTripper, error) +//} + + +// Implements HttpClient, HttpDoer, etc from multiple packages (connect, k8s, etc) +// MeshCluster represents a single destination - hostname will not be used to connect, +// but will be sent. For example the cluster can be an egress gateway or ztunnel. +//func (c *MeshCluster) Do(req *http.Request) (*http.Response, error) { +// return c.RoundTrip(req) +//} + +//// DoRequest will do a RoundTrip and read the response. +//func (c *MeshCluster) DoRequest(req *http.Request) ([]byte, error) { +// var resp *http.Response +// var err error +// +// resp, err = c.RoundTrip(req) // Client.Do(req) +// if Debug { +// log.Println("DoRequest", req, resp, err) +// } +// +// if err != nil { +// return nil, err +// } +// +// defer resp.Body.Close() +// data, err := ioutil.ReadAll(resp.Body) +// if err != nil { +// log.Println("readall", err) +// return nil, err +// } +// if len(data) == 0 { +// log.Println("readall", err) +// return nil, io.EOF +// } +// +// if resp.StatusCode >= 300 || resp.StatusCode < 200 { +// return nil, errors.New(fmt.Sprintf("kconfig: unable to get %v, status code %v", +// req.URL, resp.StatusCode)) +// } +// +// return data, nil +//} + +//func (c *MeshCluster) RoundTrip(req *http.Request) (*http.Response, error) { +// epc, err := c.UGate.H2Transport.FindMux(req.Context(), c) +// if err != nil { +// return nil, err +// } +// +// r, _, err := c.rt(epc, req) +// // TODO: grpc RoundTripper doesn't wait for headers ! +// return r, err +//} + +// rt is the low level rountdrip implementation, after finding a connection to one endpoint +//func (c *MeshCluster) rt(epc *EndpointCon, req *http.Request) (*http.Response, *EndpointCon, error) { +// var resp *http.Response +// var rterr, err error +// +// c.AddToken(c.UGate.Auth, req, "https://"+c.Addr) +// +// for i := 0; i < 3; i++ { +// +// // Find a channel - LB would go here if multiple addresses and sockets +// if epc == nil || epc.RoundTripper == nil { +// epc, err = c.UGate.H2Transport.FindMux(req.Context(), c) +// if err != nil { +// return nil, nil, err +// } +// } +// +// // IMPORTANT: some servers will not return the headers until the first byte of the response is sent, which +// // may not happen until request bytes have been sent. +// // For CONNECT, we will require that the server is flushing the headers as soon as the request is received, +// // to emulate the connection semantics - at least initially. +// // For POST and other methods - we can't assume this. That means read() on the conn will need to be blocked +// // and wait for the Header frame to be received, and any metadata too. +// resp, rterr = epc.RoundTripper.RoundTrip(req) +// if Debug { +// log.Println("RoundTrip", req, resp, rterr) +// } +// +// if rterr != nil { +// // retry on different mux +// epc.RoundTripper = nil +// continue +// } +// +// return resp, epc, err +// } +// return nil, nil, rterr +//} + + + +//// dialHbone implements the tunnel over H2. Returns a net.Conn implementation. +//// TODO(costin): use the hostname, get IP override from x-original-dst header or cookie. +//func (c *MeshCluster) dialHbone(ctx context.Context, req *http.Request) (*EndpointCon, util.Stream, error) { +// // Find an endpoint and create a H2 connection for it. +// epc, err := c.UGate.H2Transport.FindMux(ctx, c) +// if err != nil { +// return nil, nil, err +// } +// +// if epc.Endpoint.Labels["http_proxy"] != "" { +// // TODO: only POST mode supported right now, address not from label. +// +// hostPort := epc.Endpoint.HboneAddress() +// +// // Tunnel mode, untrusted proxy authentication. +// req, _ := http.NewRequestWithContext(ctx, "POST", "https://"+hostPort, nil) +// +// err = c.AddToken(c.UGate.Auth, req, "https://"+hostPort) +// if err != nil { +// return nil, nil, err +// } +// +// req.Header.Add("x-service", c.Addr) +// req.Header.Add("x-tun", epc.Endpoint.Address) +// +// res, err := epc.RoundTripper.RoundTrip(req) +// if err != nil { +// epc.RoundTripper = nil +// return nil, nil, err +// } +// +// nc := res.Body.(net.Conn) +// // Do the mTLS handshake for the tunneled connection +// // SNI is based on the service name - or the SNI override. +// sni := c.SNI +// if sni == "" { +// sni, _, _ = net.SplitHostPort(c.Addr) +// } +// +// // Create a TLS connection to the endpoint. +// // Using the sni of the service (frontend), but check the FQDN hostname identity +// tlsClientConfig := c.UGate.Auth.TLSClientConf(&epc.Cluster.Dest, sni, epc.Endpoint.Hostname) +// tlsTun := tls.Client(nc, tlsClientConfig) +// err = util.HandshakeTimeout(tlsTun, c.UGate.HandsahakeTimeout, nil) +// if err != nil { +// return nil, nil, err +// } +// return epc, util.NewStreamConn(tlsTun), err +// +// // TLS wrapper will be added on response. +// //return epc, res.Body.(net.Conn), err // +// // &HTTPConn{R: res.Body, W: o, Conn: epc.TLSConn, Req: req, Res: res, +// // MeshCluster: c}, err +// } +// +// if req == nil { +// req, _ = http.NewRequestWithContext(ctx, "CONNECT", "https://"+epc.Endpoint.Address, nil) +// } +// +// req.Header.Add("x-service", c.Addr) +// +// res, _, err := c.rt(epc, req) +// if err != nil { +// return nil, nil, err +// } +// +// nc := res.Body.(util.Stream) +// // TODO: return nc directly instead of HTTPConn +// return epc, nc, err +//} diff --git a/manifests/Chart.yaml b/manifests/Chart.yaml deleted file mode 100644 index 3e6ee6d..0000000 --- a/manifests/Chart.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -name: ugate-all -version: 0.1.1 -description: Install all ugate charts and probers -keywords: - - ugate -engine: gotpl diff --git a/manifests/charts/skaffold.yaml b/manifests/charts/skaffold.yaml new file mode 100644 index 0000000..074161d --- /dev/null +++ b/manifests/charts/skaffold.yaml @@ -0,0 +1,40 @@ +apiVersion: skaffold/v2beta19 +kind: Config +metadata: + name: dev +#build: +# artifacts: +# - image: gcr.io/dmeshgate/sshc +# context: .. +# custom: +# buildCommand: make build gcp/push +# dependencies: +# paths: +# - sshc/** +# - manifests/sshd/** +deploy: + helm: + releases: + - name: dev + chartPath: dev + #artifactOverrides: + # image: gcr.io/dmeshgate/sshc:latest + + namespace: dev + createNamespace: true +#portForward: +#- resourceType: deployment +# resourceName: ssh-ca +# namespace: ssh-ca +# port: 8080 +# localPort: 14021 +#- resourceType: deployment +# resourceName: ssh-ca +# namespace: ssh-ca +# port: 8081 +# localPort: 14020 +#- resourceType: deployment +# resourceName: sshd +# namespace: sshd +# port: 15022 +# localPort: 14022 diff --git a/manifests/charts/ugate-knative/Chart.yaml b/manifests/charts/ugate-knative/Chart.yaml deleted file mode 100644 index 536dca5..0000000 --- a/manifests/charts/ugate-knative/Chart.yaml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: v1 -name: ugate-knative -version: 0.1.1 -description: Install uGate as a KNative/CloudRun service -keywords: - - ugate -engine: gotpl diff --git a/manifests/kustomize/hpa.yaml b/manifests/charts/ugate/templates/hpa.yaml similarity index 100% rename from manifests/kustomize/hpa.yaml rename to manifests/charts/ugate/templates/hpa.yaml diff --git a/manifests/charts/ugate-knative/templates/knative-ugate.yaml b/manifests/charts/ugate/templates/knative-ugate.yaml similarity index 97% rename from manifests/charts/ugate-knative/templates/knative-ugate.yaml rename to manifests/charts/ugate/templates/knative-ugate.yaml index 8afa07a..7974153 100644 --- a/manifests/charts/ugate-knative/templates/knative-ugate.yaml +++ b/manifests/charts/ugate/templates/knative-ugate.yaml @@ -1,3 +1,4 @@ +{{ if .Values.Knative }} apiVersion: serving.knative.dev/v1 kind: Service metadata: @@ -43,3 +44,4 @@ spec: traffic: - percent: 100 latestRevision: true +{{ end }} \ No newline at end of file diff --git a/manifests/kustomize/lb-service.yaml b/manifests/charts/ugate/templates/lb-service.yaml similarity index 100% rename from manifests/kustomize/lb-service.yaml rename to manifests/charts/ugate/templates/lb-service.yaml diff --git a/manifests/monitoring.yaml b/manifests/charts/ugate/templates/monitoring.yaml similarity index 100% rename from manifests/monitoring.yaml rename to manifests/charts/ugate/templates/monitoring.yaml diff --git a/manifests/kustomize/pdb.yaml b/manifests/charts/ugate/templates/pdb.yaml similarity index 100% rename from manifests/kustomize/pdb.yaml rename to manifests/charts/ugate/templates/pdb.yaml diff --git a/tools/setup/cluster.sh b/manifests/cluster.sh similarity index 100% rename from tools/setup/cluster.sh rename to manifests/cluster.sh diff --git a/manifests/create_cluster.sh b/manifests/create_cluster.sh index 1f27563..100a917 100644 --- a/manifests/create_cluster.sh +++ b/manifests/create_cluster.sh @@ -1 +1,29 @@ -gcloud beta container --project "costin-asm1" clusters create "istio" --zone "us-central1-c" --no-enable-basic-auth --cluster-version "1.25.1-gke.500" --release-channel "rapid" --machine-type "e2-standard-4" --image-type "COS_CONTAINERD" --disk-type "pd-balanced" --disk-size "100" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --max-pods-per-node "255" --spot --num-nodes "1" --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --enable-ip-alias --network "projects/costin-asm1/global/networks/default" --subnetwork "projects/costin-asm1/regions/us-central1/subnetworks/default" --no-enable-intra-node-visibility --enable-autoscaling --min-nodes "0" --max-nodes "4" --enable-dataplane-v2 --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --enable-managed-prometheus --workload-pool "costin-asm1.svc.id.goog" --enable-shielded-nodes --no-shielded-integrity-monitoring --enable-image-streaming --node-locations "us-central1-c" +function basic_cluster() { + gcloud beta container --project "costin-asm1" clusters create "istio" --zone "us-central1-c" \ + --no-enable-basic-auth --cluster-version "1.25.1-gke.500" --release-channel "rapid" \ + --machine-type "e2-standard-4" --image-type "COS_CONTAINERD" --disk-type "pd-balanced" \ + --disk-size "100" --metadata disable-legacy-endpoints=true \ + --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" \ + --max-pods-per-node "255" --spot --num-nodes "1" \ + --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --enable-ip-alias --network "projects/costin-asm1/global/networks/default" --subnetwork "projects/costin-asm1/regions/us-central1/subnetworks/default" \ + --no-enable-intra-node-visibility --enable-autoscaling --min-nodes "0" --max-nodes "4" --enable-dataplane-v2 --no-enable-master-authorized-networks \ + --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 \ + --enable-managed-prometheus --workload-pool "costin-asm1.svc.id.goog" --enable-shielded-nodes --no-shielded-integrity-monitoring --enable-image-streaming --node-locations "us-central1-c" +} + +# Minimal +# 2 CPU one node +# For fleet enrolled: 722mCPU out of 940 +# - event-exporter-gke 3 +# - fluentbit-gke 100 +# - gke-metrics-agent 11 +# - mdp-controller 50 ??? +# Without fleet: +# 558 out of 940 +# - + +function create_net6() { + gcloud compute networks create ip6 --project=costin-istio3 --subnet-mode=custom --mtu=1460 --enable-ula-internal-ipv6 --bgp-routing-mode=regional + + gcloud compute networks subnets create NAME --project=costin-istio3 --range=IP_RANGE --stack-type=IPV4_ONLY --network=ip6 --region=REGION +} \ No newline at end of file diff --git a/manifests/kustomize/expose-istiod.yaml b/manifests/kustomize/expose-istiod.yaml deleted file mode 100644 index 46b0380..0000000 --- a/manifests/kustomize/expose-istiod.yaml +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: gateway.networking.k8s.io/v1alpha2 -kind: Gateway -metadata: - name: eastwestgateway - namespace: istio-system -spec: - gatewayClassName: istio - listeners: - - name: istiod-grpc - port: 15012 - protocol: TLS - tls: - mode: Passthrough ---- -apiVersion: gateway.networking.k8s.io/v1alpha2 -kind: TLSRoute -metadata: - name: eastwestgateway-grpc - namespace: istio-system -spec: - parentRefs: - - name: eastwestgateway - kind: Gateway - sectionName: istiod-grpc - rules: - - backendRefs: - - name: istiod - port: 15012 - ---- -apiVersion: gateway.networking.k8s.io/v1alpha2 -kind: Gateway -metadata: - name: eastwestgateway-ilb - namespace: istio-system - annotations: - networking.gke.io/load-balancer-type: "Internal" -spec: - gatewayClassName: istio - listeners: - - name: istiod-grpc-ilb - port: 15012 - protocol: TLS - tls: - mode: Passthrough ---- -apiVersion: gateway.networking.k8s.io/v1alpha2 -kind: TLSRoute -metadata: - name: eastwestgateway-grpc-ilb - namespace: istio-system -spec: - parentRefs: - - name: eastwestgateway-ilb - kind: Gateway - sectionName: istiod-grpc-ilb - rules: - - backendRefs: - - name: istiod - port: 15012 ---- -apiVersion: networking.istio.io/v1alpha3 -kind: DestinationRule -metadata: - name: istiod-15012 - namespace: istio-system -spec: - host: istiod.istio-system.svc.cluster.local - trafficPolicy: - portLevelSettings: - - port: - number: 15012 - tls: - mode: DISABLE diff --git a/mesh.go b/mesh.go new file mode 100644 index 0000000..7eaba47 --- /dev/null +++ b/mesh.go @@ -0,0 +1,261 @@ +package ugate + +import ( + "context" + "crypto/x509" + "encoding/json" + "errors" + + "github.com/costinm/meshauth" +) + +// mesh abstracts the 'clusters'/'services'/endpoints and connections. + +// MeshCluster represents a set of endpoints, with a common configuration. +// Can be a K8S Service with VIP and DNS name, an external service, etc. +// +// Similar with Envoy Cluster or K8S service, can also represent single +// endpoint with multiple paths/IPs. +// It includes node information, based on registration info or discovery. +// +// Also used for 'mesh' nodes, where we have a public key and other info, as well +// as non-mesh nodes. +// +// This struct includes statistics about the node and current active association/mux +// connections. +type MeshCluster struct { + // Dest includes the address and auth-related info for the MeshCluster. + // The meshauth package includes helpers around authentication and certificates, decoupled from mesh. + meshauth.Dest + + // MeshCluster WorkloadID - the cluster name in kube config, hub, gke - cluster name in XDS + // Defaults to Base addr - but it is possible to have multiple clusters for + // same address ( ex. different users / token providers). + // + // Examples: + // GKE cluster: gke_PROJECT_LOCATION_NAME + // + // For mesh nodes: + // ID is the (best) primary id known for the node. Format is: + // base32(SHA256(EC_256_pub)) - 32 bytes binary, 52 bytes encoded + // base32(ED_pub) - same size, for nodes with ED keys. + // + // For non-mesh nodes, it is a (real) domain name or IP if unknown. + // It may include port, or even be a URL - the external destinations may + // have different public keys on different ports. + // + // The node may be a virtual IP ( ex. K8S/Istio service ) or name + // of a virtual service. + // + // If IPs are used, they must be either truncated SHA or included + // in the node cert or the control plane must return metadata and + // secure low-level network is used (like wireguard) + // + // Required for secure communication. + // + // Examples: + // - [B32_SHA] + // - [B32_SHA].reviews.bookinfo.svc.example.com + // - IP6 (based on SHA or 'trusted' IP) + // - IP4 ('trusted' IP) + // + ID string `json:"id,omitempty"` + + // IPFS: + // http:///ipfs/CID/path + // http://.ipfs./ + // http://gateway/ipns/IPNDS_ID/path + // ipfs:///, ipns:///, and dweb:// + // + // Multiaddr: TLV + + // Active connections to endpoints, each is a multiplexed H2 connection. + //EndpointCon []*EndpointCon + + // Hosts are workload addresses associated with the backend service. + // + // If empty, the MeshCluster Addr will be used directly - it is expected to be + // a FQDN or VIP that is routable - either a service backed by an LB or handled by + // ambient or K8S. + // + // This may be pre-configured or result of discovery (IPs, extra properties). + Hosts []*Host + + // Parent. + //UGate *UGate + + // TODO: UserAgent, DefaultHeaders + + // TLS config used when dialing using workload identity, shared per dest. + //TLSClientConfig *tls.Config + + //LastUsed time.Time + + +} + + +// GetCluster returns a cluster for the given address, or nil if not found. +func (hb *UGate) GetCluster(addr string) *MeshCluster { + hb.m.RLock() + c := hb.Clusters[addr] + // Make sure it is set correctly. + if c != nil && c.ID == "" { + c.ID = addr + } + + hb.m.RUnlock() + return c +} + + +// Cluster will get an existing cluster or create a dynamic one. +// Dynamic clusters can be GC and loaded on-demand. +func (hb *UGate) Cluster(ctx context.Context, addr string) (*MeshCluster, error) { + // TODO: extract cluster from addr, allow URL with params to indicate how to connect. + //host := "" + //if strings.Contains(dest, "//") { + // u, _ := url.Parse(dest) + // + // host, _, _ = net.SplitHostPort(u.Host) + //} else { + // host, _, _ = net.SplitHostPort(dest) + //} + //if strings.HasSuffix(host, ".svc") { + // hc.H2Gate = hg + ":15008" // hbone/mtls + // hc.ExternalMTLSConfig = auth.GenerateTLSConfigServer() + //} + //// Initialization done - starting the proxy either on a listener or stdin. + + // 1. Find the cluster for the address. If not found, create one with the defaults or use on-demand + // if XDS server is configured + hb.m.RLock() + c, ok := hb.Clusters[addr] + hb.m.RUnlock() + + // TODO: use discovery to find info about service addr, populate from XDS on-demand or DNS + if !ok { + // TODO: on-demand, DNS lookups, etc + c = &MeshCluster{Dest: meshauth.Dest{Addr: addr, Dynamic: true}, ID: addr} + hb.AddCluster(c) + } + //c.LastUsed = time.Now() + return c, nil +} + +// AddCluster will add a cluster to be used for Dial and RoundTrip. +// The 'Addr' field can be a host:port or IP:port. +// If id is set, it can be host:port or hostname - will be added as a destination. +// The service can be IP:port or URLs +func (hb *UGate) AddCluster(c *MeshCluster, host ...*Host) *MeshCluster { + hb.m.Lock() + hb.Clusters[c.Addr] = c + + if c.ID != "" { + hb.Clusters[c.ID] = c + } + + //c.UGate = hb + if c.ConnectTimeout == 0 { + c.ConnectTimeout = hb.ConnectTimeout.Duration + } + hb.m.Unlock() + + for _, s := range host { + c.Hosts = append(c.Hosts, s) + } + return c +} + +//func (hb *UGate) AddDest(c *meshauth.Dest, host ...*Host) *MeshCluster { +// +// return hb.AddCluster(&MeshCluster{Dest: *c}, host...) +//} + + + +// Textual representation of the node registration data. +func (n *MeshCluster) String() string { + b, _ := json.Marshal(n) + return string(b) +} + +// Host represents the properties of a single workload. +// By default, clusters resolve the endpoints dynamically, using DNS or EDS or other +// discovery mechanisms. +type Host struct { + // Labels for the workload. Extracted from pod info - possibly TXT records + // + // 'hbone' can be used for a custom hbone endpoint (default 15008). + // + Labels map[string]string `json:"labels,omitempty"` + + //LBWeight int `json:"lb_weight,omitempty"` + //Priority int + + // Address is an IP where the host can be reached. + // It can be a real IP (in the mesh, direct) or a jump host. + // + Address string `json:"addr,omitempty"` + + // FQDN of the host. Used to check host cert. + Hostname string +} + +//func (e *Host) HboneAddress() string { +// addr := e.Labels["hbone"] +// if addr != "" { +// return addr +// } +// +// if addr == "" && e.Address != "" { +// addr = e.Address +// h, _, _ := net.SplitHostPort(addr) +// addr = net.JoinHostPort(h, "15008") +// return addr +// } +// +// return addr +//} +// + + +//// EndpointCon is a multiplexed H2 client for a specific destination instance part +//// of a MeshCluster. +//// +//// It wraps a real H2/QUIC implementation (RoundTripper), a connection, config and metadata. +//type EndpointCon struct { +// Cluster *MeshCluster +// Endpoint *Host +// +// // Multiplex connection - may implement additional interfaces to open lighter +// // streams, like Dial() +// RoundTripper http.RoundTripper // *http2.ClientConn or custom (wrapper) +// +// TLSConn net.Conn +// // The stream connection - may be a real TCP or not +// streamCon net.Conn +// ConnectionStart time.Time +// SSLEnd time.Time +//} + +//func (c *MeshCluster) UpdateEndpoints(ep []*Host) { +// c.UGate.m.Lock() +// // TODO: preserve unmodified endpoints connections, by IP, refresh pending +// c.Hosts = ep +// c.UGate.m.Unlock() +//} + +// EndpointCon (peer) is over capacity or unavailable. +var ServiceUnavailable = errors.New("Service Unavailable 503") + + +// Return the custom cert pool, if cluster config specifies a list of trusted +// roots, or nil if default trust is used. +func (c *MeshCluster) trustRoots() *x509.CertPool { + return c.Dest.CertPool() +} +// +//func (hc *EndpointCon) Close() error { +// return hc.TLSConn.Close() +//} diff --git a/okteto.yml b/okteto.yml deleted file mode 100644 index 50e7860..0000000 --- a/okteto.yml +++ /dev/null @@ -1,50 +0,0 @@ -#name: ugate -#namespace: ugate -name: ugate-dev -namespace: istio-system - -image: gcr.io/dmeshgate/ugate-dev:latest - -# Auto-create a deployment, if not found -# -autocreate: true -workdir: /work -command: ["bash"] -environment: - - TAG=16 - - HUB=costinm - - BUILD_WITH_CONTAINER=0 - - HOME=/home/istio-proxy - - USER=istio-proxy -volumes: # Cached - - /go/pkg/ - - /root/.cache/go-build/ -# - $HOME/.cache/go-build/ -# Default istiod is 2G/.5cpu - need to override -resources: - requests: - memory: 2G - cpu: 1000m - -persistentVolume: - enabled: true - size: 100Gi - -# No ssh in the dev image -remote: 12022 - -securityContext: - capabilities: - add: - - SYS_PTRACE - - NET_ADMIN -# runAsUser: 1337 -# fsGroup: 3000 -# runAsGroup: 1337 - -forward: - - 12080:8080 - - 12012:15012 - - 12053:15053 -#reverse: -# - 9000:9001 diff --git a/pkg/cfgfs/conf.go b/pkg/cfgfs/conf.go deleted file mode 100644 index 9824195..0000000 --- a/pkg/cfgfs/conf.go +++ /dev/null @@ -1,124 +0,0 @@ -package cfgfs - -import ( - "io/ioutil" - "log" - "os" - "path/filepath" - "strings" - "sync" - - "github.com/costinm/ugate" -) - -// TODO: map FOO_BAR to foo.bar, construct yaml equivalent -// Reload the files -// Dynamic Flags - https://github.com/mwitkow/go-flagz, fortio: - -// Simple file-based config and secret store. -// -// Implements a ConfStore interface with List/Get/Set interface. -// -// TODO: Watch interface - using messages/pubsub !!! -// -// TODO: switch to yaml, support K8S style -// -// TODO: integrate with krun, use the REST as a config source, possibly with watcher -type Conf struct { - // Base directory. If not set, no config will be saved and read - // will only return env or in-memory configs. First will be used for write. - base []string - - // Conf is configured from Android side with the config (settings) - // ssid, pass, vpn_ext - Conf map[string]string `json:"Conf,omitempty"` - - // additional stores. Key is the prefix for the name. - stores map[string]ugate.ConfStore - - m sync.RWMutex - // if base is empty, this will be used to persist the configs. - inMemory map[string][]byte -} - -// NewConf Returns a config store. -// Implements a basic auth.ConfStore interface -func NewConf(base ...string) *Conf { - // TODO: https for remote - possibly using local creds and K8S style or XDS - env := os.Environ() - envconf := map[string]string{} - for _, ev := range env { - kv := strings.SplitN(ev, "=", 2) - if len(kv) == 2 { - envconf[kv[0]] = kv[1] - } - } - return &Conf{ - base: base, - Conf: envconf, - inMemory: map[string][]byte{}, - } -} - -func (c *Conf) List(name string, tp string) ([]string, error) { - res := []string{} - - return res, nil -} - -// Secrets - pem, acl -// From config dir, fallback to .ssh, .lego and /etc/certs -// -// "name" may be a hostname -func (c *Conf) Get(name string) ([]byte, error) { - c.m.RLock() - inmd := c.inMemory[name] - c.m.RUnlock() - if inmd != nil { - return inmd, nil - } - - envName := strings.ReplaceAll(name, ".", "_") - envName = strings.ReplaceAll(envName, "/", "_") - envd := os.Getenv(envName) - if envd != "" { - return []byte(envd), nil - } - - for _, b := range c.base { - l := filepath.Join(b, name) - - if _, err := os.Stat(l); err == nil { // || !os.IsNotExist(err) - res, err := ioutil.ReadFile(l) - if err == nil { - return res, nil - } - } - if _, err := os.Stat(l + ".json"); err == nil { // || !os.IsNotExist(err) - res, err := ioutil.ReadFile(l + ".json") - if err == nil { - return res, nil - } - } - } - - // name may be a hostname - use it to load ACME certificate for the host. - - return nil, nil -} - -func (c *Conf) Set(conf string, data []byte) error { - if c == nil || c.base == nil || len(c.base) == 0 { - // In memory - c.m.Lock() - c.inMemory[conf] = data - c.m.Unlock() - - return nil - } - err := ioutil.WriteFile(c.base[0]+conf, data, 0700) - if err != nil { - log.Println("Error saving ", err, c.base, conf) - } - return err -} diff --git a/pkg/dhcp/README.md b/pkg/dhcp/README.md new file mode 100644 index 0000000..d2729c6 --- /dev/null +++ b/pkg/dhcp/README.md @@ -0,0 +1,17 @@ +# DHCP server + +For home network and VMs - and experimenting. + +Goals: +- act as DHCP4/6 server, using the mesh control plane as source of info for + registered MACs/hostnames +- for new hosts, register with the mesh at DHCP time +- for VMs / machines without OS - experiment with automatic provisioning (tftp, https) + +Alternative: +- watch /tmp/leases and update on change +- mount /tmp/leases as a 9P ? + +Others: +- https://coredhcp.io/ + - redis plugin, etc. Can be used standalone and extended. diff --git a/pkg/dhcp/go.mod b/pkg/dhcp/go.mod new file mode 100644 index 0000000..8de28bd --- /dev/null +++ b/pkg/dhcp/go.mod @@ -0,0 +1,13 @@ +module dhcp + +go 1.21 + +require github.com/insomniacslk/dhcp v0.0.0-20231206064809-8c70d406f6d2 + +require ( + github.com/josharian/native v1.1.0 // indirect + github.com/pierrec/lz4/v4 v4.1.14 // indirect + github.com/u-root/uio v0.0.0-20230220225925-ffce2a382923 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect +) diff --git a/pkg/dhcp/ugate_dhcp.go b/pkg/dhcp/ugate_dhcp.go new file mode 100644 index 0000000..231919c --- /dev/null +++ b/pkg/dhcp/ugate_dhcp.go @@ -0,0 +1,47 @@ +package main + +import ( + "net" + + "github.com/insomniacslk/dhcp/dhcpv4" + "github.com/insomniacslk/dhcp/dhcpv4/server4" + "github.com/insomniacslk/dhcp/dhcpv6" + "github.com/insomniacslk/dhcp/dhcpv6/server6" +) + +import ( + "log" +) + +func handler(conn net.PacketConn, peer net.Addr, m dhcpv6.DHCPv6) { + // this function will just print the received DHCPv6 message, without replying + log.Print(m.Summary()) +} +func handler4(conn net.PacketConn, peer net.Addr, m *dhcpv4.DHCPv4) { + // this function will just print the received DHCPv6 message, without replying + log.Print(m.Summary()) +} + +func main() { + if false { + laddr := &net.UDPAddr{ + IP: net.ParseIP("::1"), + Port: dhcpv6.DefaultServerPort, + } + server, err := server6.NewServer("", laddr, handler) + if err != nil { + log.Fatal(err) + } + + go server.Serve() + } + + laddr4 := &net.UDPAddr{ + Port: dhcpv4.ServerPort, + } + s4, err := server4.NewServer("", laddr4, handler4) + if err != nil { + log.Fatal(err) + } + s4.Serve() +} diff --git a/dns/dns.go b/pkg/dns/dns.go similarity index 98% rename from dns/dns.go rename to pkg/dns/dns.go index 025b826..2f2dd45 100644 --- a/dns/dns.go +++ b/pkg/dns/dns.go @@ -32,10 +32,6 @@ var ( return make([]byte, 0, 32*1024) }} - bufferPoolUdp = sync.Pool{New: func() interface{} { - return make([]byte, 0, 1600) - }} - bufferPoolHttp = sync.Pool{New: func() interface{} { return make([]byte, 0, 4096) }} @@ -49,7 +45,6 @@ type UdpWriter interface { WriteTo(data []byte, dstAddr *net.UDPAddr, srcAddr *net.UDPAddr) (int, error) } - type DmDns struct { // used by the dns proxy for forwarding queries to real DNS/UDP clients dnsUDPclient *dns.Client @@ -149,7 +144,7 @@ func (s *DmDns) IPResolve(ip string) string { // New DNS server, listening on port. func NewDmDns(port int) (*DmDns, error) { d := &DmDns{ - Port: port, + Port: port, dnsUDPclient: &dns.Client{}, dnsEntries: map[string]map[uint16]dns.RR{}, dnsByAddr: make(map[string]*DnsEntry), @@ -177,7 +172,7 @@ func NewDmDns(port int) (*DmDns, error) { ReadTimeout: 15 * time.Minute} dns.HandleFunc(".", func(w dns.ResponseWriter, req *dns.Msg) { - m := d.Process(req) + m := d.Process(req) writeMsg(w, m) }) @@ -189,7 +184,9 @@ func NewDmDns(port int) (*DmDns, error) { if err != nil { return d, err } + log.Println("Starting DNS server ", port) + d.UDPConn = l err6 := ipv6.NewPacketConn(l).SetControlMessage(ipv6.FlagDst|ipv6.FlagInterface, true) err4 := ipv4.NewPacketConn(l).SetControlMessage(ipv4.FlagDst|ipv4.FlagInterface, true) @@ -383,7 +380,6 @@ func (s *DmDns) Process(req *dns.Msg) *dns.Msg { return res } -// Actual processing of the request (wrapped in Process with stats) func (s *DmDns) process(req *dns.Msg) *dns.Msg { name := req.Question[0].Name @@ -510,7 +506,7 @@ func (s *DmDns) ForwardRealDNS(req *dns.Msg) (*dns.Msg, error) { } if err != nil { - //log.Println("DNS err:", req.Id, nservers[nsIdx], req.Question[0].Name, err) + //log.Println("DNS err:", req.muxID, nservers[nsIdx], req.Question[0].Name, err) } // Continue with next available DmDns diff --git a/dns/dns_http.go b/pkg/dns/dns_http.go similarity index 98% rename from dns/dns_http.go rename to pkg/dns/dns_http.go index f9022ec..83823dc 100644 --- a/dns/dns_http.go +++ b/pkg/dns/dns_http.go @@ -1,5 +1,3 @@ -//+build DNS_HTTP - package dns import ( @@ -17,8 +15,6 @@ import ( "github.com/miekg/dns" ) -//mux.Handle("/dns/", s) - var ( debugHttp = os.Getenv("DEBUG_DNS") == "1" ) @@ -150,4 +146,3 @@ func (s *DmDns) ForwardHttp(req *dns.Msg) (*dns.Msg, error) { dm.Id = id return dm, nil } - diff --git a/dns/dns_test.go b/pkg/dns/dns_test.go similarity index 100% rename from dns/dns_test.go rename to pkg/dns/dns_test.go diff --git a/pkg/echo/echo.go b/pkg/echo/echo.go new file mode 100644 index 0000000..d29a05d --- /dev/null +++ b/pkg/echo/echo.go @@ -0,0 +1,209 @@ +package echo + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "io" + "log" + "net" + "net/http" + "time" + + "github.com/costinm/meshauth" + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate" +) + +// Control handler, also used for testing +type EchoHandler struct { + UGate *ugate.UGate + + Debug bool + ServerFirst bool + WaitFirst time.Duration + + Received int +} + +var DebugEcho = false + +func EchoPortHandler(ug *ugate.UGate, ph *meshauth.PortListener) error { + e := &EchoHandler{} + nio.ListenAndServe(ph.Address, func(conn net.Conn) { + if e.Debug { + log.Println("Echo ", e.ServerFirst, conn.RemoteAddr()) + } + e.handleStreams(conn, conn) + }) + return nil +} + +func (eh *EchoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if eh.Debug { + log.Println("ECHOH ", r) + } + w.WriteHeader(200) + + // H2 requests require write to be flushed - buffering happens ! + + if r.URL.Port() == "/raw" { + // Similar with echo TCP - but can't close + eh.handleStreams(r.Body, w) + return + } + + w.(http.Flusher).Flush() + //// Wrap w.Body into Stream which does this automatically + str := nio.NewStreamServerRequest(r, w) + // + eh.handle(str, false) +} + +// StreamInfo tracks information about one stream. +type StreamInfo struct { + LocalAddr net.Addr + RemoteAddr net.Addr + + Meta http.Header + + RemoteID string + + ALPN string + + Dest string + + Type string +} + +func GetStreamInfo(str net.Conn) *StreamInfo { + si := &StreamInfo{ + LocalAddr: str.LocalAddr(), + RemoteAddr: str.RemoteAddr(), + } + if s, ok := str.(nio.StreamMeta); ok { + si.Meta = s.RequestHeader() + // TODO: extract identity - including UDS + if tc := s.TLSConnectionState(); tc != nil { + si.ALPN = tc.NegotiatedProtocol + } + } + + return si +} + + +func (e *EchoHandler) handleStreams(in io.Reader, out io.Writer) { + d := make([]byte, 2048) + b := &bytes.Buffer{} + + b.WriteString("Hello world\n") + + time.Sleep(e.WaitFirst) + + if e.ServerFirst { + n, err := out.Write(b.Bytes()) + if e.Debug { + log.Println("ServerFirst write()", n, err) + } + } + writeClosed := false + for { + n, err := in.Read(d) + e.Received += n + if e.Debug { + log.Println("Echo read()", n, err) + } + if err != nil { + if e.Debug { + log.Println("ECHO DONE", err) + } + if err == io.EOF && e.ServerFirst { + binary.BigEndian.PutUint32(d, uint32(n)) + out.Write(d[0:4]) + if cw, ok := out.(nio.CloseWriter); ok { + cw.CloseWrite() + } + } else { + if c, ok := in.(io.Closer); ok { + c.Close() + } + if c, ok := out.(io.Closer); ok { + c.Close() + } + } + return + } + + // Client requests server graceful close + if d[0] == 0 { + if wc, ok := out.(nio.CloseWriter); ok { + wc.CloseWrite() + writeClosed = true + // Continue to read ! The test can check the read byte counts + } + } + + if !writeClosed { + // TODO: add delay (based on req) + out.Write(d[0:n]) + if e.Debug { + log.Println("ECHO write") + } + } + if f, ok := out.(http.Flusher); ok { + f.Flush() + } + } +} + +func (e *EchoHandler) handle(str nio.Stream, serverFirst bool) error { + d := make([]byte, 2048) + + si := GetStreamInfo(str) + si.RemoteID = e.UGate.RemoteID(str) + + b1, _ := json.Marshal(si) + b := &bytes.Buffer{} + + b.Write(b1) + b.Write([]byte{'\n'}) + + if serverFirst { + str.Write(b.Bytes()) + } + //ac.SetDeadline(time.Now().StartListener(5 * time.Second)) + n, err := str.Read(d) + if err != nil { + return err + } + if DebugEcho { + log.Println("ECHO rcv", n, "strid", str.State().StreamId) + } + if !serverFirst { + str.Write(b.Bytes()) + } + str.Write(d[0:n]) + + io.Copy(str, str) + //if DebugClose { + // log.Println("ECHO DONE", str.StreamId) + //} + return nil +} +func (eh *EchoHandler) String() string { + return "Echo" +} +func (eh *EchoHandler) HandleConn(conn net.Conn) error { + s := conn.(nio.Stream) + return eh.Handle(s) +} + +func (eh *EchoHandler) Handle(ac nio.Stream) error { + if DebugEcho { + log.Println("ECHOS ", ac) + } + defer ac.Close() + return eh.handle(ac, false) +} + diff --git a/ugated/pkg/cfquiche/go.mod b/pkg/ext/cfquiche/go.mod similarity index 91% rename from ugated/pkg/cfquiche/go.mod rename to pkg/ext/cfquiche/go.mod index afc13de..1da0b88 100644 --- a/ugated/pkg/cfquiche/go.mod +++ b/pkg/ext/cfquiche/go.mod @@ -8,8 +8,6 @@ replace github.com/costinm/ugate/ugated => ./../.. replace github.com/costinm/ugate/ugatex => ./../../../ugatex -replace github.com/costinm/hbone => ./../../../../hbone - replace github.com/costinm/meshauth => ./../../../../meshauth require ( diff --git a/ugated/pkg/cfquiche/go.sum b/pkg/ext/cfquiche/go.sum similarity index 100% rename from ugated/pkg/cfquiche/go.sum rename to pkg/ext/cfquiche/go.sum diff --git a/ugated/pkg/cfquiche/quiche.go b/pkg/ext/cfquiche/quiche.go similarity index 97% rename from ugated/pkg/cfquiche/quiche.go rename to pkg/ext/cfquiche/quiche.go index 63e6d66..2f7b47b 100644 --- a/ugated/pkg/cfquiche/quiche.go +++ b/pkg/ext/cfquiche/quiche.go @@ -9,8 +9,6 @@ import ( "strings" "time" - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" "github.com/costinm/ugate/pkg/ugatesvc" "github.com/goburrow/quiche" ) @@ -18,7 +16,7 @@ import ( type Quiche struct { } -func (q Quiche) DialMux(ctx context.Context, node *ugate.Cluster, meta http.Header, ev func(t string, stream *nio.Stream)) (ugate.Muxer, error) { +func (q Quiche) DialMux(ctx context.Context, node *ugatesvc.Cluster, meta http.Header, ev func(t string, stream *ugatesvc.Stream)) (ugatesvc.Muxer, error) { //quiche.EnableDebugLogging() config, err := newConfig(quiche.ProtocolVersion) @@ -36,7 +34,7 @@ type client struct { conn *quiche.Connection } -func New(ug *ugatesvc.UGate) *Quiche { +func New(ug *ugate.UGate) *Quiche { //os.Setenv("QUIC_GO_LOG_LEVEL", "DEBUG") // We will only register a single QUIC server by default, and a factory for cons diff --git a/ugated/pkg/cfquiche/quiche.md b/pkg/ext/cfquiche/quiche.md similarity index 100% rename from ugated/pkg/cfquiche/quiche.md rename to pkg/ext/cfquiche/quiche.md diff --git a/ugated/pkg/cfquiche/quiche_test.go b/pkg/ext/cfquiche/quiche_test.go similarity index 77% rename from ugated/pkg/cfquiche/quiche_test.go rename to pkg/ext/cfquiche/quiche_test.go index dbaaef6..bdef18f 100644 --- a/ugated/pkg/cfquiche/quiche_test.go +++ b/pkg/ext/cfquiche/quiche_test.go @@ -6,24 +6,23 @@ import ( "strconv" "testing" - "github.com/costinm/ugate" "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/test" + "github.com/costinm/ugate/pkg/test" ) func BenchmarkUGateQUIC(b *testing.B) { // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{BasePort: 6300, NoAccessLog: true, Name: "alice"}, func(gate *ugatesvc.UGate) { + alice := test.InitTestServer(test.ALICE_KEYS, &ugatesvc.MeshSettings{BasePort: 6300, AccessLog: true, Name: "alice"}, func(gate *ugate.UGate) { New(gate) }) // In memory config store. All options - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, NoAccessLog: true, Name: "bob"}, func(bob *ugatesvc.UGate) { + bob := test.InitTestServer(test.BOB_KEYS, &ugatesvc.MeshSettings{BasePort: 6400, AccessLog: true, Name: "bob"}, func(bob *ugate.UGate) { New(bob) }) log.Println(bob.Auth.VIP6) - bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugate.PORT_BTS) + bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugatesvc.PORT_BTS) // Alice dials a MUX to bob bobNode := alice.GetOrAddNode(bob.Auth.ID) @@ -62,17 +61,17 @@ func BenchmarkUGateQUIC(b *testing.B) { func TestQuic(t *testing.T) { // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{BasePort: 6300, Name: "alice"}, func(gate *ugatesvc.UGate) { + alice := test.InitTestServer(test.ALICE_KEYS, &ugatesvc.MeshSettings{BasePort: 6300, Name: "alice"}, func(gate *ugate.UGate) { New(gate) }) //// In memory config store. All options - //bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, Name: "bob"}, func(bob *ugatesvc.UGate) { + //bob := test.NewTestNode(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, Name: "bob"}, func(bob *ugate.UGate) { // New(bob) //}) //log.Println(bob.Auth.VIP6) - bobAddr := "localhost:" + strconv.Itoa(6100+ugate.PORT_BTS) + bobAddr := "localhost:" + strconv.Itoa(6100+ugatesvc.PORT_BTS) // Alice dials a MUX to bob bobNode := alice.GetOrAddNode(test.BOB_ID) @@ -94,7 +93,7 @@ func TestQuic(t *testing.T) { //// Bob -> H3R -> Alice -> Echo //// Bob did not dial Alice, doesn't have the address ( and alice didn't start server ) - //t.Run("reverse", func(t *testing.T) { + //t.Init("reverse", func(t *testing.T) { // // Using DialContext interface - mesh address will use the node. // ctx, cf := context.WithTimeout(context.Background(), 5000 * time.Second) // defer cf() diff --git a/pkg/ext/nft/go.mod b/pkg/ext/nft/go.mod new file mode 100644 index 0000000..d7bb5d9 --- /dev/null +++ b/pkg/ext/nft/go.mod @@ -0,0 +1,20 @@ +module github.com/costinm/ugate/pkg/ext/nft + +go 1.21 + +require ( + github.com/google/nftables v0.1.0 + github.com/greenpau/cni-plugins v1.0.12 + golang.org/x/sys v0.6.0 +) + +require ( + github.com/containernetworking/cni v1.1.2 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/josharian/native v1.1.0 // indirect + github.com/mdlayher/netlink v1.7.1 // indirect + github.com/mdlayher/socket v0.4.0 // indirect + github.com/vishvananda/netns v0.0.4 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/sync v0.1.0 // indirect +) diff --git a/pkg/ext/nft/nft.go b/pkg/ext/nft/nft.go new file mode 100644 index 0000000..37629d1 --- /dev/null +++ b/pkg/ext/nft/nft.go @@ -0,0 +1,23 @@ +package nft + +import ( + "github.com/google/nftables" + "github.com/greenpau/cni-plugins/pkg/utils" +) + +/* + +nft list ruleset + +*/ + +func Nft() { + nftables.New() + + // They use /proc/%d/task/%d/ns/net to get the net NS. + + // Named networks: /var/run/netns/NAME + + utils.CreateTable("4", "mesh") + utils.CreateTable("6", "mesh") +} diff --git a/pkg/ext/nft/nft_test.go b/pkg/ext/nft/nft_test.go new file mode 100644 index 0000000..129b6e6 --- /dev/null +++ b/pkg/ext/nft/nft_test.go @@ -0,0 +1,94 @@ +package nft + +import ( + "log" + "net" + "testing" + + "github.com/google/nftables" + "github.com/google/nftables/binaryutil" + "github.com/google/nftables/expr" + "golang.org/x/sys/unix" +) + +func TestNFT(t *testing.T) { + nt, err := nftables.New() + if err != nil { + t.Fatal() + } + //nt.AddRule(&nftables.Rule{}) + + //cl, err := nt.ListChains() + //if err != nil { + // t.Fatal(err) + //} + //for _, c := range cl { + // log.Println("CHAIN", c.Table.Name, c.Policy, c.Type, c.Hooknum, c.Priority) + // rl, err := nt.GetRules(c.Table, c) + // if err != nil { + // t.Fatal(err) + // } + // for _, cr := range rl { + // log.Println(cr.Exprs, cr.UserData) + // } + //} + + ft := &nftables.Table{Name: "costin", Family: nftables.TableFamilyIPv4} + nt.AddTable(ft) + if err := nt.Flush(); err != nil { + t.Fatal(err) + } + + nt.AddChain(&nftables.Chain{Name: "divert", Table: ft, Type: nftables.ChainTypeFilter}) + + ll, err := nt.ListTables() + if err != nil { + t.Fatal(err) + } + for _, c := range ll { + log.Println(c.Name, c.Use, c.Flags, c.Flags) + } + + // nft add rule filter divert ip protocol tcp tproxy to :50080 + nt.AddRule(&nftables.Rule{ + Table: &nftables.Table{Name: "costin", Family: nftables.TableFamilyIPv4}, + Chain: &nftables.Chain{ + Name: "divert", + Type: nftables.ChainTypeFilter, + Hooknum: nftables.ChainHookPrerouting, + Priority: nftables.ChainPriorityRef(-150), + }, + Exprs: []expr.Any{ + // payload load 4b @ network header + 12 => reg 1 + &expr.Payload{ + DestRegister: 1, + Base: expr.PayloadBaseNetworkHeader, + Offset: 12, + Len: 4, + }, + // cmp eq reg 1 0x0245a8c0 + &expr.Cmp{ + Op: expr.CmpOpEq, + Register: 1, + Data: net.ParseIP("192.168.69.2").To4(), + }, + + // [ payload load 1b @ network header + 9 => reg 1 ] + &expr.Payload{DestRegister: 1, Base: expr.PayloadBaseNetworkHeader, Offset: 9, Len: 1}, + // [ cmp eq reg 1 0x00000006 ] + &expr.Cmp{Op: expr.CmpOpEq, Register: 1, Data: []byte{unix.IPPROTO_TCP}}, + // [ immediate reg 1 0x0000a0c3 ] + &expr.Immediate{Register: 1, Data: binaryutil.BigEndian.PutUint16(14001)}, + // [ tproxy ip port reg 1 ] + &expr.TProxy{ + Family: byte(nftables.TableFamilyIPv4), + TableFamily: byte(nftables.TableFamilyIPv4), + RegPort: 1, + }, + }, + }) + + if err := nt.Flush(); err != nil { + t.Fatal(err) + } +} diff --git a/pkg/ext/syncthing/syncthing.md b/pkg/ext/syncthing/syncthing.md new file mode 100644 index 0000000..2f09225 --- /dev/null +++ b/pkg/ext/syncthing/syncthing.md @@ -0,0 +1,67 @@ +# Syncthing support + +Syncthing is a modern decentralised file/directory sync server. + +At it's core, it maintains a database for each sync root, and a protocol to send/receive changes. +It runs as a server using inotify or periodic scans - so change propagation can be very fast if inotify is set properly. + +Besides the nice UI and well documented uses, there are few interesting concepts and more interesting uses. + +# Concerns + +Syncthing invents its own directory and relay systems, as well as a custom protocol. + +While the core rsync+database is great - it may work better on top of SSH or H2/H3, with +standard mTLS. + +Also, a proper NFS-style with caching may be more effective in a lot of cases - syncthing is still +an option for workloads with no priviledges to mount anything. + +## Proper use + +For multi-master sync - not friendly to databases or similar large files with multiple changes in the middle. +That includes things like home directory - the chrome databases and a lot of other things would fail. + +It does work well enough for master-slave, with one computer doing writes and the rest have read-only copies. +Still not ideal for replicating databases ( and structured files), better to use native protocols. + +Great for source files, doc dirs (with few concurrent writes), config files. + + +## Identity + +- mTLS based +- Device ID is SHA256 of certificate + +## Public or private infrastructure + +Syncthing can work in an isolated mode - using local discovery for node IPs - however this doesn't work +very well in VPCs if broadcast is not supported. + + +Like Tor, bittorrent or IPFS - it is possible to operate it independent of the public infra, or to use the public infra. + + +## Protocols + +1. Discovery - Global Discovery v3 + - JSON with []addresses + - tcp://:22000 + - Local v4 - broadcast UDP on port 21027, MC on FF12:8384, 30 to 60 sec interval, retransmit when new discovered + - Magic, ID, []addresses, instance_id - to detect restart +2. Relay - + - bep-relay TLS ALPN + - Join relay, wait for messages from relay to connect (SessionInvitation with key), sends JoinSessionRequest + - Connect and request a session with a waiting server. + - Both end do mTLS - but there is no certificate signed by common authority. +3. Filesystem/Blob storage with sync - block exchange protocol v1 + + +## Others + +- rsync - no database, no realtime. Good for daily backups. + - librsync - used in duplicity and other tools + - rdiff and rdiff-backup - use rsync for backup + - duplicity - can save to S3, sftp, etc + - zsync - for downloads, iso images - over HTTP with .zsync files for the rolling hashes. + - rclone diff --git a/pkg/fs/README.md b/pkg/fs/README.md new file mode 100644 index 0000000..457c311 --- /dev/null +++ b/pkg/fs/README.md @@ -0,0 +1,43 @@ +# File servers + +Interfaces: +- net.http.FileSystem - predates fs.FS interface, there is an adapter. + +# SFTP + +- chrome ssh extension +- almost all linux machines + +https://github.com/pkg/sftp - only "/" + +# 9P + +- in kernel +- no crypto - great for same machine and 'over secure L4' + +From http://9p.cat-v.org/implementations - 4 golang impl +- https://github.com/docker-archive/go-p9p - archived 2020 +- https://code.google.com/archive/p/go9p/source/default/source - seems obsolete, 2015 +- https://github.com/Harvey-OS/ninep - 2019 - but claims to be stable + +Not listed: +- https://github.com/droyo/styx - 2 year since last push + +Not listed but appears active: +- https://github.com/knusbaum/go9p + - https://github.com/knusbaum/go9p/blob/master/cmd/mount9p/main.go - FUSE + - https://github.com/knusbaum/go9p/blob/master/cmd/import9p/main.go - uses kubectl to run export9p + - export9p can use stdin/stdout, uds, tcp + + +## Servers + + +## Client + +- v9fs - native kernel + +# APIs + +- os.File, etc - used by sshfs +- diff --git a/pkg/fs/ns9p/go.mod b/pkg/fs/ns9p/go.mod new file mode 100644 index 0000000..98a591e --- /dev/null +++ b/pkg/fs/ns9p/go.mod @@ -0,0 +1,13 @@ +module ns9p + +go 1.21 + +require ( + 9fans.net/go v0.0.2 // indirect + github.com/Plan9-Archive/libauth v0.0.0-20180917063427-d1ca9e94969d // indirect + github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect + github.com/fhs/mux9p v0.3.1 // indirect + github.com/hanwen/go-fuse/v2 v2.0.3 // indirect + github.com/knusbaum/go9p v1.18.0 // indirect + golang.org/x/sys v0.0.0-20201020230747-6e5568b54d1a // indirect +) diff --git a/pkg/fs/ns9p/ns9p.go b/pkg/fs/ns9p/ns9p.go new file mode 100644 index 0000000..6c62872 --- /dev/null +++ b/pkg/fs/ns9p/ns9p.go @@ -0,0 +1,83 @@ +package ns9p + +import ( + "crypto/rand" + "fmt" + "time" + + "github.com/knusbaum/go9p" + "github.com/knusbaum/go9p/fs" + "github.com/knusbaum/go9p/proto" +) + +type NS9P struct { + UID string + GID string + + Address string +} + +func (p *NS9P) InitNS9PS() error { + if p.UID == "" { + p.UID = "build" + } + if p.GID == "" { + p.GID = p.UID + } + utilFS, root := fs.NewFS("build", "build", 0777) + + events := fs.NewStaticFile(utilFS.NewStat("events", "build", "build", 0444), []byte{}) + root.AddChild(events) + root.AddChild( + WrapEvents(events, fs.NewDynamicFile(utilFS.NewStat("time", "glenda", "glenda", 0444), + func() []byte { + return []byte(time.Now().String() + "\n") + }, + )), + ) + root.AddChild( + WrapEvents(events, &fs.WrappedFile{ + File: fs.NewBaseFile(utilFS.NewStat("random", "glenda", "glenda", 0444)), + ReadF: func(fid uint64, offset uint64, count uint64) ([]byte, error) { + bs := make([]byte, count) + rand.Reader.Read(bs) + return bs, nil + }, + }), + ) + + // Post a local service - i.e. create a file descriptor, + // That is using NAMESPACE env or /tmp/ns.USER.str/ + go go9p.PostSrv("utilfs", utilFS.Server()) + + return go9p.Serve(p.Address, utilFS.Server()) +} + +func addEvent(f *fs.StaticFile, s string) { + f.Lock() + defer f.Unlock() + f.Data = append(f.Data, []byte(s+"\n")...) +} + +func WrapEvents(evFile *fs.StaticFile, f fs.File) fs.File { + fname := f.Stat().Name + return &fs.WrappedFile{ + File: f, + OpenF: func(fid uint64, omode proto.Mode) error { + addEvent(evFile, fmt.Sprintf("Open %s: mode: %d", fname, omode)) + return f.Open(fid, omode) + }, + ReadF: func(fid uint64, offset uint64, count uint64) ([]byte, error) { + addEvent(evFile, fmt.Sprintf("Read %s: offset %d, count %d", fname, offset, count)) + return f.Read(fid, offset, count) + }, + WriteF: func(fid uint64, offset uint64, data []byte) (uint32, error) { + addEvent(evFile, fmt.Sprintf("Write %s: offset %d, data %d bytes", fname, offset, len(data))) + return f.Write(fid, offset, data) + }, + CloseF: func(fid uint64) error { + addEvent(evFile, fmt.Sprintf("Close %s", fname)) + return f.Close(fid) + }, + } +} diff --git a/pkg/goh2/http.go b/pkg/goh2/http.go new file mode 100644 index 0000000..fa79e12 --- /dev/null +++ b/pkg/goh2/http.go @@ -0,0 +1,305 @@ +package goh2 + +import ( + "context" + "errors" + "io" + "log" + "net" + "net/http" + "os" + "sync" + "time" + + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate" + "golang.org/x/net/http2" +) + +// HTTP2 based transport, using x/net/http2 library directly (instead of standard library). + + + +// It also implements http.Handler, and can be registered with a HTTP/2 or HTTP/1 server. +// For HTTP/1 it will use websocket, with standard TLS and SPDY for crypto or mux. +// For HTTP/2 it will the normal connection if mTLS was negotiated. +// Otherwise will do a TLS+SPDY handshake for the POST method. +type H2Transport struct { + ug *ugate.UGate + + // H2Transport object for http2 library + h2t *http2.Transport + + // Included file server, for UI. + fs http.Handler + conns map[*http2.ClientConn]*ugate.MeshCluster + + m sync.RWMutex +} + +func NewH2Transport(ug *ugate.UGate) (*H2Transport, error) { + h2 := &H2Transport{ + ug: ug, + + conns: map[*http2.ClientConn]*ugate.MeshCluster{}, + h2t: &http2.Transport{ + ReadIdleTimeout: 10000 * time.Second, + StrictMaxConcurrentStreams: false, + AllowHTTP: true, + }, + } + + if _, err := os.Stat("./www"); err == nil { + h2.fs = http.FileServer(http.Dir("./www")) + ug.Mux.Handle("/", h2.fs) + } + + return h2, nil +} + +// Using pipe: 345Mbps +// +// Not using: 440Mbps. +// The QUIC read buffer is 8k +const usePipe = false + + + +// DialContext creates on TCP-over-H2 connection. +// rt is expected to be a H2 round tripper. +// +// If s is specified, it will be used as input. +func (t *H2Transport) DialContext(ctx context.Context, addr string, s io.Reader, + rt http.RoundTripper) (nio.Stream, error){ + // We have an active reverse RoundTripper for the host. + var in io.Reader + var out io.WriteCloser + + h, port, _ := net.SplitHostPort(addr) + + if usePipe || s == nil { + in, out = io.Pipe() // pipe.New() + //in = p + //out = p + } else { + in = s + } + + // Regular TCP stream, upgraded to H2. + // This is a simple tunnel, so use the right URL + r1, err := http.NewRequestWithContext(ctx, "POST", + "https://"+h+"/dm/127.0.0.1:"+port, in) + + // RoundTrip H2Transport guarantees this is set + if r1.Header == nil { + r1.Header = make(http.Header) + } + + // RT client - forward the request. + res, err := rt.RoundTrip(r1) + if err != nil { + log.Println("H2R error", addr, err) + return nil, err + } + + rs := nio.NewStreamRequest(r1, out, res) + //if DebugClose { + // log.Println(rs.State().StreamId, "dialHbone.TUN: ", addr, r1.URL) + //} + return rs, nil +} + +func (t *H2Transport) MarkDead(h2c *http2.ClientConn) { + t.m.Lock() + dmn := t.conns[h2c] + if dmn != nil { + dmn.RoundTripper = nil + log.Println("Dead", dmn.ID, h2c) + } + t.m.Unlock() +} + +// GetClientConn returns H2 multiplexed client connection for connecting to a mesh host. +// +// Part of x.net.http2.ClientConnPool interface. +// addr is a host:port, based on the URL host. +// The result implements RoundTrip interface. +func (t *H2Transport) GetClientConn(ctx context.Context, prot string, addr string) (*http2.ClientConn, error) { + // The h2 H2Transport has support for dialing TLS, with the std handshake. + // It is possible to replace H2Transport.DialContext, used in clientConnPool + // which tracks active connections. Or specify a custom conn pool. + + // addr is either based on req.Host or the resolved IP, in which case Host must be used for TLS verification. + host, _, _ := net.SplitHostPort(addr) + + nid := t.ug.Auth.Host2ID(addr) + // TODO: if mesh node, don't attempt to dial directly + dmn := t.ug.GetCluster(nid) + if dmn != nil { + rt := dmn.RoundTripper + if rt != nil { + if rtc, ok := rt.(*http2.ClientConn); ok { + return rtc, nil + } + } + + // TODO: if we don't have addr, use discovery + + // TODO: if discovery doesn't return an address, use upsteram gate. + if dmn.Addr == "" { + return nil, NotFound + } + // Real address - + addr = dmn.Addr + } + var tc nio.Stream + var err error + // TODO: use local announces + // TODO: use VPN server for all or for mesh + + rc, err := t.ug.DialContext(ctx, "tcp", addr) + if err != nil { + return nil, err + } + + // Separate timeout for handshake and connection - ctx is used for the entire connection. + to := t.ug.HandsahakeTimeout + if to == 0 { + to = 5 * time.Second + } + ctx1, cf := context.WithTimeout(ctx, to) + defer cf() + + if prot == "http" { + tc = nio.GetStream(rc, rc) + } else { + tlsc, err := t.ug.NewTLSConnOut(ctx1, rc, t.ug.Auth, + host, []string{"h2"}) + if err != nil { + return nil, err + } + tc = nio.NewStreamConn(tlsc) + } + + // TODO: reuse connection or use egress server + // TODO: track it by addr + + // This is using the native stack http2.H2Transport - implements RoundTripper + cc, err := t.h2t.NewClientConn(tc) + + if dmn != nil { + // Forward connection ok too. + dmn.RoundTripper = cc + } + return cc, err +} + +var NotFound = errors.New("not found") + +// Ex: curl localhost:9080/debug/vars --http2-prior-knowledge + +// Handle accepted connection on a port declared as "http" +// +//func (t *H2Transport) handleHTTPListener(bconn *InOutStream) error { +// +// err := SniffH2(bconn) +// if err != nil { +// return err +// } +// ctx := bconn.Context() +// +// if bconn.Type == ProtoH2 { +// bconn.TLS = &tls.ConnectionState{ +// Version: tls.VersionTLS12, +// CipherSuite: tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, +// } +// t.h2Server.ServeConn( +// bconn, +// &http2.ServeConnOpts{ +// Handler: t, // Also plain text, needs to be upgraded +// Context: ctx, // associated with the stream, with cancel +// +// //Context: // can be used to cancel, pass meta. +// // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) +// }) +// } else { +// bconn.Type = ProtoHTTP +// // TODO: identify 'the proxy protocol' +// // port is marked as HTTP - assume it is HTTP +// t.httpListener.incoming <- bconn +// // TODO: wait for connection to be closed. +// <-ctx.Done() +// } +// +// return nil +//} + +//func SniffH2(s *InOutStream) error { +// var proto string +// +// for { +// buf, err := s.Fill(0) +// if err != nil { +// return err +// } +// +// if ix := bytes.IndexByte(buf, '\n'); ix >= 0 { +// if bytes.Contains(buf, []byte("HTTP/1.1")) { +// proto = ProtoHTTP +// break +// } +// } +// if ix := bytes.IndexByte(buf, '\n'); ix >= 0 { +// if bytes.Contains(buf, []byte("HTTP/2.0")) { +// proto = ProtoH2 +// break +// } +// } +// } +// +// s.Type = proto +// +// return nil +//} + + + +// FindMux - find an EndpointCon that is able to accept new connections. +// Will also dial a connection as needed, and verify the mux can accept a new connection. +// LB should happen here. +// WIP: just one, no retry, only for testing. +// TODO: implement LB properly +//func (t *H2Transport) FindMux(ctx context.Context, c *ugate.MeshCluster) (*ugate.EndpointCon, error) { +// if len(c.EndpointCon) == 0 { +// var endp *ugate.Host +// if len(c.Hosts) > 0 { +// endp = c.Hosts[0] +// } else { +// endp = &ugate.Host{} +// c.Hosts = append(c.Hosts, endp) +// } +// +// ep := &ugate.EndpointCon{ +// Cluster: c, +// Endpoint: endp, +// } +// c.EndpointCon = append(c.EndpointCon, ep) +// } +// +// ep := c.EndpointCon[0] +// +// if ep.RoundTripper == nil { +// h2c, err := t.GetClientConn(ctx, "http", c.Addr) +// // TODO: on failure, try another endpoint +// //err := t.dialH2ClientConn(ctx, ep) +// if err != nil { +// return nil, err +// } +// ep.RoundTripper = h2c +// } +// return ep, nil +//} + +//func (l *H2Transport) Close() error { +// return nil +//} diff --git a/pkg/gvisor/README.md b/pkg/gvisor/README.md new file mode 100644 index 0000000..0d9db17 --- /dev/null +++ b/pkg/gvisor/README.md @@ -0,0 +1,46 @@ +# Integration with gVisor TCP/IP stack + +Original attempt used a number of patches to netstack (before it was merged back into +gvisor repo). I proted them to the new repo, but it is hard to maintain and never +got the time to push them up. + +The patches were mainly to capture all and support 'transparent' mode for UDP. + +gvisor-tap-vsock project solves this - and much more, so I will gradually move +to using it. + +## Raw and packet UDP + +Return the full packet - but after all the gvisor processing. Packet cooked and raw seem the same. + +Alternative is to use NIC.DeliverNetworkPacket only for TCP, and process the packet directly for UDP. +This may also avoid few mem copy. + + +## UDP sending with 'original src' + +- add SpoofedAddress to stack/packet_buffer +- use it in ipv4/ipv4.go WritePacket, which adds the IP header + +- From added to WriteOptions +- udp/endpoint.go - sets localAdd and localPort. Modify internal sendUDP to add SoofedAddress + +## Capture all + +- stack/transport_demuxer - use port FFFF at the end, if no other port matches +- same can be done with iptables now - not clear if only REDIRECT or TPROXY too + +TODO: should use Istio magic port, and a flag to enable + + +# gvisor-tap-vsock + +- client interface for 'expose' (/services/forwarder/expose, json) local to remote +- tap package defines a VirtualDevice (NewSwitch) +- includes some ssh forwarding code +- includes DHCP, DNS, tcp and udp forwarding + +- 'vsock' transport using mdlayhervsock + - VM to hypervisor or Host machine - AF_VSOCK (http://wiki.qemu-project.org/Features/VirtioVsock) + - firecracker/others map it to AF_UNIX on host + - virtio based - tx/rx queue, but exposed as socket diff --git a/pkg/gvisor/go.mod b/pkg/gvisor/go.mod new file mode 100644 index 0000000..c6a9d17 --- /dev/null +++ b/pkg/gvisor/go.mod @@ -0,0 +1,21 @@ +module github.com/costinm/ugate/pkg/ext/gvisor + +go 1.21 + +require ( + github.com/costinm/ugate v0.0.0-20221024013023-789def6d5dde + github.com/sirupsen/logrus v1.8.1 + github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 + gvisor.dev/gvisor v0.0.0-20221019184736-ae7cca128546 +) + +require ( + github.com/bazelbuild/rules_go v0.30.0 // indirect + github.com/costinm/meshauth v0.0.0-20221013185453-bb5aae6632f8 // indirect + github.com/google/btree v1.0.1 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect + google.golang.org/protobuf v1.28.0 // indirect +) diff --git a/ugated/pkg/gvisor/tun_capture_gvisor.go b/pkg/gvisor/tun_capture_gvisor.go similarity index 61% rename from ugated/pkg/gvisor/tun_capture_gvisor.go rename to pkg/gvisor/tun_capture_gvisor.go index 5626f27..3a2db8a 100644 --- a/ugated/pkg/gvisor/tun_capture_gvisor.go +++ b/pkg/gvisor/tun_capture_gvisor.go @@ -3,6 +3,7 @@ package gvisor import ( "bytes" "errors" + "fmt" "io" "log" "net" @@ -11,11 +12,11 @@ import ( "strings" "github.com/costinm/ugate" - + "gvisor.dev/gvisor/pkg/buffer" "gvisor.dev/gvisor/pkg/sentry/socket/netstack" "gvisor.dev/gvisor/pkg/tcpip" "gvisor.dev/gvisor/pkg/tcpip/adapters/gonet" - + "gvisor.dev/gvisor/pkg/tcpip/header" "gvisor.dev/gvisor/pkg/tcpip/link/fdbased" "gvisor.dev/gvisor/pkg/tcpip/link/loopback" "gvisor.dev/gvisor/pkg/tcpip/link/sniffer" @@ -40,15 +41,19 @@ type GvisorTun struct { // The IP stack serving the tun. It intercepts all TCP connections. IPStack *stack.Stack - DefUDP tcpip.Endpoint - DefTCP tcpip.Endpoint + DefUDP tcpip.Endpoint + DefUDP6 tcpip.Endpoint udpPacketConn net.PacketConn // If set, will be used to handle accepted TCP connections and UDP packets. - // Else the Listener interface is used. - Handler TUNHandler - UDPHandler UDPHandler + // Else the PortListener interface is used. + Handler TUNHandler + UDPHandler UDPHandler + StackOptions stack.Options + + // The low level TAP(?) device + LinkEndpoint *stack.LinkEndpoint } // Used by the TUN interface @@ -64,7 +69,7 @@ type UDPHandler interface { // On Linux we need a similar setup. This still requires iptables to mark // packets from istio-proxy, and use 2 routing tables. type TUNHandler interface { - HandleTUN(conn net.Conn, target *net.TCPAddr, la *net.TCPAddr) error + HandleTUN(conn net.Conn, target *net.TCPAddr, la *net.TCPAddr) } // UdpWriter is the interface implemented by the GvisorTun, to send @@ -122,8 +127,8 @@ default via 10.1.10.1 dev wlan0 table wlan0 proto static default dev tun0 table tun0 proto static scope link 10.1.10.0/24 dev wlan0 proto kernel scope link src 10.1.10.124 10.10.154.0/24 dev tun0 proto kernel scope link src 10.10.154.232 -2001:470:1f04:429::/64 dev tun0 table tun0 proto kernel metric 256 -fe80::/64 dev tun0 table tun0 proto kernel metric 256 +2001:470:1f04:429::/64 dev tun0 table tun0 proto kernel metrics 256 +fe80::/64 dev tun0 table tun0 proto kernel metrics 256 ip rule show 0: from all lookup local @@ -213,6 +218,7 @@ func NewTUNFD(fd io.ReadWriteCloser, handler TUNHandler, udpNat UDPHandler) UdpW log.Println("Link err", err) } linkID = ep + t := NewGvisorTunCapture(&linkID, handler, udpNat, false) return t @@ -298,14 +304,16 @@ func NewTUNFD(fd io.ReadWriteCloser, handler TUNHandler, udpNat UDPHandler) UdpW // All TCP streams initiated on the tun or localhost will be captured. func NewGvisorTunCapture(ep *stack.LinkEndpoint, handler TUNHandler, udpNat ugate.UDPHandler, snif bool) *GvisorTun { t := &GvisorTun{ - Handler: handler, - UDPHandler: udpNat, + Handler: handler, + UDPHandler: udpNat, + LinkEndpoint: ep, } netProtos := []stack.NetworkProtocolFactory{ ipv4.NewProtocol, ipv6.NewProtocol, arp.NewProtocol} + transProtos := []stack.TransportProtocolFactory{ tcp.NewProtocol, udp.NewProtocol, @@ -334,7 +342,7 @@ func NewGvisorTunCapture(ep *stack.LinkEndpoint, handler TUNHandler, udpNat ugat // } //} - t.IPStack = stack.New(stack.Options{ + t.StackOptions = stack.Options{ NetworkProtocols: netProtos, TransportProtocols: transProtos, //Clock: clock, @@ -342,15 +350,19 @@ func NewGvisorTunCapture(ep *stack.LinkEndpoint, handler TUNHandler, udpNat ugat HandleLocal: false, // accept from other nics // Enable raw sockets for users with sufficient // privileges. - RawFactory: raw.EndpointFactory{}, + RawFactory: raw.EndpointFactory{}, + AllowPacketEndpointWrite: true, //UniqueID: uniqueID, //IPTables: ipt, - }) + } + + t.IPStack = stack.New(t.StackOptions) loopbackLinkID := loopback.New() if true || snif { loopbackLinkID = sniffer.New(loopbackLinkID) } + t.IPStack.CreateNIC(1, loopbackLinkID) //addr1 := "\x7f\x00\x00\x01" @@ -358,16 +370,11 @@ func NewGvisorTunCapture(ep *stack.LinkEndpoint, handler TUNHandler, udpNat ugat if err := t.IPStack.AddProtocolAddress(1, tcpip.ProtocolAddress{Protocol: ipv4.ProtocolNumber, - AddressWithPrefix: tcpip.Address(addr1.AsSlice()).WithPrefix(), + AddressWithPrefix: tcpip.AddrFromSlice(addr1.AsSlice()).WithPrefix(), }, stack.AddressProperties{}); err != nil { log.Print("Can't add address", err) return t } - //if err := t.IPStack.AddAddress(1, - // tcpip.Address(net.IPv6loopback)); err != nil { - // log.Print("Can't add IP6 address", err) - // return t - //} ep1 := *ep @@ -386,43 +393,97 @@ func NewGvisorTunCapture(ep *stack.LinkEndpoint, handler TUNHandler, udpNat ugat //} t.IPStack.SetPromiscuousMode(2, true) - t.IPStack.SetSpoofing(2, true) - sn, _ := tcpip.NewSubnet(tcpip.Address("\x00"), tcpip.AddressMask("\x00")) - t.IPStack.AddRoute(tcpip.Route{NIC: 2, Destination: sn}) + // can bind to any IP + t.IPStack.SetSpoofing(2, true) - sn, _ = tcpip.NewSubnet(tcpip.Address("\x00"), tcpip.AddressMask("\x00")) - //t.IPStack.AddSubnet(2, ipv6.ProtocolNumber, sn) + sn, _ := tcpip.NewSubnet(tcpip.AddrFrom4([4]byte{0, 0, 0, 0}), tcpip.MaskFrom("\x00")) t.IPStack.AddRoute(tcpip.Route{NIC: 2, Destination: sn}) gsetRouteTable(t.IPStack, ep != nil) - //epp := newEpProxy() - go t.DefTcpServer(handler) //echo) - - go t.DefTcp6Server() //echo) + go t.DefTcpServer(handler) - go t.defUdpServer() - t.defUdp6Server() + go t.defUdpServerForwarder(ipv4.ProtocolNumber) + go t.defUdpServer(ipv4.ProtocolNumber) + go t.defUdpServer(ipv6.ProtocolNumber) return t } -func (nt *GvisorTun) WriteTo(data []byte, dst *net.UDPAddr, src *net.UDPAddr) (int, error) { +func (gt *GvisorTun) WriteTo2(data []byte, dst *net.UDPAddr, src *net.UDPAddr) error { + // Options: + /* + - gvisor - create header.IPv4, UDP - use Encode + - gopacket - Layer breaks content and payload from a byte[] + PacketBuilder - link, network, transport, application layers + Packet{} - created by Decode, Data() has the full slice, meta + IPv4, etc implement SerializeTo(SerializeBuffer) + SerializeBuffer - PrependBytes, AppendBytes, tracks Layers, Clear + - start, prepended, appended. New(expectedPrepend, expectedAppend) + */ + + return nil +} + +func (gt *GvisorTun) WriteTo(data []byte, dst *net.UDPAddr, src *net.UDPAddr) (int, error) { + if gt.DefUDP == nil { + // Write directly to the TUN + + // This makes a copy - not sure how to avoid it, but caller doesn't know about ownership + bb := buffer.MakeWithData(data) + pb := stack.NewPacketBuffer(stack.PacketBufferOptions{ + Payload: bb, + }) + + if dst.IP.To4() != nil { + hdrb := pb.NetworkHeader().Push(header.IPv4MinimumSize + header.UDPMinimumSize) + ipv4h := header.IPv4(hdrb[0:header.IPv4MinimumSize]) + udph := header.UDP(hdrb[header.IPv4MinimumSize:]) + // See addIPHeader + ipv4h.Encode(&header.IPv4Fields{ + TOS: 0, + TotalLength: uint16(len(data)) + header.UDPMinimumSize, + ID: 0, + TTL: 0, + Protocol: uint8(udp.ProtocolNumber), + SrcAddr: tcpip.AddrFromSlice(src.IP), + DstAddr: tcpip.AddrFromSlice(dst.IP), + }) + ipv4h.SetChecksum(^ipv4h.CalculateChecksum()) + udph.Encode(&header.UDPFields{ + SrcPort: uint16(src.Port), + DstPort: uint16(dst.Port), + Length: uint16(len(data)), + Checksum: 0, + }) + } + + var pkts stack.PacketBufferList + pkts.PushBack(pb) + + (*gt.LinkEndpoint).WritePackets(pkts) + return len(data), nil + } + // + addrb := []byte(dst.IP) //srcaddrb := []byte(src.IP) // TODO: how about from ? // TODO: do we need to make a copy ? netstack passes ownership, we may reuse buffers - n, err := nt.DefUDP.Write(bytes.NewBuffer(data), + + // DefUDP is a raw socket - need to add IP header + + n, err := gt.DefUDP.Write(bytes.NewBuffer(data), tcpip.WriteOptions{ To: &tcpip.FullAddress{ Port: uint16(dst.Port), - Addr: tcpip.Address(addrb), + Addr: tcpip.AddrFromSlice(addrb), }, - // TODO(costin): PATCH + // TODO(costin): upstream patch for transparent UDP //From: &tcpip.FullAddress{ // Port: uint16(src.Port), - // Addr: tcpip.Address(srcaddrb), + // Addr: tcpip.AddrFromSlice(srcaddrb), //}, }) if err != nil { @@ -431,41 +492,90 @@ func (nt *GvisorTun) WriteTo(data []byte, dst *net.UDPAddr, src *net.UDPAddr) (i return int(n), nil } -func (nt *GvisorTun) defUdpServer() error { - // Like a socket +func (gt *GvisorTun) defUdpServerForwarder(proton tcpip.NetworkProtocolNumber) error { + // Call sequence: + // - stack.DeliverNetworkPacket + // - stack.(*groDispatcher0.dispatch + // - ipv4.(*endpoint).HandlePacket + // - ipv4.handleValidatedPAcket + // - ipv4.deliverPacketLocally + // - stack.DeliverTransportPacket -- magic happens here + // - udp.(*Forwarder).HandlePacket + + // After IP4 determines proto, it is used to extract srcPort, dstPort plus + // src, dst address, forming the key TransportEndpointID. + // This is used against stack.demus.deliverPacket() - and if it fails to find a + // match it goes to default. + f := udp.NewForwarder(gt.IPStack, func(r *udp.ForwarderRequest) { + localAddress := r.ID().LocalAddress + + //natLock.Lock() + //if replaced, ok := nat[localAddress]; ok { + // localAddress = replaced + //} + //natLock.Unlock() + if localAddress == tcpip.AddrFromSlice([]byte{10, 8, 0, 2}) { + localAddress = tcpip.AddrFromSlice([]byte{127, 0, 0, 8}) + } + + var wq waiter.Queue + + // Host is connected to TUN's address and port, and 'bound' to the remote IP:port + + ep, tcpErr := r.CreateEndpoint(&wq) + if tcpErr != nil { + log.Printf("r.CreateEndpoint() = %v", tcpErr) + return + } + + p, _ := NewUDPProxy(&autoStoppingListener{ + underlying: gonet.NewUDPConn(gt.IPStack, &wq, ep), + }, func() (net.Conn, error) { + return net.Dial("udp", fmt.Sprintf("%s:%d", localAddress, r.ID().LocalPort)) + }) + go p.Run() + }) + + gt.IPStack.SetTransportProtocolHandler(udp.ProtocolNumber, f.HandlePacket) + + return nil +} + +func (gt *GvisorTun) defUdpServer(proton tcpip.NetworkProtocolNumber) error { + // This is associated - gets all var wq waiter.Queue - ep, err := nt.IPStack.NewEndpoint(udp.ProtocolNumber, ipv4.ProtocolNumber, &wq) + ep, err := raw.NewEndpoint(gt.IPStack, proton, udp.ProtocolNumber, &wq) if err != nil { return errors.New(err.String()) } - nt.DefUDP = ep - - // No address - listen on all - err = ep.Bind(tcpip.FullAddress{ - //Addr: "\x01", - error - //Addr: "\x00\x00\x00\x00", - //Port: 2000, - Port: 0xffff, - //Port: 15001, - }) - if err != nil { - ep.Close() - return errors.New(err.String()) + + if proton == ipv4.ProtocolNumber { + gt.DefUDP = ep + } else { + gt.DefUDP6 = ep } + ep.SocketOptions().SetReceiveOriginalDstAddress(true) we, ch := waiter.NewChannelEntry(waiter.EventIn) wq.EventRegister(&we) - ro := tcpip.ReadOptions{NeedRemoteAddr: true} + ro := tcpip.ReadOptions{ + NeedRemoteAddr: true, + NeedLinkPacketInfo: true, + } + ep.SocketOptions().SetIPv6ReceivePacketInfo(true) + ep.SocketOptions().SetReceivePacketInfo(true) + go func() { for { - // Will have the peer address - //ep.SetSockOpt() // StartListener is send address. Control should include the dest addr ( for raw ) bb := &bytes.Buffer{} + + // This is a raw endpoint rr, err := ep.Read(bb, ro) //v, _, err := ep.(UdpLocalReader).ReadLocal(&add) + if _, ok := err.(*tcpip.ErrWouldBlock); ok { select { case <-ch: @@ -473,11 +583,24 @@ func (nt *GvisorTun) defUdpServer() error { } } - // TODO: add back full address for UDP - if nt.UDPHandler != nil { - nt.UDPHandler.HandleUdp(net.IP(rr.ControlMessages.OriginalDstAddress.Addr), + if gt.UDPHandler != nil { + // local address really + log.Println(net.IP(rr.RemoteAddr.Addr.AsSlice()), rr.RemoteAddr.Port) + + // Both are remote addr + log.Println(net.IP(rr.ControlMessages.PacketInfo.LocalAddr.AsSlice())) + log.Println(net.IP(rr.ControlMessages.PacketInfo.DestinationAddr.AsSlice())) + + // No UDP parsing + log.Println(bb.Bytes()) + + if !rr.ControlMessages.HasOriginalDstAddress { + continue + } + gt.UDPHandler.HandleUdp( + net.IP(rr.ControlMessages.OriginalDstAddress.Addr.AsSlice()), rr.ControlMessages.OriginalDstAddress.Port, - net.IP(rr.RemoteAddr.Addr), rr.RemoteAddr.Port, + net.IP(rr.RemoteAddr.Addr.AsSlice()), rr.RemoteAddr.Port, bb.Bytes()) } } @@ -486,199 +609,95 @@ func (nt *GvisorTun) defUdpServer() error { return nil } -func (nt *GvisorTun) defUdp6Server() error { - // Like a socket - //var wq waiter.Queue - // - //ep6, err := nt.IPStack.NewEndpointCon(udp.ProtocolNumber, ipv6.ProtocolNumber, &wq) - //if err != nil { - // return errors.New(err.String()) - //} - //err = ep6.Bind(tcpip.FullAddress{ - // //Addr: "\x01", - error - // Addr: tcpip.Address(net.IPv6loopback), - // //Port: 2000, - // Port: 0xffff, - // NIC: 2, - //}, nil) - //if err != nil { - // ep6.Close() - // return errors.New(err.String()) - //} - //nt.IPStack.Capture(ipv6.ProtocolNumber, udp.ProtocolNumber, ep6.(stack.TransportEndpoint)) - // - //we, ch := waiter.NewChannelEntry(nil) - //wq.EventRegister(&we, waiter.EventIn) - ////defer wq.EventUnregister(&we) - // - //go func() { - // for { - // // Will have the peer address - // add := tcpip.DoubleAddress{} - // //ep.SetSockOpt() - // v, _, err := ep6.(UdpLocalReader).ReadLocal(&add) - // if err == tcpip.ErrWouldBlock { - // select { - // case <-ch: - // continue - // } - // } - // - // la := net.IP([]byte(add.LocalAddr)) - // //if la.To4() == nil { - // // log.Print("IP6 ", la) - // //} - // if add.LocalAddr[0] == 0xff { - // continue - // } - // - // if nt.UDPHandler != nil { - // nt.UDPHandler.HandleUdp(la, add.LocalPort, - // net.IP([]byte(add.FullAddress.Addr)), add.FullAddress.Port, - // v) - // } - // - // } - //}() - - return nil -} - -//var ( -// Dump = false -//) +//func (gt *GvisorTun) defUdpServerOld(proton tcpip.NetworkProtocolNumber) error { +// // Alternative: UDP raw socket allows both read and write. +// +// // This is associated - gets all +// var wq waiter.Queue +// ep, err := gt.IPStack.NewEndpoint(udp.ProtocolNumber, proton, &wq) +// if err != nil { +// return errors.New(err.String()) +// } +// +// // No address - listen on all +// err = ep.Bind(tcpip.FullAddress{ +// //Addr: "\x01", - error +// //Addr: "\x00\x00\x00\x00", +// Port: 0xffff, +// }) +// if err != nil { +// ep.Close() +// return errors.New(err.String()) +// } +// +// ep.SocketOptions().SetReceiveOriginalDstAddress(true) +// +// we, ch := waiter.NewChannelEntry(waiter.EventIn) +// wq.EventRegister(&we) +// +// ro := tcpip.ReadOptions{ +// NeedRemoteAddr: true, +// NeedLinkPacketInfo: true, +// } +// go func() { +// for { +// bb := &bytes.Buffer{} +// rr, err := ep.Read(bb, ro) +// +// if _, ok := err.(*tcpip.ErrWouldBlock); ok { +// select { +// case <-ch: +// continue +// } +// } +// +// if gt.UDPHandler != nil { +// if !rr.ControlMessages.HasOriginalDstAddress { +// continue +// } +// gt.UDPHandler.HandleUdp( +// net.IP(rr.ControlMessages.OriginalDstAddress.Addr), +// rr.ControlMessages.OriginalDstAddress.Port, +// net.IP(rr.RemoteAddr.Addr), rr.RemoteAddr.Port, +// bb.Bytes()) +// } +// } +// }() +// +// return nil +//} -func (nt *GvisorTun) DefTcpServer(handler TUNHandler) { - var wq waiter.Queue - // No address - listen on all - //err = ep.Bind(tcpip.FullAddress{ - // Port: 0xffff, - //}, nil) // reserves port - - //if err != nil { - // ep.Close() - // return nil, wq, errors.New(err.String()) - //} - // MISSING ACCEPT - //ep, _ := nt.IPStack.NewRawEndpoint( tcp.ProtocolNumber,ipv4.ProtocolNumber, &wq, false) - ep, _ := nt.IPStack.NewEndpoint(tcp.ProtocolNumber, ipv4.ProtocolNumber, &wq) - ep.Bind(tcpip.FullAddress{Port: 0xffff}) - //ep.Bind(tcpip.FullAddress{Port: 5201}) - if err := ep.Listen(100); err != nil { // calls Register - ep.Close() - return - } +// New, based on gvisor-tap-vsock, https://gist.github.com/majek/778021e4f95f3e77ada5afcecacbd819 +// https://github.com/nicocha30/ligolo-ng/blob/master/pkg/proxy/netstack/handlers.go +func (gt *GvisorTun) DefTcpServer(handler TUNHandler) { + ft := tcp.NewForwarder(gt.IPStack, 0, 10240, func(r *tcp.ForwarderRequest) { + localAddress := r.ID().LocalAddress + if localAddress == tcpip.AddrFromSlice([]byte{10, 8, 0, 2}) { + localAddress = tcpip.AddrFromSlice([]byte{127, 0, 0, 8}) + } + targetTCPAddr := &net.TCPAddr{ + Port: int(r.ID().LocalPort), + IP: net.IP([]byte(localAddress.AsSlice())), + } - tl := gonet.NewTCPListener(nt.IPStack, &wq, ep) - for { - c, err := tl.Accept() - if err != nil { - log.Println(err) - continue + var wq waiter.Queue + ep, tcpErr := r.CreateEndpoint(&wq) + r.Complete(false) + if tcpErr != nil { + log.Printf("r.CreateEndpoint() = %v", tcpErr) + return } - ra := c.LocalAddr().(*net.TCPAddr) - la := c.RemoteAddr().(*net.TCPAddr) - go handler.HandleTUN(c, ra, la) - } - //we, listenCh := waiter.NewChannelEntry(nil) - //wq.EventRegister(&we, waiter.EventIn) - // - //// receive TCP packets on port - //go func() { - // defer wq.EventUnregister(&we) - // for { - // epin, wqin, err := ep.Accept() - // if err != nil { - // if err == tcpip.ErrWouldBlock { - // <-listenCh - // continue - // } - // log.Println("Unexpected accept error") - // } - // if Dump { - // add, _ := epin.GetRemoteAddress() - // ladd, _ := epin.GetLocalAddress() - // log.Printf("TUN: Accepted %v %v", ladd, add) - // } - // - // conn := gonet.NewConn(wqin, epin) - // go func() { - // err := handler.HandleTUN(conn) - // if err != nil { - // return - // } - // }() - // - // } - //}() -} + lconn := gonet.NewTCPConn(&wq, ep) -func (nt *GvisorTun) DefTcp6Server() { - //var wq waiter.Queue - //ep, err := nt.IPStack.NewEndpointCon(tcp.ProtocolNumber, ipv6.ProtocolNumber, &wq) - //if err != nil { - // return nil, wq, errors.New(err.String()) - //} - // - //// No address - listen on all - //err = ep.Bind(tcpip.FullAddress{ - // Addr: tcpip.Address(net.IPv6loopback), - // Port: 0xffff, - // NIC: 2, - //}, nil) // reserves port - //if err != nil { - // ep.Close() - // return nil, wq, errors.New(err.String()) - //} - //nt.IPStack.Capture(ipv6.ProtocolNumber, tcp.ProtocolNumber, ep.(stack.TransportEndpoint)) - // - //if err := ep.Listen(10); err != nil { // calls Register - // ep.Close() - // return nil, wq, errors.New(err.String()) - //} - // - //we, listenCh := waiter.NewChannelEntry(nil) - //wq.EventRegister(&we, waiter.EventIn) - // - //// receive TCP packets on port - //go func() { - // defer wq.EventUnregister(&we) - // for { - // epin, wqin, err := ep.Accept() - // if err != nil { - // if err == tcpip.ErrWouldBlock { - // <-listenCh - // continue - // } - // log.Println("Unexpected accept error") - // } - // if Dump { - // add, _ := epin.GetRemoteAddress() - // ladd, _ := epin.GetLocalAddress() - // log.Printf("TUN: Accepted %v %v", ladd, add) - // } - // - // conn := gonet.NewConn(wqin, epin) - // go func() { - // err := nt.Handler.HandleTUN(conn) - // if err != nil { - // return - // } - // }() - // - // } - //}() - // - //return ep, wq, nil -} + go handler.HandleTUN(lconn, targetTCPAddr, lconn.RemoteAddr().(*net.TCPAddr)) + + }) -func ga2na(address tcpip.Address) net.IP { - ab := []byte(address) - return net.IP(ab) + gt.IPStack.SetTransportProtocolHandler(tcp.ProtocolNumber, ft.HandlePacket) } func sn(net, mask string) tcpip.Subnet { - r, _ := tcpip.NewSubnet(tcpip.Address([]byte(net)), tcpip.AddressMask([]byte(mask))) + r, _ := tcpip.NewSubnet(tcpip.AddrFromSlice([]byte(net)), tcpip.MaskFromBytes([]byte(mask))) return r } @@ -686,46 +705,34 @@ func gsetRouteTable(ipstack *stack.Stack, real bool) { ipstack.SetRouteTable([]tcpip.Route{ { Destination: sn("\x7f\x00\x00\x00", "\xff\x00\x00\x00"), - Gateway: "", - NIC: 1, + //Gateway: "", + NIC: 1, + }, + { + Destination: sn(string(net.IPv6loopback), strings.Repeat("\xff", 16)), + //Gateway: "", + NIC: 1, }, { // 10.12.0.2 - IP of the tun Destination: sn("\x0a\x0c\x00\x02", "\xff\xff\xff\xff"), - Gateway: "", - NIC: 2, + //Gateway: "", + NIC: 2, }, { // 10.12.0.0 - routed to the tun Destination: sn("\x0a\x0c\x00\x00", "\xff\xff\x00\x00"), - Gateway: "", - NIC: 2, + //Gateway: "", + NIC: 2, }, { Destination: sn("\x00\x00\x00\x00", "\x00\x00\x00\x00"), - Gateway: "", - NIC: 2, - }, - { - Destination: sn(string(net.IPv6loopback), strings.Repeat("\xff", 16)), - Gateway: "", - NIC: 1, + //Gateway: "", + NIC: 2, }, + // Default route set to the NIC2 (TUN) { Destination: sn(strings.Repeat("\x00", 16), strings.Repeat("\x00", 16)), - Gateway: "", - NIC: 2, + //Gateway: "", + NIC: 2, }, }) } - -/* - Terms: - - netstack - the network stack implementation - - nic - virtual interface - -- route table - -- address - - - packet injected and sent by link - dmtun (but doesn't work android) or channel based - - - View - slice of buffer, Skip, CapLength, - - -*/ diff --git a/pkg/gvisor/udp_proxy.go b/pkg/gvisor/udp_proxy.go new file mode 100644 index 0000000..c0336a7 --- /dev/null +++ b/pkg/gvisor/udp_proxy.go @@ -0,0 +1,197 @@ +package gvisor + +// Forked from gvisor-tap-vsock +// Modified version of https://github.com/moby/moby/blob/master/cmd/docker-proxy/udp_proxy.go and +// https://github.com/moby/vpnkit/blob/master/go/pkg/libproxy/udp_proxy.go + +import ( + "encoding/binary" + "io" + "net" + "strings" + "sync" + "syscall" + "time" + + log "github.com/sirupsen/logrus" +) + +const ( + // UDPConnTrackTimeout is the timeout used for UDP connection tracking + UDPConnTrackTimeout = 90 * time.Second + // UDPBufSize is the buffer size for the UDP proxy + UDPBufSize = 65507 +) + +// A net.Addr where the IP is split into two fields so you can use it as a key +// in a map: +type connTrackKey struct { + IPHigh uint64 + IPLow uint64 + Port int +} + +func newConnTrackKey(addr *net.UDPAddr) *connTrackKey { + if len(addr.IP) == net.IPv4len { + return &connTrackKey{ + IPHigh: 0, + IPLow: uint64(binary.BigEndian.Uint32(addr.IP)), + Port: addr.Port, + } + } + return &connTrackKey{ + IPHigh: binary.BigEndian.Uint64(addr.IP[:8]), + IPLow: binary.BigEndian.Uint64(addr.IP[8:]), + Port: addr.Port, + } +} + +type connTrackMap map[connTrackKey]net.Conn + +// UDPProxy is proxy for which handles UDP datagrams. It implements the Proxy +// interface to handle UDP traffic forwarding between the frontend and backend +// addresses. +type UDPProxy struct { + listener udpConn + dialer func() (net.Conn, error) + connTrackTable connTrackMap + connTrackLock sync.Mutex +} + +// NewUDPProxy creates a new UDPProxy. +func NewUDPProxy(listener udpConn, dialer func() (net.Conn, error)) (*UDPProxy, error) { + return &UDPProxy{ + listener: listener, + connTrackTable: make(connTrackMap), + dialer: dialer, + }, nil +} + +func (proxy *UDPProxy) replyLoop(proxyConn net.Conn, clientAddr net.Addr, clientKey *connTrackKey) { + defer func() { + proxy.connTrackLock.Lock() + delete(proxy.connTrackTable, *clientKey) + proxy.connTrackLock.Unlock() + proxyConn.Close() + }() + + readBuf := make([]byte, UDPBufSize) + for { + _ = proxyConn.SetReadDeadline(time.Now().Add(UDPConnTrackTimeout)) + again: + read, err := proxyConn.Read(readBuf) + if err != nil { + if err, ok := err.(*net.OpError); ok && err.Err == syscall.ECONNREFUSED { + // This will happen if the last write failed + // (e.g: nothing is actually listening on the + // proxied port on the container), ignore it + // and continue until UDPConnTrackTimeout + // expires: + goto again + } + return + } + for i := 0; i != read; { + written, err := proxy.listener.WriteTo(readBuf[i:read], clientAddr) + if err != nil { + return + } + i += written + } + } +} + +// Run starts forwarding the traffic using UDP. +func (proxy *UDPProxy) Run() { + readBuf := make([]byte, UDPBufSize) + for { + // Costin: listener wraps the TUN endpoint created by forwarder. + // It is 'bound to' the forwarder initial packet IP/port, and connected. + // All new UDP packets will match the endpoint. First packet is also already + // queued. + read, from, err := proxy.listener.ReadFrom(readBuf) + if err != nil { + // NOTE: Apparently ReadFrom doesn't return + // ECONNREFUSED like Read do (see comment in + // UDPProxy.replyLoop) + if !isClosedError(err) { + log.Debugf("Stopping udp proxy (%s)", err) + } + break + } + + fromKey := newConnTrackKey(from.(*net.UDPAddr)) + proxy.connTrackLock.Lock() + proxyConn, hit := proxy.connTrackTable[*fromKey] + if !hit { + proxyConn, err = proxy.dialer() + if err != nil { + log.Errorf("Can't proxy a datagram to udp: %s\n", err) + proxy.connTrackLock.Unlock() + continue + } + proxy.connTrackTable[*fromKey] = proxyConn + go proxy.replyLoop(proxyConn, from, fromKey) + } + proxy.connTrackLock.Unlock() + for i := 0; i != read; { + _ = proxyConn.SetReadDeadline(time.Now().Add(UDPConnTrackTimeout)) + written, err := proxyConn.Write(readBuf[i:read]) + if err != nil { + log.Errorf("Can't proxy a datagram to udp: %s\n", err) + break + } + i += written + } + } +} + +// Close stops forwarding the traffic. +func (proxy *UDPProxy) Close() error { + proxy.listener.Close() + proxy.connTrackLock.Lock() + defer proxy.connTrackLock.Unlock() + for _, conn := range proxy.connTrackTable { + conn.Close() + } + return nil +} + +func isClosedError(err error) bool { + /* This comparison is ugly, but unfortunately, net.go doesn't export errClosing. + * See: + * http://golang.org/src/pkg/net/net.go + * https://code.google.com/p/go/issues/detail?id=4337 + * https://groups.google.com/forum/#!msg/golang-nuts/0_aaCvBmOcM/SptmDyX1XJMJ + */ + return strings.HasSuffix(err.Error(), "use of closed network connection") +} + +type udpConn interface { + ReadFrom(b []byte) (int, net.Addr, error) + WriteTo(b []byte, addr net.Addr) (int, error) + SetReadDeadline(t time.Time) error + io.Closer +} + +type autoStoppingListener struct { + underlying udpConn +} + +func (l *autoStoppingListener) ReadFrom(b []byte) (int, net.Addr, error) { + _ = l.underlying.SetReadDeadline(time.Now().Add(UDPConnTrackTimeout)) + return l.underlying.ReadFrom(b) +} + +func (l *autoStoppingListener) WriteTo(b []byte, addr net.Addr) (int, error) { + _ = l.underlying.SetReadDeadline(time.Now().Add(UDPConnTrackTimeout)) + return l.underlying.WriteTo(b, addr) +} + +func (l *autoStoppingListener) SetReadDeadline(t time.Time) error { + return l.underlying.SetReadDeadline(t) +} + +func (l *autoStoppingListener) Close() error { + return l.underlying.Close() +} diff --git a/ugated/ugate_gvisor.go b/pkg/gvisor/ugate_gvisor.go similarity index 68% rename from ugated/ugate_gvisor.go rename to pkg/gvisor/ugate_gvisor.go index 7323a50..7baabc7 100644 --- a/ugated/ugate_gvisor.go +++ b/pkg/gvisor/ugate_gvisor.go @@ -1,15 +1,12 @@ -///// +build gvisor - -package ugated +package gvisor import ( "io" "log" "os" + "github.com/costinm/ugate" "github.com/costinm/ugate/pkg/udp" - "github.com/costinm/ugate/pkg/ugatesvc" - gv "github.com/costinm/ugate/ugated/pkg/gvisor" "github.com/songgao/water" //"golang.zx2c4.com/wireguard/tun/netstack" ) @@ -33,21 +30,21 @@ func openTun(ifn string) (io.ReadWriteCloser, error) { var tunIO io.ReadWriteCloser func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { + ugate.Modules["gvisor"] = func(ug *ugate.UGate) { dev := os.Getenv("GVISOR") if dev == "" { - return nil + dev = "dmesh1" } fd, err := openTun(dev) if err != nil { - return nil + return } tunIO = fd log.Println("Using gVisor tun", dev) //if true { - // return func(ug *ugatesvc.UGate) { + // return func(ug *ugate.UGate) { // tunx, tnet, err := netstack.CreateNetTUN( // []netip.Addr{netip.MustParseAddr("192.168.4.29")}, // []netip.Addr{netip.MustParseAddr("8.8.8.8")}, @@ -59,9 +56,7 @@ func init() { //} // //} - return func(ug *ugatesvc.UGate) { - tun := gv.NewTUNFD(fd, ug, ug.UDPHandler) - udp.TransparentUDPWriter = tun - } - }) + tun := NewTUNFD(fd, ug, ug.UDPHandler) + udp.TransparentUDPWriter = tun + } } diff --git a/ugated/pkg/h2r/README.http2.md b/pkg/h2r/README.http2.md similarity index 100% rename from ugated/pkg/h2r/README.http2.md rename to pkg/h2r/README.http2.md diff --git a/ugated/pkg/h2r/h2r_test.go b/pkg/h2r/h2r_test.go similarity index 70% rename from ugated/pkg/h2r/h2r_test.go rename to pkg/h2r/h2r_test.go index 6e7784b..843df5b 100644 --- a/ugated/pkg/h2r/h2r_test.go +++ b/pkg/h2r/h2r_test.go @@ -7,34 +7,28 @@ import ( "testing" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/test" + + "github.com/costinm/ugate/pkg/test" ) func BenchmarkUGateH2R(b *testing.B) { // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{ - BasePort: 6300, - NoAccessLog: true, - Name: "alice"}, func(gate *ugatesvc.UGate) { - New(gate) - }) + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{ + BasePort: 6300}) + New(alice) // In memory config store. All options - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, - NoAccessLog: true, - Name: "bob"}, func(bob *ugatesvc.UGate) { - New(bob) - }) + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{BasePort: 6400}) + New(bob) log.Println(bob.Auth.VIP6) - bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugate.PORT_BTS) + bobAddr := "localhost:" + strconv.Itoa(bob.BasePort+7) // A basic echo server - echo on 5012 test.InitEcho(6000) // Alice dials a MUX to bob - bobNode := alice.GetOrAddNode(bob.Auth.ID) + bobNode, _ := alice.Cluster(nil,bob.Auth.ID) bobNode.Addr = bobAddr _, err := alice.DialMUX(context.Background(), "h2r", bobNode, nil) if err != nil { @@ -72,21 +66,21 @@ func TestH2R(t *testing.T) { test.InitEcho(6000) // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{BasePort: 6300, Name: "alice"}, func(gate *ugatesvc.UGate) { - New(gate) - }) + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{BasePort: 6300}) + New(alice) // In memory config store. All options - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, Name: "bob"}, func(bob *ugatesvc.UGate) { - New(bob) - }) + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{BasePort: 6400}) + New(bob) log.Println(bob.Auth.VIP6) - bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugate.PORT_BTS) + bobAddr := "localhost:" + strconv.Itoa(bob.BasePort+7) // Alice dials a MUX to bob - bobNode := alice.GetOrAddNode(bob.Auth.ID) + bobNode, _ := alice.Cluster(nil, bob.Auth.ID) bobNode.Addr = bobAddr + + _, err := alice.DialMUX(context.Background(), "h2r", bobNode, nil) if err != nil { t.Fatal("Error dialing mux", err) diff --git a/pkg/h2r/h2raw.go b/pkg/h2r/h2raw.go new file mode 100644 index 0000000..b100c43 --- /dev/null +++ b/pkg/h2r/h2raw.go @@ -0,0 +1,213 @@ +package h2r + +// WIP: Low-level H2 - to allow reverse streams and more efficient proxy. +// Based on x/net/http2/transport.go - but with push support +// See h2i, spdystream, etc +// Uses 'spdy' ALPN on TLS, can be used over existing streams to multiplex. +// +// For better stability: +// - use the golang H2 implementation by default, over TLS or websocket (until this file is very stable) +// - client create a POST stream for accepted connections, over H2 +// - + +// H2RMux is a mux using H2 frames. +// Based on ALPN, may use raw frames. +//type H2RMux struct { +// *http2.ClientConn +// +// dm *ugate.MeshCluster +// +// // Raw frame support +// m sync.RWMutex +// framer *http2.Framer +// streams map[uint32]*H2Stream +// handleStream func(*H2Stream) +// nextStreamID uint32 +//} +// +//// NewStream opens a H2 stream. No H2 header (empty) - this matches QUIC streams +//func (c *H2RMux) NewStream(ctx context.Context, req *http.Request) (*H2Stream, error) { +// c.m.Lock() +// id := c.nextStreamID +// c.nextStreamID += 2 +// c.m.Unlock() +// +// s := c.stream(id) +// +// host := req.Host +// if host == "" { +// host = req.URL.Host +// } +// +// path := req.RequestURI +// if path == "" { +// path = "/" +// } +// +// // TODO: support for 'PUSH' frames for webpush. +// s.henc.WriteField(hpack.HeaderField{Name: ":authority", Value: host}) +// s.henc.WriteField(hpack.HeaderField{Name: ":method", Value: req.Method}) +// s.henc.WriteField(hpack.HeaderField{Name: ":path", Value: path}) +// s.henc.WriteField(hpack.HeaderField{Name: ":scheme", Value: "https"}) +// +// s.hbuf.Reset() +// for k, vv := range req.Header { +// lowKey := strings.ToLower(k) +// if lowKey == "host" { +// continue +// } +// for _, v := range vv { +// s.henc.WriteField(hpack.HeaderField{Name: lowKey, Value: v}) +// } +// } +// err := c.framer.WriteHeaders(http2.HeadersFrameParam{ +// StreamID: id, +// EndHeaders: true, +// BlockFragment: s.hbuf.Bytes(), +// }) +// +// return s, err +//} + +//func (h2c *H2RMux) serve() error { +// // TODO: Settings handshake +// +// var str *H2Stream +// for { +// f, err := h2c.framer.ReadFrame() +// if err != nil { +// return err +// } +// log.Println("H2 F: ", f.Header().Type) +// +// switch f := f.(type) { +// case *http2.SettingsFrame: +// // Sender acknoweldged the SETTINGS frame. No need to write +// // SETTINGS again. +// if f.IsAck() { +// break +// } +// if err := h2c.framer.WriteSettingsAck(); err != nil { +// return nil +// } +// +// case *http2.PingFrame: +// +// case *http2.PushPromiseFrame: +// +// case *http2.GoAwayFrame: // not used for server, usually servers send GO_AWAY. +// +// case *http2.WindowUpdateFrame: +// str = h2c.stream(f.StreamID) +// +// case *http2.DataFrame: +// str = h2c.stream(f.StreamID) +// // TODO: flow control, see h2 +// if f.Length > 0 { +// h2c.framer.WriteWindowUpdate(f.StreamID, f.Length) +// h2c.framer.WriteWindowUpdate(0, f.Length) +// } +// if str == nil { +// // TODO: RST +// continue +// } +// str.dataChan <- f +// +// case *http2.RSTStreamFrame: +// str = h2c.stream(f.StreamID) +// +// case *http2.ContinuationFrame: +// str = h2c.stream(f.StreamID) +// if _, err := str.hdec.Write(f.HeaderBlockFragment()); err != nil { +// return nil +// } +// if f.FrameHeader.Flags&http2.FlagHeadersEndHeaders != 0 { +// h2c.handleStream(str) +// } +// +// case *http2.HeadersFrame: +// str := h2c.stream(f.StreamID) +// if str == nil { +// str = h2c.addStream(f.StreamID, f) +// } +// if _, err := str.hdec.Write(f.HeaderBlockFragment()); err != nil { +// return nil +// } +// if f.FrameHeader.Flags&http2.FlagHeadersEndHeaders != 0 { +// h2c.handleStream(str) +// } +// } +// } +//} + +//func (h2s *H2RMux) closeStream(id uint32) { +// h2s.m.Lock() +// delete(h2s.streams, id) +// h2s.m.Unlock() +//} + +//func (h2s *H2RMux) addStream(id uint32, f *http2.HeadersFrame) *H2Stream { +// h2s.m.Lock() +// // TODO: reuse +// bb := &bytes.Buffer{} +// ss := &H2Stream{ +// s: h2s, +// hbuf: bb, +// henc: hpack.NewEncoder(bb), +// hdec: hpack.NewDecoder(uint32(4<<10), func(hf hpack.HeaderField) { +// log.Println("Header: ", hf.Name, hf.Value) +// }), +// } +// h2s.streams[id] = ss +// h2s.m.Unlock() +// +// return ss +// +//} + +//func (h2s *H2RMux) stream(id uint32) *H2Stream { +// h2s.m.RLock() +// if ss, f := h2s.streams[id]; f { +// h2s.m.RUnlock() +// return ss +// } +// h2s.m.RUnlock() +// return nil +//} + +//// H2Stream is a multiplexed stream. +//type H2Stream struct { +// id *uint32 +// s *H2RMux +// +// hbuf *bytes.Buffer // HPACK encoder writes into this +// hdec *hpack.Decoder +// henc *hpack.Encoder +// +// dataChan chan *http2.DataFrame +// // Callback style - if set dataChan and Read will not be used. Not blocking +// DataHandlerNB func(*http2.DataFrame) error +// +// readClosed bool +// unread []byte +//} +// +//func (str *H2Stream) Close() error { +// return nil +//} +// +//func (str *H2Stream) Write(p []byte) (n int, err error) { +// panic("implement me") +//} +// +//func (str *H2Stream) Read(p []byte) (n int, err error) { +// if len(str.unread) > 0 { +// +// } +// f := <-str.dataChan +// if f.StreamEnded() { +// +// } +// +// panic("implement me") +//} diff --git a/pkg/http/http.go b/pkg/http/http.go new file mode 100644 index 0000000..0002057 --- /dev/null +++ b/pkg/http/http.go @@ -0,0 +1,64 @@ +package http + +import ( + "net" + "net/http" + "strconv" + + "github.com/costinm/meshauth" +) + +// WIP: Normal http listener for a gateway. +// +// Most of the gate is concerned with L4 and L4S - routing on a hostname or VIP. +// +// + +type HttpRoutes struct { + + PortRoutes map[string]*ListenerRoutes + + TargetHandlers map[string]http.Handler +} + +type ListenerRoutes struct { + + Listener *meshauth.PortListener + + DefaultRoute *HttpRoute + + Routes map[string]*HttpRoute `json:"routes,omitempty"` + + Mux *http.ServeMux +} + +type HttpRoute struct { + // Listener + ParentRef string + + // ForwardTo where to forward the proxied connections. + // Used for accepting on a dedicated port. Will be set as MeshCluster in + // the stream, can be mesh node. + // host:port format. + ForwardTo string `json:"forwardTo,omitempty"` +} + + +func (ug *ListenerRoutes) FindRoutePrefix(dstaddr net.IP, p uint16, prefix string) *HttpRoute { + port := ":" + strconv.Itoa(int(p)) + l := ug.Routes[prefix+dstaddr.String()+port] + if l != nil { + return l + } + + l = ug.Routes[prefix+port] + if l != nil { + return l + } + + l = ug.Routes[prefix+"-"+port] + if l != nil { + return l + } + return ug.DefaultRoute +} diff --git a/pkg/http_proxy/httpproxy_capture.go b/pkg/http_proxy/httpproxy_capture.go index 81f3aa5..20b76f0 100644 --- a/pkg/http_proxy/httpproxy_capture.go +++ b/pkg/http_proxy/httpproxy_capture.go @@ -1,37 +1,65 @@ package http_proxy import ( + "context" "io" "log" "net" "net/http" "strings" - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate/pkg/ugatesvc" + "github.com/costinm/ssh-mesh/nio" + + "github.com/costinm/ugate" + ) -// Used for HTTP_PROXY=localhost:port, to intercept outbound traffic using http proxy protocol. -// CONNECT too. +// Used for HTTP_PROXY=localhost:port, to intercept outbound traffic using http +// proxy protocol. +// +// It also handles CONNECT and 'transparent' proxy. +// +// // Android allows using HTTP_PROXY, and is used by browser - more efficient than TUN. -// HTTPGate handles HTTP requests -type HTTPGate struct { - //Auth *auth.Auth - gw *ugatesvc.UGate +// HttpProxy handles HTTP PROXY and plain text HTTP requests (primarily on port 80) +// for egress side. +// +// A DNAT or explicit proxy are sufficient - no need for TPROXY or REDIRECT, host +// is extracted from request and sessions should use cookies. +type HttpProxy struct { + gw *ugate.UGate } -func NewHTTPProxy(gw *ugatesvc.UGate) *HTTPGate { - return &HTTPGate{ +func NewHTTPProxy(gw *ugate.UGate) *HttpProxy { + return &HttpProxy{ gw: gw, } } +func ForwardHTTP(c *ugate.MeshCluster, w http.ResponseWriter, r *http.Request, pathH string) error { + + r.Host = pathH + r1 := nio.CreateUpstreamRequest(w, r) + + r1.URL.Scheme = "http" + + // will be used by RoundTrip. + r1.URL.Host = pathH + + res, err := c.RoundTrip(r1) + if err != nil { + return err + } + nio.SendBackResponse(w, r, res, err) + return nil +} + // RoundTripStart listening on the addr, as a HTTP_PROXY // Handles CONNECT and PROXY requests using the gateway // for streams. -func (gw *HTTPGate) HttpProxyCapture(addr string) error { +func (gw *HttpProxy) HttpProxyCapture(addr string) error { // For http proxy we need a dedicated plain HTTP port nl, err := net.Listen("tcp", addr) if err != nil { @@ -49,28 +77,29 @@ func (gw *HTTPGate) HttpProxyCapture(addr string) error { gw.captureHttpProxyAbsURL(w, r) return } + gw.captureHttpProxyAbsURL(w, r) })) return nil } // Http proxy to a configured HTTP host. Hostname to HTTP address explicitly // configured. Also hostnmae to file serving. -func (gw *HTTPGate) proxy(w http.ResponseWriter, r *http.Request) bool { +func (gw *HttpProxy) proxy(w http.ResponseWriter, r *http.Request) bool { // TODO: if host is XXXX.m.SUFFIX -> forward to node. - host, found := gw.gw.Config.Clusters[r.Host] + host, found := gw.gw.Clusters[r.Host] if !found { return false } if len(host.Addr) > 0 { log.Println("FWDHTTP: ", r.Method, r.Host, r.RemoteAddr, r.URL) - gw.gw.H2Handler.ForwardHTTP(w, r, host.Addr) + ForwardHTTP(host, w, r, host.Addr) } return true } // WIP: HTTP proxy with absolute address, to a QUIC server (or sidecar)` -func (gw *HTTPGate) captureHttpProxyAbsURL(w http.ResponseWriter, r *http.Request) { +func (gw *HttpProxy) captureHttpProxyAbsURL(w http.ResponseWriter, r *http.Request) { // HTTP proxy mode - uses the QUIC client to connect to the node // TODO: redirect via VPN, only root VPN can do plaintext requests @@ -81,6 +110,7 @@ func (gw *HTTPGate) captureHttpProxyAbsURL(w http.ResponseWriter, r *http.Reques // User-Agent, Acept, Proxy-Connection:Keep-Alive if gw.proxy(w, r) { + // found the host in clusters - it is an internal/mesh request return } @@ -99,7 +129,7 @@ func (gw *HTTPGate) captureHttpProxyAbsURL(w http.ResponseWriter, r *http.Reques } origBody := resp.Body defer origBody.Close() - ugatesvc.CopyResponseHeaders(w.Header(), resp.Header) + nio.CopyResponseHeaders(w.Header(), resp.Header) w.WriteHeader(resp.StatusCode) io.Copy(w, resp.Body) @@ -111,7 +141,7 @@ func (gw *HTTPGate) captureHttpProxyAbsURL(w http.ResponseWriter, r *http.Reques // a TCP UdpNat to a mesh node, from localhost or from a net node. // Only used to capture local traffic - should be bound to localhost only, like socks. // It speaks HTTP/1.1, no QUIC -func (gw *HTTPGate) handleConnect(w http.ResponseWriter, r *http.Request) { +func (gw *HttpProxy) handleConnect(w http.ResponseWriter, r *http.Request) { hij, ok := w.(http.Hijacker) if !ok { w.WriteHeader(503) @@ -125,7 +155,7 @@ func (gw *HTTPGate) handleConnect(w http.ResponseWriter, r *http.Request) { } // TODO: second param may contain unprocessed data. - proxyClient, _, e := hij.Hijack() + proxyClient, clientBuffer, e := hij.Hijack() if e != nil { w.WriteHeader(503) w.Write([]byte("Error - no hijack support")) @@ -133,21 +163,29 @@ func (gw *HTTPGate) handleConnect(w http.ResponseWriter, r *http.Request) { } //ra := proxyClient.RemoteAddr().(*net.TCPAddr) + str := nio.GetStream(proxyClient, proxyClient) - defer gw.gw.OnStreamDone(str) + if clientBuffer.Reader.Size() > 0 { + + } gw.gw.OnStream(str) + defer gw.gw.OnStreamDone(str) str.Dest = host str.Direction = nio.StreamTypeOut - str.PostDialHandler = func(conn net.Conn, err error) { - if err != nil { - w.WriteHeader(503) - w.Write([]byte("RoundTripStart error" + err.Error())) - return - } - proxyClient.Write([]byte("HTTP/1.0 200 OK\r\n\r\n")) + + nc, err := gw.gw.DialContext(context.Background(), "tcp", str.Dest) + + if err != nil { + w.WriteHeader(503) + w.Write([]byte("RoundTripStart error" + err.Error())) + return } - // TODO: add sniffing on the outbound + proxyClient.Write([]byte("HTTP/1.0 200 OK\r\n\r\n")) + + nio.Proxy(nc, str, str, str.Dest) - gw.gw.DialAndProxy(str) + //defer nc.Close() + // + //str.ProxyTo(nc) } diff --git a/pkg/httpwrapper/http.go b/pkg/httpwrapper/http.go new file mode 100644 index 0000000..e7f2879 --- /dev/null +++ b/pkg/httpwrapper/http.go @@ -0,0 +1,107 @@ +package httpwrapper + +import ( + "errors" + "fmt" + "net/http" + "runtime/debug" + "time" + + "log/slog" + + "github.com/costinm/meshauth" + "github.com/costinm/ssh-mesh/nio" +) + +// Deprecated - replaced by meshauth and otel +// This wraps a http call with authz. + +type HttpHandler struct { + Handler http.Handler + Logger *slog.Logger +} + +// Common entry point for H1, H2 - both plain and tls +// Will do the 'common' operations - authn, authz, logging, metrics for all BTS and regular HTTP. +// +// Important: +// When using for BTS we need to work around golang http stack implementation. +// This should be used as fallback - QUIC and WebRTC have proper mux and TUN support. +// In particular, while H2 POST and CONNECT allow req/res Body to act as TCP stream, +// the closing (FIN/RST) are very tricky: +// - ResponseWriter (in BTS server) does not have a 'Close' method, it is closed after +// the method returns. That means we can't signal the TCP FIN or RST, which breaks some +// protocols. +// - The request must be fully consumed before the method returns. +func (l *HttpHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + t0 := time.Now() + var RemoteID string + var SAN string + + defer func() { + // TODO: add it to an event buffer + if l.Logger != nil { + l.Logger.Log(r.Context(), slog.LevelInfo, "remoteID", RemoteID, + "SAN", SAN, "request", r.URL, "time", time.Since(t0)) + } + if r := recover(); r != nil { + fmt.Println("Recovered in f", r) + + debug.PrintStack() + + // find out exactly what the error was and set err + var err error + + switch x := r.(type) { + case string: + err = errors.New(x) + case error: + err = x + default: + err = errors.New("Unknown panic") + } + if err != nil { + fmt.Println("ERRROR: ", err) + } + } + }() + + vapidH := r.Header["Authorization"] + if len(vapidH) > 0 { + tok, pub, err := meshauth.CheckVAPID(vapidH[0], time.Now()) + if err == nil { + RemoteID = meshauth.IDFromPublicKeyBytes(pub) + SAN = tok.Sub + } + } + + tls := r.TLS + // If the request was handled by normal uGate listener. + us := r.Context().Value("util.Stream") + if ugs, ok := us.(nio.Stream); ok { + tls = ugs.TLSConnectionState() + r.TLS = tls + } + // other keys: + // - http-server (*http.Server) + // - local-addr - *net.TCPAddr + // + + if tls != nil && len(tls.PeerCertificates) > 0 { + pk1 := tls.PeerCertificates[0].PublicKey + RemoteID = meshauth.PublicKeyBase32SHA(pk1) + // TODO: Istio-style, signed by a trusted CA. This is also for SSH-with-cert + sans, _ := meshauth.GetSAN(tls.PeerCertificates[0]) + if len(sans) > 0 { + SAN = sans[0] + } + } + // Using the 'from' header internally + if RemoteID != "" { + r.Header.Set("from", RemoteID) + } else { + r.Header.Del("from") + } + + l.Handler.ServeHTTP(w, r) +} diff --git a/pkg/ipfs/cmd/ipfsdisc.go b/pkg/ipfs/cmd/ipfsdisc.go new file mode 100644 index 0000000..818b1b2 --- /dev/null +++ b/pkg/ipfs/cmd/ipfsdisc.go @@ -0,0 +1,31 @@ +package main + +import ( + "context" + "net/http" + + "github.com/costinm/meshauth" + "github.com/costinm/meshauth/util" + "github.com/costinm/ugate/pkg/ipfs" +) + +func main() { + cfg := &meshauth.MeshCfg{} + util.MainStart("ugate", cfg) + + auth, err := meshauth.FromEnv(cfg) + if err != nil { + panic(err) + } + + if auth.Cert == nil { + auth.InitSelfSigned("") + } + + ipfsdisc, err := ipfs.NewDHT(context.Background(), auth, 11014) + if err != nil { + panic(err) + } + + http.ListenAndServe(":11015", ipfsdisc) +} diff --git a/pkg/ipfs/dht.go b/pkg/ipfs/dht.go new file mode 100644 index 0000000..7fb4f2f --- /dev/null +++ b/pkg/ipfs/dht.go @@ -0,0 +1,662 @@ +package ipfs + +import ( + "context" + "crypto/ecdsa" + "fmt" + "log" + "net/http" + "os" + "strings" + "time" + + "github.com/costinm/meshauth" + "github.com/ipfs/boxo/ipns" + "github.com/ipfs/boxo/peering" + "github.com/ipfs/boxo/routing/http/server" + "github.com/ipfs/boxo/routing/http/types" + "github.com/ipfs/boxo/routing/http/types/iter" + "github.com/ipfs/go-cid" + "github.com/ipfs/go-datastore" + "github.com/libp2p/go-libp2p" + dht "github.com/libp2p/go-libp2p-kad-dht" + "github.com/libp2p/go-libp2p/core/control" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/routing" + "github.com/libp2p/go-libp2p/p2p/net/connmgr" + "github.com/libp2p/go-libp2p/p2p/security/noise" + libp2ptls "github.com/libp2p/go-libp2p/p2p/security/tls" + "github.com/multiformats/go-multiaddr" + "github.com/multiformats/go-multihash" + + "github.com/libp2p/go-libp2p/core/host" +) + +// Support a libp2p DHT proxy, using http API. +// Should run on a 'control plane' node - meshauth or some other infra node, ideally DNS and workload discovery server. +// Can also run standalone - to avoid every workload using libp2p having to interact with and be a DHT node. + +// IPFSDiscovery registers in the libp2p DHT infra ( by default public - but can also be a private DHT mesh) +// and acts as a DHT node, implementing the http routing server API. +type IPFSDiscovery struct { + DHT *dht.IpfsDHT + Host host.Host + + Port int + Auth *meshauth.MeshAuth + + // gorilla mux with /routing path - not well integrated with http mux + routingHandler http.Handler + + dialCnt int + peerDialCnt int + securedCnt int + upgradedCnt int + Bootstrap []multiaddr.Multiaddr + Key crypto.PrivKey + + // If empty, this is used with the public infra + Domain string +} + + +// DHT: supports putValue(key, value) for exactly 2 key types: +// - /pk/KEYHASH -> public key. Not relevant for ED keys ( key id is the key ) +// - /ipns/KEYID -> proto IpnsEntry containing public key. + + +var dialCnt = 0 +var peerDialCnt = 0 +var ( + securedCnt = 0 + upgradedCnt = 0 +) + +// NewDHT creates a DHT client for the public infra. +func NewDHT(ctx context.Context, auth *meshauth.MeshAuth, p2pport int) (*IPFSDiscovery, error) { + i := &IPFSDiscovery{Auth: auth, Port: p2pport, + Bootstrap: dht.DefaultBootstrapPeers, + Domain : "", + } + err := i.Init(ctx) + return i, err +} + +type localValidator struct { + +} + +func (l localValidator) Validate(key string, value []byte) error { + return nil +} + +func (l localValidator) Select(key string, values [][]byte) (int, error) { + return 0, nil +} + +// NewDHT creates a host using DHT and router server. +func (ipfsd *IPFSDiscovery) Init(ctx context.Context) (error) { + // crypto.MarshalPrivateKey uses a protobuf - we use our own format. + + //ipfslog.SetLogLevel("*", "debug") + //ipfslog.SetLogLevel("*", "warn") + + // Bootstrappers are using 1024 keys. See: + // https://github.com/ipfs/infra/issues/378 + crypto.MinRsaKeyBits = 1024 + + connmgr, err := connmgr.NewConnManager( + 100, // Lowwater + 400, // HighWater, + connmgr.WithGracePeriod(time.Minute), + ) + if err != nil { + return err + } + + p2pport := ipfsd.Port + la := []multiaddr.Multiaddr{} + listen, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", p2pport)) + la = append(la, listen) + + listen, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", p2pport + 1)) + la = append(la, listen) + //listen, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip6/::/tcp/%d", p2pport)) + //la = append(la, listen) + listen, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d/ws", p2pport + 2)) + la = append(la, listen) + + //const webtransportHTTPEndpoint = "/.well-known/libp2p-webtransport" + // for connect: add /certhash/HASH + listen, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic/webtransport", p2pport + 3 )) + la = append(la, listen) + + + //listen, _ = multiaddr.NewMultiaddr(fmt.Sprintf("/ip6/::/udp/%d/quic", p2pport)) + //la = append(la, listen) + //listen, _ = multiaddr.NewMultiaddr("/ip4/0.0.0.0/udp/4005/quic") + //la = append(la, listen) + //listen, _ = multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/4006/ws") + //la = append(la, listen) + //listen, _ = multiaddr.NewMultiaddr("/ip6/::/tcp/4006/ws") + //la = append(la, listen) + //rtc := direct.NewTransport( + // webrtc.Configuration{}, + // new(mplex.Transport), + //) + + // TODO: set a ConnectionGater ! + // TODO: equivalent StreamGater ? + // TODO: create a ssh proxy + // TODO: SSH transport + + + ds := datastore.NewMapDatastore() + + finalOpts := []libp2p.Option{ + libp2p.ListenAddrs(la...), + //libp2p.ChainOptions( + // //libp2p.Transport(libp2pquic.NewTransport), + // //libp2p.Transport(ws.New), + // //libp2p.Transport(rtc), + // libp2p.DefaultTransports, // TCP, WS + //), + // support TLS connections + libp2p.Security(libp2ptls.ID, libp2ptls.New), + // support noise connections + libp2p.Security(noise.ID, noise.New), + // support any other default transports (TCP) + libp2p.DefaultTransports, + // Let's prevent our peer from having too many + // connections by attaching a connection manager. + libp2p.ConnectionManager(connmgr), + // Attempt to open ports using uPNP for NATed hosts. + libp2p.NATPortMap(), + // If you want to help other peers to figure out if they are behind + // NATs, you can launch the server-side of AutoNAT too (AutoRelay + // already runs the client) + // + // This service is highly rate-limited and should not cause any + // performance issues. + libp2p.EnableNATService(), + libp2p.ConnectionGater(ipfsd), + + // If behind NAT, find and use relays + //libp2p.EnableAutoRelay(), + // Accept from relay, initiate via relay. Required for auto relay + //libp2p.EnableAutoRelayWithStaticRelays(relay), // no circuit.OptHop, OptActive + + // Attempt to use UpNP to open port + // mostly uselss. + //libp2p.NATPortMap(), + + // Used for the /ws/ transport - QUIC is 'capable', has own security + // TODO: ssh over ws built in. + // https://docs.libp2p.io/concepts/stream-multiplexing/#implementations + // Defaults: mplex - no flow control + // yamux - based on h2, but not the same. Problems closing. No JS. + // spdystream - h2, has JS, based on docker/spdystream. RequestInPipe of date, not core + // + //libp2p.Muxer("/yamux/1.0.0", yamux.DefaultTransport), + // Default: noise, tls + //libp2p.Security(secio.ID, secio.New), + + libp2p.AddrsFactory(func(src []multiaddr.Multiaddr) []multiaddr.Multiaddr { + res := []multiaddr.Multiaddr{} + for _, s := range src { + if strings.HasPrefix(s.String(), "/ip6/fd") { + continue + } + if strings.HasPrefix(s.String(), "/ip4/10.") { + continue + } + if strings.HasPrefix(s.String(), "/ip4/127.") { + continue + } + if strings.HasPrefix(s.String(), "/ip4/192.168") { + continue + } + res = append(res, s) + } + return src + }), + // libp2p.ConnectionGater(p2p), + + // Disables probing for rely, force using only public + //libp2p.ForceReachabilityPublic(), + //libp2p.ForceReachabilityPrivate(), + } + finalOpts = append(finalOpts, libp2p.ForceReachabilityPrivate()) + + if ipfsd.Key != nil { + finalOpts = append(finalOpts, libp2p.Identity(ipfsd.Key)) + } else if ipfsd.Auth != nil && ipfsd.Auth.Cert != nil { + sk, _, _ := crypto.ECDSAKeyPairFromKey(ipfsd.Auth.Cert.PrivateKey.(*ecdsa.PrivateKey)) + ipfsd.Key = sk + finalOpts = append(finalOpts, libp2p.Identity(sk)) + } else { + sk, _, _ := crypto.GenerateKeyPair(crypto.Ed25519, 2048) + ipfsd.Key = sk + finalOpts = append(finalOpts, libp2p.Identity(sk)) + } + + //relay.DesiredRelays = 2 + + // This allows the node to be contacted behind NAT + // Set the 'official' relays. + // TODO: get relay dynamically, from discovery server + // replaced by EnableAutoRelay + //finalOpts = append(finalOpts, libp2p.DefaultStaticRelays()) + finalOpts = append(finalOpts, + libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { + dhtOpts := []dht.Option{ + //dht.NamespacedValidator("pk", record.PublicKeyValidator{}), + //dht.NamespacedValidator("ipns", ipns.Validator{KeyBook: h.Peerstore()}), + //dual.DHTOption(dht.Mode(dht.ModeClient)), + //dual.DHTOption(dht.DisableAutoRefresh()), + //dht.QueryFilter(dht.PublicQueryFilter), + } + if ipfsd.Domain == "" { + // We may want to run an ipfs node to participate and provide a public server service, but not + // with this library. + dhtOpts = append(dhtOpts, dht.Mode(dht.ModeClient)) + //dhtOpts = append(dhtOpts, dht.Concurrency(3)) + } else { + dhtOpts = append(dhtOpts, dht.Mode(dht.ModeServer)) + dhtOpts = append(dhtOpts, dht.Concurrency(3)) + } + dhtOpts = append(dhtOpts, dht.Datastore(ds)) + // DHT results in a lot of connections. To debug, set a break on dial_sync (in swarm), in getActiveDial + // query.spawnQuery is causing the request + + ddht, err := dht.New(ctx, h, dhtOpts...) + if ipfsd.Domain != "" { + ddht.Validator = &localValidator{} + } + ipfsd.DHT = ddht + return ddht, err + })) + + // Problem is that to expose this host we do need to push it to DHT. + + // in memory peer store + // HTTPS/XDS/etc for discovery, using a discovery server with DHT + // or other backend. + + // Will register: (see multistream.AddHandlerWithFunc) + // /ipfs/id -> handles peer registration in DHT + // ping + // secio + // tls + // yamux + // mplex + // libp2p/circuit/relay ( AddRelayTranport ) - if cfg.Relay + // autonat - + + // On connect with a node, id is exchanged and the signed address record + // is added to mem (addr_book.go ConsumePeerRecord). + // By connecting to peers they learn the address, and may provide it. + // FindPeer in DHT works by connecting to the actual peer, which must implement DHT + // This is based on FIND_NODE messages. + + // Connects to this node - mostly for testing. + rt := os.Getenv("IPFS_ROOT") + if rt == "" { + rt = "/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ" + } + + h, err := libp2p.New(finalOpts...) + if err != nil { + panic(err) + } + + ipfsd.Host = h + + + + // Use the host 'event bus' to subscribe to all events. + InitEvent(h) + + ipfsd.StartDHT() + + ipfsd.routingHandler = server.Handler(ipfsd) + + // Maintain connections to all added peers. This generates a LOT of events + if false { + ipfsd.Peering(h, rt) + } + + return nil +} + +func (ipfsd *IPFSDiscovery) LogAddr() { + h := ipfsd.Host + for _, a := range h.Addrs() { + log.Println("IPFS Addr: ", a.String() + "/p2p/" + h.ID().String()) + } + log.Println("IPFS CID: ", peer.ToCid(h.ID()).String()) +} + +func (d *IPFSDiscovery) StartDHT() { + // This connects to public bootstrappers + for _, addr := range d.Bootstrap { + pi, _ := peer.AddrInfoFromP2pAddr(addr) + // We ignore errors as some bootstrap peers may be down + // and that is fine. + d.Host.Connect(context.Background(), *pi) + } +} + +// Announce this node is a provider for the key. +// Normally used for IPFS, key is the sha of the content. Also +// used for advertise, in Discovery and autorelay.go (/libp2p/relay) +// According to routing.go, 24h is the normal validity, recommended 6hours refresh. +//func (p2p *IPFS) Provide(ns string) error { +// v, _ := nsToCid(ns) +// return p2p.Routing.Provide(context.Background(), v, true) +//} +// +//func (p2p *IPFS) Find(ns string) { +// v, _ := nsToCid(ns) +// rc := p2p.Routing.FindProvidersAsync(context.Background(), v, 10) +// +// for r := range rc { +// log.Println("Got ", r) +// } +//} + +// Additional ipfs features +func nsToCid(ns string) (cid.Cid, error) { + h, err := multihash.Sum([]byte(ns), multihash.SHA2_256, -1) + if err != nil { + return cid.Undef, err + } + + return cid.NewCidV1(cid.Raw, h), nil +} + + +func (d *IPFSDiscovery) Peering(h host.Host, rt string) { + pi, err := P2PAddrFromString(rt) + if err != nil { + log.Println("Invalid ", rt, err) + } else { + //finalOpts = append(finalOpts, libp2p.StaticRelays([]peer.AddrInfo{*pi})) + } + ps := peering.NewPeeringService(h) + + if pi != nil { + ps.AddPeer(*pi) + err = h.Connect(context.Background(), *pi) + if err != nil { + log.Println("IPFS: Failed to connect to ", *pi) + } else { + log.Println("IPFS: Connected to ", *pi) + } + } + ps.Start() + +} + +// StartListener a signed proto, key is the public key. +// 'IPNS' - typically the value is an ipfs address, but can be anything. +//func (p2p *IPFS) Put(key ed25519.PrivateKey, v []byte, seq uint64, exp time.Duration) (string, error) { + //sk, _ := crypto.UnmarshalEd25519PrivateKey(key) + // + // + // + //rec, err := ipns.Create(sk, v, seq, time.Now().Add(exp), exp) + ////ipns.EmbedPublicKey(sk.GetPublic(), rec) + //id, err := peer.IDFromPublicKey(sk.GetPublic()) + //data, err := proto.Marshal(rec) + // + //// Store ipns entry at "/ipns/"+h(pubkey) + //err = p2p.DHT.PutValue(context.Background(), ipns.RecordKey(id), data) + // + //log.Println("Published ", id, err) + // + //// B58 + //return id.String(), nil +// return "", nil +//} + + + +// IPFS autoregistration and debug function. +// +// Normally should only be exposed to mesh workloads - i.e. the request should be over ambient or authenticated +// with JWT or mTLS. +// +// +func (d *IPFSDiscovery) ServeHTTP(w http.ResponseWriter, r *http.Request) { + if strings.HasPrefix(r.URL.Path, "/routing/") { + d.routingHandler.ServeHTTP(w, r) + return + } + r.ParseForm() + + q := r.Form.Get("q") + if q != "" { + // Get the peer.WorkloadID + pi, err := peer.Decode(q) + if err != nil { + w.Write([]byte(err.Error())) + return + } + ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) + pchan, err := d.DHT.GetClosestPeers(ctx, string(pi)) + for x := range pchan { + log.Println(x) + } + + // Sends FIND_NODE + data, err := d.DHT.FindPeer(context.Background(), pi) + + // GetValue accepts /ipns/PEER and /pk/PEER + //pkkey := routing.KeyForPublicKey(pi) + //data, err := p2p.DHT.GetValue(context.Background(), pkkey, dht.Quorum(1)) + if err != nil { + w.Write([]byte(err.Error())) + } else { + fmt.Fprintf(w, "%v", data) + } + return + } + + h := d.Host + + c := r.Form.Get("c") + if c != "" { + //"/ip4/149.28.196.14/tcp/4001/p2p/12D3KooWLePVbQbv3PqsDZt6obMcWa99YyqRWjeiCtStSydQ6zjH" + pi, err := P2PAddrFromString(c) + if err != nil { + return + } + err = h.Connect(context.Background(), *pi) + if err != nil { + fmt.Printf("Error %v", err) + return + } + return + } + + log.Println("Peers: ", h.Peerstore().Peers()) + for _, p := range h.Peerstore().Peers() { + log.Println(h.Peerstore().PeerInfo(p)) + } + + log.Println("Conns: ", h.Network().Conns()) + + c = r.Form.Get("p") + if c != "" { + // Provide indicates this node knows the value of the CID. + d.DHT.Provide(context.Background(), peer.ToCid(d.Host.ID()), true) + return + } +} + + +func P2PAddrFromString(c string) (*peer.AddrInfo, error) { + ma, err := multiaddr.NewMultiaddr(c) + if err != nil { + fmt.Printf("Error %v", err) + return nil, err + } + // + pi, err := peer.AddrInfoFromP2pAddr(ma) + if err != nil { + fmt.Printf("Error %v", err) + return nil, err + } + return pi, nil +} + +// From kubo - but using DHT + +type peerChanIter struct { + ch <-chan peer.AddrInfo + cancel context.CancelFunc + next *peer.AddrInfo +} + +func (it *peerChanIter) Next() bool { + addr, ok := <-it.ch + if ok { + it.next = &addr + return true + } + it.next = nil + return false +} + +func (it *peerChanIter) Val() types.Record { + if it.next == nil { + return nil + } + + rec := &types.PeerRecord{ + Schema: types.SchemaPeer, + ID: &it.next.ID, + } + + for _, addr := range it.next.Addrs { + rec.Addrs = append(rec.Addrs, types.Multiaddr{Multiaddr: addr}) + } + + return rec +} + +func (it *peerChanIter) Close() error { + it.cancel() + return nil +} + +type contentRouter struct { + DHT *dht.IpfsDHT +} + +func (r *IPFSDiscovery) FindProviders(ctx context.Context, key cid.Cid, limit int) (iter.ResultIter[types.Record], error) { + ctx, cancel := context.WithCancel(ctx) + + ch := r.DHT.FindProvidersAsync(ctx, key, limit) + return iter.ToResultIter[types.Record](&peerChanIter{ + ch: ch, + cancel: cancel, + }), nil +} + +// nolint deprecated +func (r *IPFSDiscovery) ProvideBitswap(ctx context.Context, req *server.BitswapWriteProvideRequest) (time.Duration, error) { + return 0, routing.ErrNotSupported +} + +func (r *IPFSDiscovery) FindPeers(ctx context.Context, pid peer.ID, limit int) (iter.ResultIter[*types.PeerRecord], error) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + addr, err := r.DHT.FindPeer(ctx, pid) + if err != nil { + return nil, err + } + + rec := &types.PeerRecord{ + Schema: types.SchemaPeer, + ID: &addr.ID, + } + + for _, addr := range addr.Addrs { + rec.Addrs = append(rec.Addrs, types.Multiaddr{Multiaddr: addr}) + } + + return iter.ToResultIter[*types.PeerRecord](iter.FromSlice[*types.PeerRecord]([]*types.PeerRecord{rec})), nil +} + +func (r *IPFSDiscovery) GetIPNS(ctx context.Context, name ipns.Name) (*ipns.Record, error) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + raw, err := r.DHT.GetValue(ctx, string(name.RoutingKey())) + if err != nil { + return nil, err + } + + return ipns.UnmarshalRecord(raw) +} + +func (r *IPFSDiscovery) PutIPNS(ctx context.Context, name ipns.Name, record *ipns.Record) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + raw, err := ipns.MarshalRecord(record) + if err != nil { + return err + } + + // The caller guarantees that name matches the record. This is double checked + // by the internals of PutValue. + return r.DHT.PutValue(ctx, string(name.RoutingKey()), raw) +} + +func (p2p *IPFSDiscovery) InterceptPeerDial(p peer.ID) (allow bool) { + //log.Println("IPFS: peerDial", p) + peerDialCnt++ + return true +} + +func (p2p *IPFSDiscovery) InterceptAddrDial(id peer.ID, m multiaddr.Multiaddr) (allow bool) { + dialCnt++ + if dialCnt <10 || dialCnt % 50 == 0 { + log.Println("IPFS: addrDial", id, m) + } + return true +} + +func (p2p *IPFSDiscovery) InterceptAccept(multiaddrs network.ConnMultiaddrs) (allow bool) { + t, _ := multiaddrs.RemoteMultiaddr().MarshalText() + t1, _ := multiaddrs.LocalMultiaddr().MarshalText() + log.Println("IPFS: accept", string(t), string(t1)) + return true +} + + +func (p2p *IPFSDiscovery) InterceptSecured(direction network.Direction, id peer.ID, multiaddrs network.ConnMultiaddrs) (allow bool) { + t, _ := multiaddrs.RemoteMultiaddr().MarshalText() + securedCnt++ + if securedCnt <10 || securedCnt % 50 == 0 { + log.Println("IPFS: secured", direction, id, string(t), dialCnt, peerDialCnt) + } + return true +} + +func (p2p *IPFSDiscovery) InterceptUpgraded(conn network.Conn) (allow bool, reason control.DisconnectReason) { + //t, _ := conn.RemoteMultiaddr().MarshalText() + //rmt, _ := conn.RemoteMultiaddr().MarshalText() + //upgradedCnt++ + //if upgradedCnt <10 || upgradedCnt % 50 ==0 { + // log.Println("IPFS: upgraded", conn.RemotePeer(), string(t), + // string(rmt), conn.ID()) + //} + return true, 0 +} diff --git a/pkg/ipfs/dht_test.go b/pkg/ipfs/dht_test.go new file mode 100644 index 0000000..49beaa5 --- /dev/null +++ b/pkg/ipfs/dht_test.go @@ -0,0 +1,510 @@ + +package ipfs + +import ( + "context" + "crypto/ecdsa" + "encoding/base64" + "fmt" + "github.com/ipfs/boxo/ipns" + "github.com/ipfs/boxo/path" + dht "github.com/libp2p/go-libp2p-kad-dht" + "io/ioutil" + "log" + "net" + "net/http" + "testing" + "time" + + "github.com/costinm/meshauth" + "github.com/ipfs/boxo/routing/http/client" + "github.com/ipfs/boxo/routing/http/contentrouter" + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/peerstore" + + "github.com/costinm/ugate/pkg/test" + + "github.com/multiformats/go-multiaddr" + + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/sec" + "github.com/libp2p/go-libp2p/core/transport" + + blank "github.com/libp2p/go-libp2p/p2p/host/blank" + "github.com/libp2p/go-libp2p/p2p/host/eventbus" + "github.com/libp2p/go-libp2p/p2p/host/peerstore/pstoremem" + + "github.com/libp2p/go-libp2p/p2p/muxer/yamux" + + "github.com/libp2p/go-libp2p/p2p/net/connmgr" + "github.com/libp2p/go-libp2p/p2p/net/swarm" + "github.com/libp2p/go-libp2p/p2p/net/upgrader" + + "github.com/libp2p/go-libp2p/p2p/transport/tcp" + + tls "github.com/libp2p/go-libp2p/p2p/security/tls" +) + +/* + +# s1 + +IPFS ID: QmcGCepxB4ymJLkWjbaAMRUW6UXjW1KZAu8oBNh3DtfpNS +IPFS CID: bafzbeigo37kn4faud7pazgd6pphlu64pifk6vti7gclc4jj4hdxjigphs4 +[/ip6/2601:647:6100:449c:4ce5:460a:460:92ce/tcp/16100 +/ip6/::1/tcp/16100 +/ip4/10.1.10.228/tcp/16100 +/ip4/127.0.0.1/tcp/16100] + + +# s2 + +2021/03/03 20:24:03 IPFS ID: QmNZpRjHnEGkuHQezWHk4C7XGPfZxF1Kss3nV5JJMkwwVC +2021/03/03 20:24:03 IPFS Addr: [/ip6/2601:647:6100:449c:4ce5:460a:460:92ce/tcp/15100 /ip6/::1/tcp/15100 /ip4/10.1.10.228/tcp/15100 /ip4/127.0.0.1/tcp/15100] +2021/03/03 20:24:03 IPFS CID: bafzbeiadl6e43axbad4hegxivdsg6viv5hn6zopa77eonetyuc5bc4mplm + + + +*/ +const bobIPFSPeerID = "QmXpb6CSoNP6nMgq4kwY9Zd3Gysws1BzjXQd9cYN8CU3y9" +const mainPeerID = "QmNhttK3xm5LpyLVDBgzwhwyAsGkoMnYmEt1rmQvtMXg87" +const mainAddr = "/ip4/172.17.0.3/tcp/11014/p2p" + +const testKey = "CAESQGsUl0stPGtM2PMq5rJArmHflcQfECHPY5p0V7vQSexKCJC7aR882u_lzQrvMeohGEvZTb39HiPzBiKPbDDww4w" + +func TestPublicDHT(t *testing.T) { + ctx := context.Background() + kk, _ := base64.URLEncoding.DecodeString(testKey) + kkk, _ := crypto.UnmarshalPrivateKey(kk) + d := &IPFSDiscovery{Port: 8888, Bootstrap: dht.DefaultBootstrapPeers[0:2], Key: kkk} + err := d.Init(ctx) + if err != nil { + t.Fatal(err) + } + + //key, _ := crypto.MarshalPrivateKey(d.Key) + //log.Println(base64.RawURLEncoding.EncodeToString(key)) + + //pid, _ := peer.Decode(bobIPFSPeerID) + //ai, err := d.DHT.FindPeer(context.Background(), pid) + //log.Println(err, ai) + + l, _ := net.Listen("tcp", ":0") + go http.Serve(l, d) + + p, _ := path.NewPath("/ipns/TEST") + r, err := ipns.NewRecord(d.Key, p, 1, time.Now().Add(1 * time.Hour), 1 * time.Hour)//, ipns.WithPublicKey(true)) + rb, err := ipns.MarshalRecord(r) + + pkid, _ := peer.IDFromPublicKey(d.Key.GetPublic()) + name := ipns.NameFromPeer(pkid) // Names are in all cases based on the public key (or the public key) + + oldv, _ := d.DHT.GetValue(ctx, string(name.RoutingKey())) + if oldv != nil { + log.Println(oldv) + } + err = d.DHT.PutValue(ctx, string(name.RoutingKey()), rb) + if err != nil { + t.Fatal(err) + } + oldv, _ = d.DHT.GetValue(ctx, string(name.RoutingKey())) + if oldv != nil { + log.Println(oldv) + } + + // URL: /routing/v1/peers/ + // -HAccept:application/x-ndjson,application/json + // https://cloudflare-ipfs.com//routing/v1/peers/bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba - 404 + // GET https://delegated-ipfs.dev/routing/v1/peers/bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba - 500 + // cid.contact + //resClient, err := client.New( + // "http://" + l.Addr().String()) + // //"https://w3s.link") + // // "https://gw3.io") // text/html result + ////"https://dweb.link") + //"https://cid.contact") + //"https://gateway.ipfs.io") + //"https://cloudflare-ipfs.com" )// + //cr := contentrouter.NewContentRoutingClient(resClient) + //cid := peer.ToCid(pid).String() + //log.Println("CID", cid) + // + //pi, err := cr.FindPeer(context.Background(), pid) + //log.Println(err, pi) +} + +func TestLocalDHT(t *testing.T) { + ctx := context.Background() + + root := &IPFSDiscovery{Port: 5555, Domain: "mesh.internal"} + err := root.Init(ctx) + if err != nil { + t.Fatal(err) + } + rpi := peer.AddrInfo{ID: root.Host.ID(), Addrs: root.Host.Addrs()} + + nodes := []*IPFSDiscovery{} + for i := 0; i < 3; i++ { + n := &IPFSDiscovery{Port: 5600 + i, Domain: "mesh.internal"}// , Bootstrap: []multiaddr.Multiaddr{pi}} + n.Init(ctx) + //pi := peer.AddrInfo{ID: n.Host.ID(), Addrs: n.Host.Addrs()} + // We ignore errors as some bootstrap peers may be down + // and that is fine. + n.Host.Connect(context.Background(), rpi) + //root.Host.Connect(ctx, pi) + nodes = append(nodes, n) + } + + root.DHT.Bootstrap(ctx) + + // ipfs, ipld - CID + // CID can contain 'identity', dns, multi-address, etc + + // TODO: for private DHT, add a Validator that allows any values, not only the public IPFS (ipns, etc) + + t.Run("ipns", func(t *testing.T) { + // ipns - string + p, err := path.NewPath("/ipns/bar") + if err != nil { + t.Fatal(err) + } + r, err := ipns.NewRecord(root.Key, p, 1, time.Now().Add(1 * time.Hour), 1 * time.Hour)//, ipns.WithPublicKey(true)) + rb, err := ipns.MarshalRecord(r) + + pkid, _ := peer.IDFromPublicKey(root.Key.GetPublic()) + name := ipns.NameFromPeer(pkid) // Names are in all cases based on the public key (or the public key) + err = nodes[2].DHT.PutValue(ctx, string(name.RoutingKey()), rb) + if err != nil { + t.Fatal(err) + } + + for _, nn := range nodes { + v, err := nn.DHT.GetValue(ctx, string(name.RoutingKey())) + if err != nil { + t.Fatal(err) + } + r, err := ipns.UnmarshalRecord(v) + if err != nil { + t.Fatal(err) + } + path, err := r.Value() + if err != nil { + t.Fatal(err) + } + if "/ipns/bar" != path.String() { + t.Fatal("invalid value", path) + } + } + }) + + t.Run("genvalue", func(t *testing.T) { + log.Println("Put value") + err = nodes[1].DHT.PutValue(ctx, "/test/bar", []byte("Hello")) + if err != nil { + t.Fatal(err) + } + log.Println("Get value") + + val, err := nodes[2].DHT.GetValue(ctx, "/test/bar") + if err != nil { + t.Fatal(err) + } + if string(val) != "Hello" { + t.Error("got ", string(val)) + } + }) + //log.Println(v) +} + +func TestHttpRouting(t *testing.T) { + pid, _ := peer.Decode(mainPeerID) + + + // URL: /routing/v1/peers/ + // -HAccept:application/x-ndjson,application/json + // https://cloudflare-ipfs.com//routing/v1/peers/bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba - 404 + // GET https://delegated-ipfs.dev/routing/v1/peers/bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba - 500 + // cid.contact + resClient, err := client.New("http://localhost:11015") + //"https://w3s.link") + // "https://gw3.io") // text/html result + //"https://dweb.link") + //"https://cid.contact") + //"https://gateway.ipfs.io") + //"https://cloudflare-ipfs.com" )// + cr := contentrouter.NewContentRoutingClient(resClient) + //cid := peer.ToCid(pid).String() + //log.Println("CID", cid) + + pi, err := cr.FindPeer(context.Background(), pid) + log.Println(err, pi) +} + +// getHostAddress returns the first address of the host, with peer ID added. +func getHostAddress(ha host.Host) []string { + // Build host multiaddress + hostAddr, _ := multiaddr.NewMultiaddr(fmt.Sprintf("/p2p/%s", ha.ID())) + + res := []string{} + // Now we can build a full multiaddress to reach this host + // by encapsulating both addresses: + addr := ha.Addrs() + for _, aa := range addr { + res = append(res, aa.Encapsulate(hostAddr).String()) + } + return res +} + + +func TestP2PHelpers(t *testing.T) { + pa, err := P2PAddrFromString("/ip4/149.28.196.14/tcp/4001/p2p/12D3KooWLePVbQbv3PqsDZt6obMcWa99YyqRWjeiCtStSydQ6zjH") + if err != nil { + t.Fatal(err) + } + log.Println(pa.ID, pa.Addrs, pa.String()) + +} + +func newHost(t *testing.T, listen multiaddr.Multiaddr) host.Host { + h, err := libp2p.New( + libp2p.ListenAddrs(listen), + ) + if err != nil { + t.Fatal(err) + } + return h +} + +func TestSimple(t *testing.T) { + m1, _ := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10000") + m2, _ := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10001") + bob := newHost(t, m1) + alice := newHost(t, m2) + defer bob.Close() + defer alice.Close() + + bob.Peerstore().AddAddrs(alice.ID(), alice.Addrs(), peerstore.PermanentAddrTTL) + alice.Peerstore().AddAddrs(bob.ID(), bob.Addrs(), peerstore.PermanentAddrTTL) + + bob.SetStreamHandler("/test", func(stream network.Stream) { + + }) + + ctx := context.Background() + //alice.Connect(ctx, bob.ID()) + s1, err := alice.NewStream(ctx, bob.ID(), "/test") + if err != nil { + t.Fatal(err) + } + s1.Stat() +} + +// Test a minimal config +func TestP2P(t *testing.T) { + //a, _, _ := newHost( "5555", test.ALICE_KEYS) + //b, _, _ := newHost( "5556", test.BOB_KEYS) + a, _, _ := newBlankHost( "5555", test.AliceMeshAuthCfg) + b, _, _ := newBlankHost( "5556", test.BobMeshAuthCfg) + + InitEvent(a) + InitEvent(b) + + log.Println(a, b) + + + ctx := context.Background() + + // To connect we need a peer address info + // The transport created can Dial with address and peer ID (key) + pi, err := P2PAddrFromString(getHostAddress(b)[0]) + log.Println("Dialing ", pi, "Addrs", b.Addrs()) + err = a.Connect(ctx, *pi) + if err != nil { + t.Fatal(err) + } + + log.Println("Peers: ", a.Peerstore().Peers()) + for _, p := range a.Peerstore().Peers() { + log.Println(a.Peerstore().PeerInfo(p)) + } +} + + +func newHostMin(port string, mc *meshauth.MeshCfg) (host.Host, multiaddr.Multiaddr, error) { + //// This is in the libp2p format (protobuf). + ma := meshauth.NewMeshAuth(mc) + + //key, _ := os.ReadFile("testdata/s1/key") + //kb, _ := base64.URLEncoding.DecodeString(string(key)) + //priv, _ := crypto.UnmarshalPrivateKey(kb) + + priv, _, _ := crypto.ECDSAKeyPairFromKey(ma.Cert.PrivateKey.(*ecdsa.PrivateKey)) + + addr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%s", port)) + if err != nil { + return nil, nil, err + } + + //peerID, err := peer.IDFromPrivateKey(priv) + + opts := []libp2p.Option{ + libp2p.ListenAddrStrings(fmt.Sprintf("/ip4/0.0.0.0/tcp/%s", port)), + libp2p.Identity(priv), + libp2p.DisableRelay(), + } + + if false { + opts = append(opts, libp2p.NoSecurity) + } + + h, err := libp2p.New(opts...) + return h, addr, err +} + + +func newBlankHost(port string, mc *meshauth.MeshCfg) (host.Host, multiaddr.Multiaddr, error) { + ma := meshauth.NewMeshAuth(mc) + + //// This is in the libp2p format (protobuf). + //key, _ := os.ReadFile("testdata/s1/key") + //kb, _ := base64.URLEncoding.DecodeString(string(key)) + //priv, _ := crypto.UnmarshalPrivateKey(kb) + + priv, _, _ := crypto.ECDSAKeyPairFromKey(ma.Cert.PrivateKey.(*ecdsa.PrivateKey)) + + tr, multiA, peerID, err := initTransport(port, priv) + if err != nil { + return nil, nil, err + } + + // NewPeerstore creates an in-memory thread-safe collection of peers. + // It's the caller's responsibility to call RemovePeer to ensure + // that memory consumption of the peerstore doesn't grow unboundedly. + ps, _ := pstoremem.NewPeerstore() + + // Must be added - host uses it to find its own key + ps.AddPrivKey(peerID, priv) + + // BlankHost is used in testing - usually with a swarm for transport + // "BlankHost is the thinest implementation of Host interface." + // 2 options - WithConnManager and WithEventBus (default will be created) + // Options can provide a non-null ConnMgr + // In addition it has a 'mux', bus, network - currently Swarm is the only non-mock impl + + // ConnManager tracks connections to peers, and allows consumers to associate + // metadata with each peer. + // + // It enables connections to be trimmed based on implementation-defined + // heuristics. The ConnManager allows libp2p to enforce an upper bound on the + // total number of open connections. + // + // ConnManagers supporting decaying tags implement Decayer. Use the + // SupportsDecay function to safely cast an instance to Decayer, if supported. + cm, err := connmgr.NewConnManager(1, 3) + + eb := eventbus.NewBus(eventbus.WithMetricsTracer(eventbus.NewMetricsTracer())) + + // The 'swarm' is responsible for handshake in user-space using the protocol WorkloadID. + // No metadata. + /* + The IPFS Network package handles all of the peer-to-peer networking. It connects to other hosts, it encrypts communications, it muxes messages between the network's client services and target hosts. It has multiple subcomponents: + + - `Conn` - a connection to a single Peer + - `MultiConn` - a set of connections to a single Peer + - `SecureConn` - an encrypted (TLS-like) connection + - `Swarm` - holds connections to Peers, multiplexes from/to each `MultiConn` + - `Muxer` - multiplexes between `Services` and `Swarm`. Handles `Request/Reply`. + - `Service` - connects between an outside client service and Network. + - `Handler` - the client service part that handles requests + + */ + n, _ := swarm.NewSwarm(peerID, ps, eb) + n.AddTransport(tr) + n.AddListenAddr(multiA) + log.Println(n.ListenAddresses()) + + h := blank.NewBlankHost(n, blank.WithEventBus(eb), blank.WithConnectionManager(cm)) + + + return h, multiA, err +} + +// initTransport will return a configured transport for the port. +// +func initTransport(port string, priv crypto.PrivKey) (transport.Transport, multiaddr.Multiaddr, peer.ID, error) { + addr, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%s", port)) + if err != nil { + return nil, nil, "", err + } + + peerID, err := peer.IDFromPrivateKey(priv) + if err != nil { + return nil, nil, "", err + } + + // TODO: try webtransport + // Don't bother with websocket + + // Set limits, track stuff + rm := &network.NullResourceManager{} + + smu := []upgrader.StreamMuxer{{ID: yamux.ID, Muxer: yamux.DefaultTransport}} + // Security - upgrades accepted and initiated conn + //id := n.LocalPeer() + //pk := n.Peerstore().PrivKey(id) + //st := insecure.NewWithIdentity(insecure.ID, peerID, priv) + st, _ := tls.New(tls.ID, priv, smu) + + u, err := upgrader.New([]sec.SecureTransport{st}, + smu, nil, nil, + nil) + + t, err := tcp.NewTCPTransport(u, rm) + + ln, err := t.Listen(addr) + if err != nil { + return nil, nil, "", err + } + + go func() { + + fmt.Printf("Listening. Now run: go run cmd/client/main.go %s %s\n", ln.Multiaddr(), peerID) + for { + conn, err := ln.Accept() + if err != nil { + log.Println("Listen stop", ln.Multiaddr(), err) + return + } + log.Printf("Accepted new connection from %s (%s)\n", conn.RemotePeer(), conn.RemoteMultiaddr()) + log.Println(conn.RemotePeer().String(), conn.RemoteMultiaddr().String(), + conn.RemotePublicKey()) + + go func() { + if err := handleConn(conn); err != nil { + log.Printf("handling conn failed: %s", err.Error()) + } + }() + } + }() + + return t, addr, peerID, nil +} + +func handleConn(conn transport.CapableConn) error { + str, err := conn.AcceptStream() + if err != nil { + return err + } + data, err := ioutil.ReadAll(str) + if err != nil { + return err + } + log.Printf("Received: %s\n", data) + if _, err := str.Write([]byte(data)); err != nil { + return err + } + return str.Close() +} diff --git a/pkg/ipfs/go.mod b/pkg/ipfs/go.mod new file mode 100644 index 0000000..39bf7d1 --- /dev/null +++ b/pkg/ipfs/go.mod @@ -0,0 +1,122 @@ +module github.com/costinm/ugate/pkg/ipfs + +go 1.21 + +toolchain go1.21.3 + +//replace github.com/libp2p/go-libp2p-webrtc-direct => ../../go-libp2p-webrtc-direct +replace github.com/costinm/ugate => ../.. + +require ( + github.com/costinm/meshauth v0.0.0-20240122023105-adbc83696066 + github.com/costinm/ugate v0.0.0-00010101000000-000000000000 + github.com/ipfs/boxo v0.17.0 + github.com/ipfs/go-cid v0.4.1 + github.com/ipfs/go-datastore v0.6.0 + github.com/ipfs/go-log v1.0.5 + github.com/libp2p/go-libp2p v0.32.2 + github.com/libp2p/go-libp2p-kad-dht v0.25.2 + github.com/libp2p/go-libp2p-record v0.2.0 + github.com/multiformats/go-multiaddr v0.12.2 + github.com/multiformats/go-multihash v0.2.3 +) + +require ( + github.com/benbjohnson/clock v1.3.5 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/containerd/cgroups v1.1.0 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/elastic/gosigar v0.14.2 // indirect + github.com/flynn/noise v1.0.1 // indirect + github.com/francoispqt/gojay v1.2.13 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/google/gopacket v1.1.19 // indirect + github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/huin/goupnp v1.3.0 // indirect + github.com/ipfs/go-log/v2 v2.5.1 // indirect + github.com/ipld/go-ipld-prime v0.21.0 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/jbenet/goprocess v0.1.4 // indirect + github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/cpuid/v2 v2.2.6 // indirect + github.com/koron/go-ssdp v0.0.4 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-cidranger v1.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.1.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect + github.com/libp2p/go-libp2p-kbucket v0.6.3 // indirect + github.com/libp2p/go-libp2p-routing-helpers v0.7.3 // indirect + github.com/libp2p/go-msgio v0.3.0 // indirect + github.com/libp2p/go-nat v0.2.0 // indirect + github.com/libp2p/go-netroute v0.2.1 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/libp2p/go-yamux/v4 v4.0.1 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect + github.com/miekg/dns v1.1.57 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.0 // indirect + github.com/multiformats/go-multistream v0.5.0 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect + github.com/onsi/ginkgo/v2 v2.13.2 // indirect + github.com/opencontainers/runtime-spec v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/polydawn/refmt v0.89.0 // indirect + github.com/prometheus/client_golang v1.18.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qtls-go1-20 v0.4.1 // indirect + github.com/quic-go/quic-go v0.40.1 // indirect + github.com/quic-go/webtransport-go v0.6.0 // indirect + github.com/raulk/go-watchdog v1.3.0 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/otel v1.21.0 // indirect + go.opentelemetry.io/otel/metric v1.21.0 // indirect + go.opentelemetry.io/otel/trace v1.21.0 // indirect + go.uber.org/dig v1.17.1 // indirect + go.uber.org/fx v1.20.1 // indirect + go.uber.org/mock v0.4.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.26.0 // indirect + golang.org/x/crypto v0.18.0 // indirect + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.16.1 // indirect + gonum.org/v1/gonum v0.14.0 // indirect + google.golang.org/protobuf v1.32.0 // indirect + lukechampine.com/blake3 v1.2.1 // indirect +) diff --git a/pkg/ipfs/go.sum b/pkg/ipfs/go.sum new file mode 100644 index 0000000..b789135 --- /dev/null +++ b/pkg/ipfs/go.sum @@ -0,0 +1,589 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= +dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= +dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= +dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= +dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= +git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= +github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/costinm/meshauth v0.0.0-20240122023105-adbc83696066 h1:R/c3jsObom0gLFvrz0BDHliNJS53uT9ZtPo+Ak3diXk= +github.com/costinm/meshauth v0.0.0-20240122023105-adbc83696066/go.mod h1:DyjbOGzDaVKYEQhuv4CrS/wZqplESvKaLCvF11hRgPs= +github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d h1:SsxuU+DSeqPeY2JHrBp5qfG3PdIjlrfb2VZck7V7OnE= +github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d/go.mod h1:Ez/sUx4fAqKWesQrTaoVjH6Lyi2x6QWW0fhcKvhe28g= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/flynn/noise v1.0.1 h1:vPp/jdQLXC6ppsXSj/pM3W1BIJ5FEHE2TulSJBpb43Y= +github.com/flynn/noise v1.0.1/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/go-yaml/yaml v2.1.0+incompatible/go.mod h1:w2MrLa16VYP0jy6N7M5kHaCkaLENm+P+Tv+MfurjSw0= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42 h1:dHLYa5D8/Ta0aLR2XcPsrkpAgGeFs6thhMcQK0oQ0n8= +github.com/google/pprof v0.0.0-20231229205709-960ae82b1e42/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= +github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/ipfs/boxo v0.17.0 h1:fVXAb12dNbraCX1Cdid5BB6Kl62gVLNVA+e0EYMqAU0= +github.com/ipfs/boxo v0.17.0/go.mod h1:pIZgTWdm3k3pLF9Uq6MB8JEcW07UDwNJjlXW1HELW80= +github.com/ipfs/go-cid v0.4.1 h1:A/T3qGvxi4kpKWWcPC/PgbvDA2bjVLO7n4UeVwnbs/s= +github.com/ipfs/go-cid v0.4.1/go.mod h1:uQHwDeX4c6CtyrFwdqyhpNcxVewur1M7l7fNU7LKwZk= +github.com/ipfs/go-datastore v0.6.0 h1:JKyz+Gvz1QEZw0LsX1IBn+JFCJQH4SJVFtM4uWU0Myk= +github.com/ipfs/go-datastore v0.6.0/go.mod h1:rt5M3nNbSO/8q1t4LNkLyUwRs8HupMeN/8O4Vn9YAT8= +github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= +github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= +github.com/ipfs/go-ipfs-util v0.0.3 h1:2RFdGez6bu2ZlZdI+rWfIdbQb1KudQp3VGwPtdNCmE0= +github.com/ipfs/go-ipfs-util v0.0.3/go.mod h1:LHzG1a0Ig4G+iZ26UUOMjHd+lfM84LZCrn17xAKWBvs= +github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= +github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= +github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= +github.com/ipld/go-ipld-prime v0.21.0 h1:n4JmcpOlPDIxBcY037SVfpd1G+Sj1nKZah0m6QH9C2E= +github.com/ipld/go-ipld-prime v0.21.0/go.mod h1:3RLqy//ERg/y5oShXXdx5YIp50cFGOanyMctpPjsvxQ= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= +github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0= +github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= +github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro= +github.com/libp2p/go-libp2p v0.32.2 h1:s8GYN4YJzgUoyeYNPdW7JZeZ5Ee31iNaIBfGYMAY4FQ= +github.com/libp2p/go-libp2p v0.32.2/go.mod h1:E0LKe+diV/ZVJVnOJby8VC5xzHF0660osg71skcxJvk= +github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= +github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= +github.com/libp2p/go-libp2p-kad-dht v0.25.2 h1:FOIk9gHoe4YRWXTu8SY9Z1d0RILol0TrtApsMDPjAVQ= +github.com/libp2p/go-libp2p-kad-dht v0.25.2/go.mod h1:6za56ncRHYXX4Nc2vn8z7CZK0P4QiMcrn77acKLM2Oo= +github.com/libp2p/go-libp2p-kbucket v0.6.3 h1:p507271wWzpy2f1XxPzCQG9NiN6R6lHL9GiSErbQQo0= +github.com/libp2p/go-libp2p-kbucket v0.6.3/go.mod h1:RCseT7AH6eJWxxk2ol03xtP9pEHetYSPXOaJnOiD8i0= +github.com/libp2p/go-libp2p-record v0.2.0 h1:oiNUOCWno2BFuxt3my4i1frNrt7PerzB3queqa1NkQ0= +github.com/libp2p/go-libp2p-record v0.2.0/go.mod h1:I+3zMkvvg5m2OcSdoL0KPljyJyvNDFGKX7QdlpYUcwk= +github.com/libp2p/go-libp2p-routing-helpers v0.7.3 h1:u1LGzAMVRK9Nqq5aYDVOiq/HaB93U9WWczBzGyAC5ZY= +github.com/libp2p/go-libp2p-routing-helpers v0.7.3/go.mod h1:cN4mJAD/7zfPKXBcs9ze31JGYAZgzdABEm+q/hkswb8= +github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= +github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= +github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= +github.com/libp2p/go-nat v0.2.0 h1:Tyz+bUFAYqGyJ/ppPPymMGbIgNRH+WqC5QrT5fKrrGk= +github.com/libp2p/go-nat v0.2.0/go.mod h1:3MJr+GRpRkyT65EpVPBstXLvOlAPzUVlG6Pwg9ohLJk= +github.com/libp2p/go-netroute v0.2.1 h1:V8kVrpD8GK0Riv15/7VN6RbUQ3URNZVosw7H2v9tksU= +github.com/libp2p/go-netroute v0.2.1/go.mod h1:hraioZr0fhBjG0ZRXJJ6Zj2IVEVNx6tDTFQfSmcq7mQ= +github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= +github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= +github.com/libp2p/go-yamux/v4 v4.0.1 h1:FfDR4S1wj6Bw2Pqbc8Uz7pCxeRBPbwsBbEdfwiCypkQ= +github.com/libp2p/go-yamux/v4 v4.0.1/go.mod h1:NWjl8ZTLOGlozrXSOZ/HlfG++39iKNnM5wwmtQP1YB4= +github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= +github.com/multiformats/go-multiaddr v0.12.2 h1:9G9sTY/wCYajKa9lyfWPmpZAwe6oV+Wb1zcmMS1HG24= +github.com/multiformats/go-multiaddr v0.12.2/go.mod h1:GKyaTYjZRdcUhyOetrxTk9z0cW+jA/YrnqTOvKgi44M= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= +github.com/multiformats/go-multicodec v0.9.0 h1:pb/dlPnzee/Sxv/j4PmkDRxCOi3hXTz3IbPKOXWJkmg= +github.com/multiformats/go-multicodec v0.9.0/go.mod h1:L3QTQvMIaVBkXOXXtVmYE+LI16i14xuaojr/H7Ai54k= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= +github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= +github.com/multiformats/go-multistream v0.5.0 h1:5htLSLl7lvJk3xx3qT/8Zm9J4K8vEOf/QGkvOGQAyiE= +github.com/multiformats/go-multistream v0.5.0/go.mod h1:n6tMZiwiP2wUsR8DgfDWw1dydlEqV3l6N3/GBsX6ILA= +github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= +github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= +github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= +github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polydawn/refmt v0.89.0 h1:ADJTApkvkeBZsN0tBTx8QjpD9JkmxbKp0cxfr9qszm4= +github.com/polydawn/refmt v0.89.0/go.mod h1:/zvteZs/GwLtCgZ4BL6CBsk9IKIlexP43ObX9AxTqTw= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= +github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= +github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5nfFs= +github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= +github.com/quic-go/quic-go v0.40.1 h1:X3AGzUNFs0jVuO3esAGnTfvdgvL4fq655WaOi1snv1Q= +github.com/quic-go/quic-go v0.40.1/go.mod h1:PeN7kuVJ4xZbxSv/4OX6S1USOX8MJvydwpTx31vx60c= +github.com/quic-go/webtransport-go v0.6.0 h1:CvNsKqc4W2HljHJnoT+rMmbRJybShZ0YPFDD3NxaZLY= +github.com/quic-go/webtransport-go v0.6.0/go.mod h1:9KjU4AEBqEQidGHNDkZrb8CAa1abRaosM2yGOyiikEc= +github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/raulk/go-watchdog v1.3.0/go.mod h1:fIvOnLbF0b0ZwkB9YU4mOW9Did//4vPZtDqv66NfsMU= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= +github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= +github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= +github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= +github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= +github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= +github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= +github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= +github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= +github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= +github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= +github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= +github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= +github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= +github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= +github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= +github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= +github.com/smartystreets/goconvey v1.7.2/go.mod h1:Vw0tHAZW6lzCRk3xgdin6fKYcG+G3Pg9vgXWeJpQFMM= +github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= +github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.10/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= +github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0 h1:GDDkbFiaK8jsSDJfjId/PEGEShv6ugrt4kYsC5UIDaQ= +github.com/warpfork/go-wish v0.0.0-20220906213052-39a1cc7a02d0/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc= +go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= +go.opentelemetry.io/otel/metric v1.21.0 h1:tlYWfeo+Bocx5kLEloTjbcDwBuELRrIFxwdQ36PlJu4= +go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= +go.opentelemetry.io/otel/trace v1.21.0 h1:WD9i5gzvoUPuXIXH24ZNBudiarZDKuekPqi/E8fpfLc= +go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= +go.uber.org/dig v1.17.1 h1:Tga8Lz8PcYNsWsyHMZ1Vm0OQOUaJNDyvPImgbAu9YSc= +go.uber.org/dig v1.17.1/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.20.1 h1:zVwVQGS8zYvhh9Xxcu4w1M6ESyeMzebzj2NbSayZ4Mk= +go.uber.org/fx v1.20.1/go.mod h1:iSYNbHf2y55acNCwCXKx7LbWb5WG1Bnue5RDXz1OREg= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= +go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= +golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0= +gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU= +google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= +google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +lukechampine.com/blake3 v1.2.1 h1:YuqqRuaqsGV71BV/nm9xlI0MKUv4QC54jQnBChWbGnI= +lukechampine.com/blake3 v1.2.1/go.mod h1:0OFRp7fBtAylGVCO40o87sbupkyIGgbpv1+M1k1LM6k= +sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= +sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/pkg/ipfs/libp2p.go b/pkg/ipfs/libp2p.go new file mode 100644 index 0000000..7b1a493 --- /dev/null +++ b/pkg/ipfs/libp2p.go @@ -0,0 +1,113 @@ +//go:build !IPFSLITE +// +build !IPFSLITE + +package ipfs + +import ( + "context" + "crypto/ecdsa" + "fmt" + "github.com/costinm/meshauth" + "github.com/costinm/ugate" + "github.com/libp2p/go-libp2p/core/network" + "log" + "net" + + "github.com/ipfs/boxo/routing/http/client" + "github.com/ipfs/boxo/routing/http/contentrouter" + + "github.com/libp2p/go-libp2p" + "github.com/libp2p/go-libp2p/core/crypto" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/peer" + "github.com/libp2p/go-libp2p/core/routing" + "github.com/multiformats/go-multiaddr" +) + +// ConnectionGater, Server +type IPFS struct { + Host host.Host +} + +func (ipfs *IPFS) FindPeer(ctx context.Context, id peer.ID) (peer.AddrInfo, error) { + return peer.AddrInfo{ID: id}, nil +} + +func (ipfs *IPFS) DialContext(ctx context.Context, net string, addr string) (net.Conn, error) { + return nil, nil +} + +func Init(ug *ugate.UGate) { + ug.ListenerProto["ipfs"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { + InitIPFS(ug.Auth, l.GetPort()) + return nil + } +} + +// InitIPFS creates LibP2P compatible transport. +// Identity is based on the EC256 workload identity in auth. +// +// Routing is based on HTTP. +// +// Main purpose of this integration is to take advantage of public +// auto-relay code and infra, for control/signaling channels. +// +func InitIPFS(auth *meshauth.MeshAuth, p2pport int32) *IPFS { + p2p := &IPFS{ + + } + + sk, _, _ := crypto.ECDSAKeyPairFromKey(auth.Cert.PrivateKey.(*ecdsa.PrivateKey)) + + la := []multiaddr.Multiaddr{} + listen, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", p2pport)) + la = append(la, listen) + + finalOpts := []libp2p.Option{ + libp2p.Identity(sk), + libp2p.ListenAddrs(la...), + libp2p.ConnectionGater(p2p), + } + + // Use a HTTP gateway for resolution - https://ipfs.io or https://cloudflare-ipfs.com/ + // Can also use mdns locally + finalOpts = append(finalOpts, + libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { + + resClient, err := client.New("http://127.0.0.1:11015") + cr := contentrouter.NewContentRoutingClient(resClient) + return cr, err + })) + + + h, err := libp2p.New(finalOpts...) + if err != nil { + panic(err) + } + + p2p.Host = h + + // Add our stream handlers + h.SetStreamHandler(Protocol, streamHandler) + + // Use the host 'event bus' to subscribe to all events. + InitEvent(p2p.Host) + + for _, a := range h.Addrs() { + log.Println("IPFS Addr: ", a.String() + "/p2p/" + h.ID().String()) + } + log.Println("IPFS CID: ", peer.ToCid(h.ID()).String()) + + return p2p +} + + +const Protocol = "/ugate/0.0.1" + +func streamHandler(stream network.Stream) { + // Remember to close the stream when we are done. + defer stream.Close() + + log.Println("NEW STREAM: ", stream.Conn().RemotePeer(), stream.Conn().RemotePublicKey()) + +} diff --git a/pkg/ipfs/libp2p_and_mesh.md b/pkg/ipfs/libp2p_and_mesh.md new file mode 100644 index 0000000..056b6c2 --- /dev/null +++ b/pkg/ipfs/libp2p_and_mesh.md @@ -0,0 +1,40 @@ +# Background + +# Simple usage + +Because LibP2P and IPFS are quite heavy and complex, and use non-standard variation of protocols - they don't make +a very good option as core protocol for sidecars or per-node proxies. + +Having Ingress and Egress gateways that support the core LibP2P protocols and bridge to mesh protocol (CONNECT or +others) seem a much safer and simpler option in the data path. + +The Gateways can use the mesh control plane and discovery - including K8S - to locate other Gateways, without +the use of DHT. + +# Public DHT integration + +A node that enables DHT becomes a full participant in the discovery and metadata storage protocol, which is +quite expensive. Resolving via DHT is also pretty slow - the nodes storing the key are remote. + +It can still be useful to have one (or few) servers - to reduce the use of IP addresses they may use +a couple of different ports in the gateway. The peer ID of the DHT nodes will be discoverable (slowly) +in DHT as a backup and for external clients. + +The big problem is that exposing services by internal nodes (gateways or workloads using libp2p) is not possible +with the normal protocol unless they are participatin in DHT. + +There is a simple solution: use IPNS to store records for each peer instead of peer ID. + +# Private DHT + +# Using ideas from LibP2P in mesh + +The core idea is tracking the public key (or SHA) along with the direct and relayed addresses. For regular +mesh workloads it is expected that a common root CA is used - or Cluster configures trusted roots for multiple +hosts in a more efficient way. + +For individual hosts that are not part of a cluster - it is useful to save the public key hash or even the +full key in the pod status. The private key can also be used with SSH and push protocols as well as for signing. + + + diff --git a/ugated/pkg/ipfs/readme.md b/pkg/ipfs/readme.md similarity index 56% rename from ugated/pkg/ipfs/readme.md rename to pkg/ipfs/readme.md index 11fa85a..a32af7e 100644 --- a/ugated/pkg/ipfs/readme.md +++ b/pkg/ipfs/readme.md @@ -1,3 +1,59 @@ +# TL;DR + +Experimental code to extract some ideas from IPFS/Libp2p - but no plan to use it, too many +non-interoperable changes to protocols and complexity that is not needed. + +# Important ideas + +1. Pair a set of IP addresses with the SHA(public key) +2. Use SHA(public key) of each host (workload) as the identity to lookup IPs. +3. Support multiple protocols +4. built-in NAT/ICE + +Not viable but interesting for corner use cases: +1. Global DHT for discovery (DNS replacement). In rare cases it may be useful, but a federated model is still decentralized but far more efficient/fast. +2. Replacing DNS names with paths. +3. Using unfriendly names (effectively UUIDs) for any human interaction. + +Major flaws: +1. No access control ( there is some complicated way to have a separated mesh) +2. No separation between infra nodes (well connected, maintained) and small user nodes. +3. DHT treats everything as a reachable peer + + + +# Intro + +IPFS and libp2p are based on some (over-)complicated NIH protocols, but at the +core some good ideas. While much simpler implementations would be desirable, IPFS +also has a community and infrastructure that is useful + +Similar (over complex, NIH) infra exists for Syncthing, Onion/Tor, etc - but +libp2p is more oriented to standalone use as a library and easier to run as +a private network. + +Example infra: + +- cid.contact - route CID to host + - alternative to using the DHT - too much bandwidth + - based on gossip pubsub instead of DHT + +# Local DHT + +The main problem with DHT is traffic and speed. This is in part due to the long-distance calls. + +Libp2p DHT is tied to the protocols - and expects the peers to be connected. + +It looks like bittorent DHT is ligher and simpler. Not clear which has more nodes. + + +# HTTP routing + +https://specs.ipfs.tech/routing/http-routing-v1/ - URL /routing/v1/providers/{cid}, returns +a json with Addrs. Also /routing/v1/peers/{peer-id} - and ipns - returning signed record. + +https://docs.ipfs.tech/how-to/address-ipfs-on-web/#path-gateway - various URL and DNS schemas + # Concepts ## Discovery diff --git a/pkg/ipfs/testdata/s1/key b/pkg/ipfs/testdata/s1/key new file mode 100644 index 0000000..9ea7669 --- /dev/null +++ b/pkg/ipfs/testdata/s1/key @@ -0,0 +1 @@ +CAESQDXW7-QhEhXWdgDUg7AvhlJU2eN-2IzMoDOWl_P271npGnwf4KUMcqufSakCfFi373F8C2HqINHxWalQwk3pVrc= diff --git a/ugated/pkg/ipfs/cmd/testdata/s2/kube.json b/pkg/ipfs/testdata/s2/kube.json similarity index 100% rename from ugated/pkg/ipfs/cmd/testdata/s2/kube.json rename to pkg/ipfs/testdata/s2/kube.json diff --git a/ugated/pkg/ipfs/cmd/testdata/s2/ugate.json b/pkg/ipfs/testdata/s2/ugate.json similarity index 100% rename from ugated/pkg/ipfs/cmd/testdata/s2/ugate.json rename to pkg/ipfs/testdata/s2/ugate.json diff --git a/pkg/ipfs/watch.go b/pkg/ipfs/watch.go new file mode 100644 index 0000000..be0e577 --- /dev/null +++ b/pkg/ipfs/watch.go @@ -0,0 +1,99 @@ +package ipfs + +import ( + "log" + + "github.com/libp2p/go-libp2p/core/control" + "github.com/libp2p/go-libp2p/core/event" + "github.com/libp2p/go-libp2p/core/host" + "github.com/libp2p/go-libp2p/core/network" + "github.com/libp2p/go-libp2p/core/peer" + + "github.com/multiformats/go-multiaddr" +) + + +// ConnectionGater implementation +// WIP - will implement a policy to allow/deny based on RBAC + +func (p2p *IPFS) InterceptPeerDial(p peer.ID) (allow bool) { + log.Println("IPFS: peerDial", p) + return true +} + + +func (p2p *IPFS) InterceptAddrDial(id peer.ID, m multiaddr.Multiaddr) (allow bool) { + log.Println("IPFS: addrDial", id, m) + return true +} + +func (p2p *IPFS) InterceptAccept(multiaddrs network.ConnMultiaddrs) (allow bool) { + t, _ := multiaddrs.RemoteMultiaddr().MarshalText() + t1, _ := multiaddrs.LocalMultiaddr().MarshalText() + log.Println("IPFS: accept", string(t), string(t1)) + return true +} + + +func (p2p *IPFS) InterceptSecured(direction network.Direction, id peer.ID, multiaddrs network.ConnMultiaddrs) (allow bool) { + t, _ := multiaddrs.RemoteMultiaddr().MarshalText() + log.Println("IPFS: secured", direction, id, string(t), dialCnt, peerDialCnt) + return true +} + +func (p2p *IPFS) InterceptUpgraded(conn network.Conn) (allow bool, reason control.DisconnectReason) { + t, _ := conn.RemoteMultiaddr().MarshalText() + rmt, _ := conn.RemoteMultiaddr().MarshalText() + log.Println("IPFS: upgraded", conn.RemotePeer(), string(t), + string(rmt), conn.ID()) + return true, 0 +} + +// Track events in the P2P implementation +func InitEvent(h host.Host) { + + //log.Println(h.EventBus().GetAllEventTypes()) + + sub, err := h.EventBus().Subscribe(event.WildcardSubscription) + if err != nil { + log.Println(err) + } + + connChgCnt :=0 + + go func() { + defer sub.Close() + for e := range sub.Out() { + switch v := e.(type) { + case peer.ID: + log.Println("IPFS Peer ", v) + + case event.EvtLocalAddressesUpdated: + log.Println("IPFS local ", v) + + case event.EvtLocalReachabilityChanged: + log.Println("IPFS reach ", v) + + case event.EvtPeerProtocolsUpdated: + if len(v.Added) > 0 || len(v.Removed) > 0 { + log.Println("IPFS PeerProto ", v, v.Added, v.Removed) + } + case event.EvtPeerIdentificationFailed: + //log.Println("IPFS Peer ", v) + case event.EvtPeerIdentificationCompleted: + //log.Println("IPFS Peer ", v) + case event.EvtPeerConnectednessChanged: + connChgCnt++ + if connChgCnt % 50 == 0 { + log.Println("PeerConnectednesChanged 50", v) + } + default: + log.Printf("IPFS Event: %T %v\n", e, e) + } + } + + }() + + //_, ch,routing.RegisterForQueryEvents(context.Background()) +} + diff --git a/pkg/iptables/iptables.go b/pkg/iptables/iptables.go deleted file mode 100644 index 0be7ff8..0000000 --- a/pkg/iptables/iptables.go +++ /dev/null @@ -1,246 +0,0 @@ -package iptables - -import ( - "errors" - "log" - "net" - "os" - "syscall" - "time" - "unsafe" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" -) - -func IptablesCapture(ug *ugatesvc.UGate, addr string, in bool) error { - nl, err := net.Listen("tcp", addr) - if err != nil { - log.Println("Failed to listen", err) - return err - } - ipo := &IptablesOut{ - Gate: ug, - } - ipi := &IptablesIn{ - Gate: ug, - } - for { - remoteConn, err := nl.Accept() - ugate.VarzAccepted.Add(1) - if ne, ok := err.(net.Error); ok { - ugate.VarzAcceptErr.Add(1) - if ne.Temporary() { - time.Sleep(100 * time.Millisecond) - continue - } - } - if err != nil { - log.Println("Accept error, closing iptables listener ", err) - return err - } - - go func() { - str := nio.GetStream(remoteConn, remoteConn) - ug.OnStream(str) - defer ug.OnStreamDone(str) - - if in { - ipi.Handle(str) - } else { - ipo.Handle(str) - } - }() - } - - return nil -} - -type IptablesOut struct { - Gate *ugatesvc.UGate -} - -type IptablesIn struct { - Gate *ugatesvc.UGate -} - -func (ipo *IptablesOut) Handle(str *nio.Stream) error { - str.Dest, str.ReadErr = SniffIptables(str) - if str.ReadErr != nil { - return str.ReadErr - } - - // str.Dest is a VIP or real IP. It will be mapped to a real - // destination. - cfg := ipo.Gate.FindRouteOut(str) - if cfg.ForwardTo != "" { - str.Dest = cfg.ForwardTo - } - - str.Route = cfg - str.Type = "ipto" - str.Direction = nio.StreamTypeOut - - str.ReadErr = ipo.Gate.HandleStream(str) - return str.ReadErr -} - -// Similar with Istio ingress capture. Original DST is the intended -// addr and port. -func (ipo *IptablesIn) Handle(str *nio.Stream) error { - - //case ugate.ProtoIPTablesIn: - // // iptables is replacing the conn - process before creating the buffer - // DestAddr is also set as a sideeffect - str.Dest, str.ReadErr = SniffIptables(str) - if str.ReadErr != nil { - return str.ReadErr - } - - // Local routes - redirect or additional manipulation. - cfg := ipo.Gate.FindRouteIn(str) - if cfg.ForwardTo != "" { - str.Dest = cfg.ForwardTo - } - str.Route = cfg - //str.Type = cfg.Protocol - str.Direction = nio.StreamTypeIn - - str.ReadErr = ipo.Gate.HandleStream(str) - return str.ReadErr -} - -// Status: -// - TCP capture with redirect works -// - capture with TPROXY is not possible - TPROXY is on the PREROUTING chain only, -// not touched by output packets. -// https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg -// -// It works great for transparent proxy in a gateway/router - however same can be also done using the TUN -// and routing to the TUN using iptables or other means. - -// Using: https://github.com/Snawoot/transocks/blob/v1.0.0/original_dst_linux.go -// ServeConn is used to serve a single TCP UdpNat. -// See https://github.com/cybozu-go/transocks -// https://github.com/ryanchapman/go-any-proxy/blob/master/any_proxy.go, -// and other examples. -// Based on REDIRECT. -func SniffIptables(str *nio.Stream) (string, error) { - if _, ok := str.Out.(*net.TCPConn); !ok { - return "", errors.New("invalid connection for iptbles") - } - ta, err := getOriginalDst(str.Out.(*net.TCPConn)) - if err != nil { - return "", err - } - str.DestAddr = ta - - return ta.String(), nil -} - -const ( - SO_ORIGINAL_DST = 80 - IP6T_SO_ORIGINAL_DST = 80 -) - -func getsockopt(s int, level int, optname int, optval unsafe.Pointer, optlen *uint32) (err error) { - _, _, e := syscall.Syscall6( - syscall.SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(optname), - uintptr(optval), uintptr(unsafe.Pointer(optlen)), 0) - if e != 0 { - return e - } - return -} - -// Should be used only for REDIRECT capture. -func getOriginalDst(clientConn *net.TCPConn) (rawaddr *net.TCPAddr, err error) { - // test if the underlying fd is nil - remoteAddr := clientConn.RemoteAddr() - if remoteAddr == nil { - err = errors.New("fd is nil") - return - } - - // net.TCPConn.File() will cause the receiver's (clientConn) socket to be placed in blocking mode. - // The workaround is to take the File returned by .File(), do getsockopt() to get the original - // destination, then create a new *net.TCPConn by calling net.Stream.FileConn(). The new TCPConn - // will be in non-blocking mode. What a pain. - clientConnFile, err := clientConn.File() - if err != nil { - return - } - defer clientConnFile.Close() - - fd := int(clientConnFile.Fd()) - if err = syscall.SetNonblock(fd, true); err != nil { - return - } - - // Get original destination - // this is the only syscall in the Golang libs that I can find that returns 16 bytes - // Example result: &{Multiaddr:[2 0 31 144 206 190 36 45 0 0 0 0 0 0 0 0] Interface:0} - // port starts at the 3rd byte and is 2 bytes long (31 144 = port 8080) - // IPv6 version, didn't find a way to detect network family - //addr, err := syscall.GetsockoptIPv6Mreq(int(clientConnFile.Fd()), syscall.IPPROTO_IPV6, IP6T_SO_ORIGINAL_DST) - // IPv4 address starts at the 5th byte, 4 bytes long (206 190 36 45) - v6 := clientConn.LocalAddr().(*net.TCPAddr).IP.To4() == nil - if v6 { - var addr syscall.RawSockaddrInet6 - var len uint32 - len = uint32(unsafe.Sizeof(addr)) - err = getsockopt(fd, syscall.IPPROTO_IPV6, IP6T_SO_ORIGINAL_DST, - unsafe.Pointer(&addr), &len) - if err != nil { - return - } - ip := make([]byte, 16) - for i, b := range addr.Addr { - ip[i] = b - } - pb := *(*[2]byte)(unsafe.Pointer(&addr.Port)) - return &net.TCPAddr{ - IP: ip, - Port: int(pb[0])*256 + int(pb[1]), - }, nil - } else { - var addr syscall.RawSockaddrInet4 - var len uint32 - len = uint32(unsafe.Sizeof(addr)) - err = getsockopt(fd, syscall.IPPROTO_IP, SO_ORIGINAL_DST, - unsafe.Pointer(&addr), &len) - if err != nil { - return nil, os.NewSyscallError("getsockopt", err) - } - ip := make([]byte, 4) - for i, b := range addr.Addr { - ip[i] = b - } - pb := *(*[2]byte)(unsafe.Pointer(&addr.Port)) - return &net.TCPAddr{ - IP: ip, - Port: int(pb[0])*256 + int(pb[1]), - }, nil - } -} - -//func isLittleEndian() bool { -// var i int32 = 0x01020304 -// u := unsafe.Pointer(&i) -// pb := (*byte)(u) -// b := *pb -// return (b == 0x04) -//} - -//var ( -// NativeOrder binary.ByteOrder -//) -// -//func init() { -// if isLittleEndian() { -// NativeOrder = binary.LittleEndian -// } else { -// NativeOrder = binary.BigEndian -// } -//} diff --git a/pkg/iptables/tproxy.go b/pkg/iptables/tproxy.go deleted file mode 100644 index e6fc5b6..0000000 --- a/pkg/iptables/tproxy.go +++ /dev/null @@ -1,157 +0,0 @@ -package iptables - -import ( - "encoding/binary" - "errors" - "fmt" - "log" - "net" - "os" - "syscall" - - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/udp" - - "golang.org/x/net/ipv4" - "golang.org/x/sys/unix" -) - -// WIP: requires root, UDP proxy using orig dest. -// Only useful for inbound - where we already know the dest. - -// To preserve the original srcIP it is also possible to use udp.WriteMsg. - -func NewTproxy(udpNat *udp.UDPGate, addr string) (*TProxyUDP, error) { - var f *os.File - var err error - - f, err = StartUDPTProxyListener(15006) - if err != nil { - log.Println("Error starting TPROXY", err) - return nil, err - } - c, err := net.FileConn(f) - if err != nil { - return nil, err - } - - lu, ok := c.(*net.UDPConn) - if !ok { - return nil, errors.New("failed to cast") - } - - //udpNat.UDPWriter - return &TProxyUDP{con: lu}, nil -} - -// Handle packets received on the tproxy interface. -func (tu *TProxyUDP) BlockingLoop(u ugate.UDPHandler) { - data := make([]byte, 1600) - oob := ipv4.NewControlMessage(ipv4.FlagDst) - //oob := make([]byte, 256) - for { - - n, noob, _, addr, err := tu.con.ReadMsgUDP(data[0:], oob) - if err != nil { - continue - } - - cm4, err := syscall.ParseSocketControlMessage(oob[0:noob]) - origPort := uint16(0) - var origIP net.IP - for _, cm := range cm4 { - if cm.Header.Type == unix.IP_RECVORIGDSTADDR { - // \attention: IPv4 only!!! - // address type, 1 - IPv4, 4 - IPv6, 3 - hostname, only IPv4 is supported now - rawaddr := make([]byte, 4) - // raw IP address, 4 bytes for IPv4 or 16 bytes for IPv6, only IPv4 is supported now - copy(rawaddr, cm.Data[4:8]) - origIP = net.IP(rawaddr) - - // Bigendian is the network bit order, seems to be used here. - origPort = binary.BigEndian.Uint16(cm.Data[2:]) - - } - } - //if cm4.Parse(oob) == nil { - //dst = cm4.Dst - //} - //log.Printf("NOOB %d %d %V %x", noob, flags, cm4, oob[0:noob]) - //if ((cmsg->cmsg_level == SOL_IP) && (cmsg->cmsg_type == IP_RECVORIGDSTADDR)) - //{ - // memcpy (&dstaddr, CMSG_DATA(cmsg), sizeof (dstaddr)); - // dstaddr.sin_family = AF_INET; - //} - - go u.HandleUdp(origIP, origPort, addr.IP, uint16(addr.Port), data[0:n]) - } -} - -// Initialize a port as a TPROXY socket. This can be sent over UDS from the root, and used for -// UDP capture. -func StartUDPTProxyListener(port int) (*os.File, error) { - // TPROXY mode for UDP - alternative is to use REDIRECT and parse - // /proc/net/nf_conntrack - s, err := unix.Socket(unix.AF_INET, unix.SOCK_DGRAM, 0) - if err != nil { - return nil, err - } - - err = unix.SetsockoptInt(s, unix.SOL_SOCKET, unix.SO_REUSEADDR, 1) - if err != nil { - return nil, err - } - - // NET_CAP - err = unix.SetsockoptInt(s, unix.SOL_IP, unix.IP_TRANSPARENT, 1) - if err != nil { - fmt.Println("TRANSPARENT err ", err) - //return err - } - - err = unix.SetsockoptInt(s, unix.SOL_IP, unix.IP_FREEBIND, 1) - if err != nil { - fmt.Println("FREEBIND err ", err) - //return err - } - - err = unix.SetsockoptInt(s, unix.IPPROTO_IP, unix.IP_RECVORIGDSTADDR, 1) - if err != nil { - return nil, err - } - log.Println("Openned TPROXY capture port in TRANSPARENT mode ", port) - err = unix.Bind(s, &unix.SockaddrInet4{ - Port: port, - }) - if err != nil { - log.Println("Error binding ", err) - return nil, err - } - - f := os.NewFile(uintptr(s), "TProxy") - return f, nil -} - -// Handles UDP packets intercepted using TProxy. -// Can send packets preserving original IP/port. -type TProxyUDP struct { - con *net.UDPConn -} - -// UDP write with source address control. -func (tudp *TProxyUDP) WriteTo(data []byte, dstAddr *net.UDPAddr, srcAddr *net.UDPAddr) (int, error) { - - // Attempt to write as UDP - cm4 := new(ipv4.ControlMessage) - cm4.Src = srcAddr.IP - oob := cm4.Marshal() - n, _, err := tudp.con.WriteMsgUDP(data, oob, dstAddr) - if err != nil { - n, err = tudp.con.WriteToUDP(data, dstAddr) - if err != nil { - log.Print("Failed to send DNS ", dstAddr, srcAddr) - } - } - - return n, err // tudp.con.WriteTo(data, dstAddr) -} diff --git a/pkg/local/api.go b/pkg/local/api.go index 6cc6a21..a0dd1f6 100644 --- a/pkg/local/api.go +++ b/pkg/local/api.go @@ -1,15 +1,69 @@ package local import ( + "expvar" "net" "sync" + "time" "github.com/costinm/meshauth" - ug "github.com/costinm/ugate/pkg/ugatesvc" ) +var ( + MetricActiveNetworks = expvar.NewInt("net_active_interfaces") + MetricChangedNetworks = expvar.NewInt("net_changed_interfaces_total") + MetricLLReceived = expvar.NewInt("ll_receive_total") + MetricLLReceivedAck = expvar.NewInt("ll_receive_ack_total") + MetricLLReceiveErr = expvar.NewInt("ll_receive_err_total") + MetricLLTotal = expvar.NewInt("ll_peers") +) + +// Information about a node. +// Sent periodically, signed by the origin - for example as a JWT, or UDP +// proto. +// TODO: map it to Pod, IPFS announce +// TODO: move Wifi discovery to separate package. +type NodeAnnounce struct { + UA string `json:"UA,omitempty"` + + // Non-link local IPs from all interfaces. Includes public internet addresses + // and Wifi IP4 address. Used to determine if a node is directly connected. + IPs []*net.UDPAddr `json:"addrs,omitempty"` + + // Set if the node is an active Android AP. + SSID string `json:"ssid,omitempty"` + + // True if the node is an active Android AP on the interface sending the message. + // Will trigger special handling in link-local - if the receiving interface is also + // an android client. + AP bool `json:"AP,omitempty"` + + Ack bool `json:"ACK,omitempty"` + + // VIP of the direct parent, if this node is connected. + // Used to determine the mesh topology. + Vpn string `json:"Vpn,omitempty"` +} + +type Node struct { + ID string + LastSeen time.Time + + // In seconds since first seen, last 100 + Seen []int `json:"-"` + // Information from the node - from an announce or message. + // Not trusted, self-signed. + NodeAnnounce *NodeAnnounce `json:"info,omitempty"` + LastSeen4 time.Time + Last4 *net.UDPAddr + LastSeen6 time.Time + Last6 *net.UDPAddr +} + // link local announcements,discovery and messaging type LLDiscovery struct { + m sync.RWMutex + Nodes map[string]*Node // Will be updated with the list of active interfaces // by Refresh() calls or provided by Android. @@ -45,8 +99,6 @@ type LLDiscovery struct { // Defaults to 6970 baseListenPort int - gw *ug.UGate - // Listening on * for signed messages // Source for sent messages and multicasts UDPMsgConn *net.UDPConn diff --git a/pkg/local/link_local.go b/pkg/local/link_local.go index 3529a91..40480df 100644 --- a/pkg/local/link_local.go +++ b/pkg/local/link_local.go @@ -14,8 +14,6 @@ import ( "time" "github.com/costinm/meshauth" - "github.com/costinm/ugate" - ug "github.com/costinm/ugate/pkg/ugatesvc" ) var ( @@ -27,24 +25,18 @@ var ( var ( // Received MC announcements from other nodes (include invalid) - regDN = expvar.NewInt("RegD") + regDN = expvar.NewInt("linklocal_received_total") // Error MC announcements from local nodes - regDNE = expvar.NewInt("RegDE") - - // Client requests to check a peer. - regDNC = expvar.NewInt("RegDC") - - // Errors Client requests to check a peer. - regDNCE = expvar.NewInt("RegDCE") + regDNE = expvar.NewInt("linklocal_received_err_total") ) -func NewLocal(gw *ug.UGate, auth *meshauth.MeshAuth) *LLDiscovery { +func NewLocal(port int, auth *meshauth.MeshAuth) *LLDiscovery { return &LLDiscovery{ mcPort: 5227, - udpPort: gw.Config.BasePort + 8, - gw: gw, + udpPort: port, auth: auth, + Nodes: map[string]*Node{}, } } @@ -69,7 +61,7 @@ func ListenUDP(gw *LLDiscovery) { // Called after connection to the VPN has been created. // // Currently used only for Mesh AP chains. -func (gw *LLDiscovery) OnLocalNetworkFunc(node *ugate.Cluster, addr *net.UDPAddr, fromMySTA bool) { +func (gw *LLDiscovery) OnLocalNetworkFunc(node *Node, addr *net.UDPAddr, fromMySTA bool) { //now := time.Now() //add := &net.UDPAddr{IP: addr.IP, Zone: addr.Zone, Port: 5222} @@ -116,7 +108,7 @@ func (gw *LLDiscovery) FixIp6ForHTTP(addr *net.UDPAddr) string { // or IP6 announce. // // Should be called after network changes and announce -func (gw *LLDiscovery) ensureConnectedUp(laddr *net.UDPAddr, node *ugate.Cluster) error { +func (gw *LLDiscovery) ensureConnectedUp(laddr *net.UDPAddr, node *Node) error { //if gw.gw.SSHClientUp != nil { // return nil //} @@ -239,8 +231,8 @@ func mcMessage(gw *LLDiscovery, i *ActiveInterface, isAck bool) []byte { // VPN VIP // my client ssid // - ann := &ugate.NodeAnnounce{ - UA: gw.gw.Auth.Name, + ann := &NodeAnnounce{ + UA: gw.auth.Name, IPs: ips(gw.ActiveInterfaces), //SSID: gw.auth.Config.Conf(gw.auth.Config, "ssid", ""), Ack: isAck, @@ -492,11 +484,13 @@ func unicastReaderThread(gw *LLDiscovery, c net.PacketConn, iface *ActiveInterfa directNode, ann, err := gw.processMCAnnounce(rcv, addr, iface) if err != nil { + MetricLLReceiveErr.Add(1) if err != selfRegister && err != dup { - log.Println("MCDirect: Invalid multicast ", err, addr, n, string(rcv[0:len(rcv)-128])) + log.Println("MCDirect: Invalid multicast ", err, addr, n) } continue } + MetricLLReceived.Add(1) if addr.IP.To4() != nil { if time.Now().Sub(directNode.LastSeen4) < 10*time.Second { @@ -517,8 +511,10 @@ func unicastReaderThread(gw *LLDiscovery, c net.PacketConn, iface *ActiveInterfa } } - log.Println("LL: ACK Received:", directNode.ID, c.LocalAddr(), addr, ann) + MetricLLTotal.Set(int64(len(gw.Nodes))) + log.Println("LL: ACK Received:", directNode.ID, c.LocalAddr(), addr, ann) + MetricLLReceivedAck.Add(1) } } @@ -554,8 +550,9 @@ func (gw *LLDiscovery) multicastReaderThread(c net.PacketConn, iface *ActiveInte directNode, ann, err := gw.processMCAnnounce(rcv, addr, iface) if err != nil { + regDNE.Add(1) if err != selfRegister && err != dup { - log.Println("MCDirect: Invalid multicast ", err, addr, n, string(rcv[0:len(rcv)-128])) + log.Println("MCDirect: ann err ", err, addr, n) } continue } @@ -660,7 +657,7 @@ func (gw *LLDiscovery) HttpGetLLIf(w http.ResponseWriter, r *http.Request) { // // Currently the info is only for debugging - all registration happens in the /register handshake, // using mtls. -func (gw *LLDiscovery) processMCAnnounce(data []byte, addr *net.UDPAddr, iface *ActiveInterface) (*ugate.Cluster, *ugate.NodeAnnounce, error) { +func (gw *LLDiscovery) processMCAnnounce(data []byte, addr *net.UDPAddr, iface *ActiveInterface) (*Node, *NodeAnnounce, error) { dl := len(data) @@ -679,7 +676,6 @@ func (gw *LLDiscovery) processMCAnnounce(data []byte, addr *net.UDPAddr, iface * // Check signature. Verified Public key is the identity err := meshauth.Verify(data[0:dl-64], pub, sig) if err != nil { - log.Println("MCDirect: Signature ", err) return nil, nil, err } @@ -689,15 +685,26 @@ func (gw *LLDiscovery) processMCAnnounce(data []byte, addr *net.UDPAddr, iface * } // Parse the message - ann := &ugate.NodeAnnounce{} + ann := &NodeAnnounce{} err = json.Unmarshal(jsonData, ann) if err != nil { log.Println("MCDirect: Failed to parse ann", err, string(data[0:dl-128])) } now := time.Now() + id := meshauth.PublicKeyBase32SHA(pub) - node := gw.gw.GetOrAddNode(meshauth.IDFromPublicKey(pub)) + gw.activeMutex.RLock() + node := gw.Nodes[id] + gw.activeMutex.RUnlock() + if node == nil { + node = &Node{ + ID: id, + } + gw.activeMutex.Lock() + gw.Nodes[id] = node + gw.activeMutex.Unlock() + } since := int(now.Sub(node.LastSeen) / time.Second) if since > 2 { @@ -709,17 +716,8 @@ func (gw *LLDiscovery) processMCAnnounce(data []byte, addr *net.UDPAddr, iface * } node.NodeAnnounce = ann - // ??? - //node.Announces++ - //if strings.Contains(addr.Zone, "p2p") { - // node.AnnouncesOnP2P++ - //} - //if ann.AP { - // node.AnnouncesFromP2P++ - //} - - // IP4 addresses don't include zone for some reason... + // IP4 addresses don't include zone if addr.Zone != "" && iface != nil && iface.Name != addr.Zone { log.Println("MCDirect: Missmatch iface and GW ", addr, iface) } @@ -792,14 +790,3 @@ func ip4(addrs []net.Addr) net.IP { } return nil } - -//func (lm *LinkLocalRegistry) getIf(zone string) *ActiveInterface { -// lm.activeMutex.Lock() -// defer lm.activeMutex.Unlock() -// a, found := lm.ActiveInterfaces[zone] -// if !found { -// log.Println("Node no longer ActiveInterface ", zone) -// return nil -// } -// return a -//} diff --git a/pkg/local/networks.go b/pkg/local/networks.go index 8663841..29d7567 100644 --- a/pkg/local/networks.go +++ b/pkg/local/networks.go @@ -66,6 +66,7 @@ func (gw *LLDiscovery) RefreshNetworks() { t0 := time.Now() newAct, err := ActiveNetworks(gw) + MetricActiveNetworks.Set(int64(len(newAct))) if err != nil { // In android ActiveNetworks doesn't work, permission denied. @@ -114,12 +115,6 @@ func (gw *LLDiscovery) RefreshNetworks() { if existing.unicastUdpServer4 != nil { existing.unicastUdpServer4.Close() } - //if existing.tcpListener != nil { - // existing.tcpListener.Close() - //} - //if existing.multicastUdpServer != nil { - // existing.multicastUdpServer.Close() - //} if existing.multicastRegisterConn != nil { existing.multicastRegisterConn.Close() } @@ -260,7 +255,7 @@ func (gw *LLDiscovery) RefreshNetworks() { // (at least on the same zone that changed) if changed { go gw.AnnounceMulticast() - + MetricChangedNetworks.Add(1) log.Println("MCDirect: RefreshNetworks", time.Since(t0), time.Since(t1), names) } @@ -325,10 +320,10 @@ func ActiveNetworks(gw *LLDiscovery) (map[string]*ActiveInterface, error) { } a := &ActiveInterface{ - Name: ifi.Name, - IP6LL: ip, - IP4: ip4, - IPPub: ippub, + Name: ifi.Name, + IP6LL: ip, + IP4: ip4, + IPPub: ippub, iface: &ifi, } anets[ifi.Name] = a diff --git a/ugated/pkg/lwip/api.go b/pkg/lwip/api.go similarity index 93% rename from ugated/pkg/lwip/api.go rename to pkg/lwip/api.go index 052d308..3548be3 100644 --- a/ugated/pkg/lwip/api.go +++ b/pkg/lwip/api.go @@ -10,7 +10,7 @@ import ( type TunConfig struct { Name string - Sniff bool + Sniff bool UDPHandler UDPHandler TCPHandler TUNHandler @@ -29,7 +29,6 @@ type UDPHandler interface { data []byte) } - // Interface implemented by TUNHandler. // Important: for android the system makes sure tun is the default route, but // packets from the VPN app are excluded. @@ -38,14 +37,13 @@ type UDPHandler interface { // packets from istio-proxy, and use 2 routing tables. // type TUNHandler interface { - HandleTUN(conn net.Conn, target *net.TCPAddr, la *net.TCPAddr) error + HandleTUN(conn net.Conn, target *net.TCPAddr, la *net.TCPAddr) } type CloseWriter interface { CloseWrite() error } - // If NET_CAP or owner, open the tun. func OpenTun(ifn string) (io.ReadWriteCloser, error) { config := water.Config{ diff --git a/pkg/lwip/go.mod b/pkg/lwip/go.mod new file mode 100644 index 0000000..4cd3c74 --- /dev/null +++ b/pkg/lwip/go.mod @@ -0,0 +1,17 @@ +module github.com/costinm/ugate/pkg/ext/lwip + +go 1.21 + +require ( + github.com/costinm/ugate v0.0.0-20221024013023-789def6d5dde + github.com/eycorsican/go-tun2socks v1.16.11 + github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 +) + +require ( + github.com/costinm/hbone v0.0.0-20221011174620-f25926c0b194 // indirect + github.com/costinm/meshauth v0.0.0-20221013185453-bb5aae6632f8 // indirect + golang.org/x/net v0.1.0 // indirect + golang.org/x/sys v0.1.0 // indirect + golang.org/x/text v0.4.0 // indirect +) diff --git a/ugated/pkg/lwip/tun_capture_lwip.go b/pkg/lwip/tun_capture_lwip.go similarity index 97% rename from ugated/pkg/lwip/tun_capture_lwip.go rename to pkg/lwip/tun_capture_lwip.go index 4094113..091c0b6 100644 --- a/ugated/pkg/lwip/tun_capture_lwip.go +++ b/pkg/lwip/tun_capture_lwip.go @@ -15,6 +15,8 @@ const ( ) // LWIPTun adapts the LWIP interfaces - in particular UDPConn +// +// Implements UDPWriter (defined in many packages) type LWIPTun struct { lwip core.LWIPStack tcpHandler TUNHandler diff --git a/pkg/oidc/istio-auth-oidc.go b/pkg/oidc/istio-auth-oidc.go deleted file mode 100644 index a841f40..0000000 --- a/pkg/oidc/istio-auth-oidc.go +++ /dev/null @@ -1,231 +0,0 @@ -package oidc - -import ( - "context" - "fmt" - "strings" - - "github.com/coreos/go-oidc" -) - -// WIP: Minimal implementatio of OIDC, matching K8S. Other helpers for platform-specific tokens. -// Also includes JWT rule support based on Istio API - -// A better option is github.com/coreos/go-oidc, which depends on gopkg.in/square/go-jose.v2 - -// In GKE, iss: format is https://container.googleapis.com/v1/projects/$PROJECT/locations/$LOCATION/clusters/$CLUSTER -// and the discovery doc is relative (i.e. standard). The keys are -// $ISS/jwks -// -// GCP also uses (https://github.com/GoogleCloudPlatform/secrets-store-csi-driver-provider-gcp/blob/v0.2.0/auth/auth.go): -// https://securetoken.googleapis.com/v1/identitybindingtoken -// "serviceAccount:.svc.id.goog[/]" -// -// In Istio, the WorkloadID token can be exchanged for access tokens: -// POST https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/ -// service-@gcp-sa-meshdataplane.iam.gserviceaccount.com:generateAccessToken -// Content-Type: application/json -// Authorization: Bearer -// { -// "Delegates": [], -// "Scope": [ -// https://www.googleapis.com/auth/cloud-platform -// ], -// } -// -// curl http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/my-gsa@my-project.iam.gserviceaccount.com/token" -// -H'Metadata-Flavor:Google' -// -// Access tokens: -// https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token -// POST https://securetoken.googleapis.com/v1/token -// grant_type=authorization_code&code=ID_TOKEN -// grant_type=refresh_token&refresh_token=TOKEN -// Resp: { -// "access_token": string, -// "expires_in": string, -// "token_type": string, -// "refresh_token": string, -//} -// -// - -// JWTRule - from istio API, as json. -type JWTRule struct { - - // Example: https://foobar.auth0.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). - // that are allowed to access. A JWT containing any of these - // audiences will be accepted. - // - // The service name will be accepted if audiences is empty. - // - // Example: - // - // ```yaml - // audiences: - // - bookstore_android.apps.example.com - // bookstore_web.apps.example.com - // ``` - Audiences []string `protobuf:"bytes,2,rep,name=audiences,proto3" json:"audiences,omitempty"` - - // URL of the provider's public key set to validate signature of the - // JWT. See [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata). - // - // Optional if the key set document can either (a) be retrieved from - // [OpenID - // Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html) of - // the issuer or (b) inferred from the email domain of the issuer (e.g. a - // Google service account). - // - // Example: `https://www.googleapis.com/oauth2/v1/certs` - // - // Note: Only one of jwks_uri and jwks should be used. jwks_uri will be ignored if it does. - JwksUri string `protobuf:"bytes,3,opt,name=jwks_uri,json=jwksUri,proto3" json:"jwks_uri,omitempty"` - - // JSON Web Key Set of public keys to validate signature of the JWT. - // See https://auth0.com/docs/jwks. - // - // Note: Only one of jwks_uri and jwks should be used. jwks_uri will be ignored if it does. - //Jwks string `protobuf:"bytes,10,opt,name=jwks,proto3" json:"jwks,omitempty"` - - // List of header locations from which JWT is expected. For example, below is the location spec - // if JWT is expected to be found in `x-jwt-assertion` header, and have "Bearer " prefix: - // ``` - // fromHeaders: - // - name: x-jwt-assertion - // prefix: "Bearer " - // ``` - //FromHeaders []*JWTHeader `protobuf:"bytes,6,rep,name=from_headers,json=fromHeaders,proto3" json:"from_headers,omitempty"` - // List of query parameters from which JWT is expected. For example, if JWT is provided via query - // parameter `my_token` (e.g /path?my_token=), the config is: - // ``` - // fromParams: - // - "my_token" - // ``` - //FromParams []string `protobuf:"bytes,7,rep,name=from_params,json=fromParams,proto3" json:"from_params,omitempty"` - - // This field specifies the header name to output 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 emitted. - // OutputPayloadToHeader string `protobuf:"bytes,8,opt,name=output_payload_to_header,json=outputPayloadToHeader,proto3" json:"output_payload_to_header,omitempty"` - - // If set to true, the orginal token will be kept for the ustream request. Default is false. - //ForwardOriginalToken bool `protobuf:"varint,9,opt,name=forward_original_token,json=forwardOriginalToken,proto3" json:"forward_original_token,omitempty"` -} - -type discDoc struct { - Issuer string `json:"issuer"` - AuthURL string `json:"authorization_endpoint"` - TokenURL string `json:"token_endpoint"` - JWKSURL string `json:"jwks_uri"` - UserInfoURL string `json:"userinfo_endpoint"` - Algorithms []string `json:"id_token_signing_alg_values_supported"` -} - -type userInfo struct { - Subject string `json:"sub"` - Profile string `json:"profile"` - Email string `json:"email"` -} - -type JwtAuthenticator struct { - trustDomain string - audiences []string - verifier *oidc.IDTokenVerifier -} - -// newJwtAuthenticator is used when running istiod outside of a cluster, to validate the tokens using OIDC -// K8S is created with --service-account-issuer, service-account-signing-key-file and service-account-api-audiences -// which enable OIDC. -func NewJwtAuthenticator(jwtRule JWTRule, trustDomain string) (*JwtAuthenticator, error) { - issuer := jwtRule.Issuer - jwksURL := jwtRule.JwksUri - // The key of a JWT issuer may change, so the key may need to be updated. - // Based on https://godoc.org/github.com/coreos/go-oidc#NewRemoteKeySet, - // the oidc library handles caching and cache invalidation. Thus, the verifier - // is only created once in the constructor. - var verifier *oidc.IDTokenVerifier - if len(jwksURL) == 0 { - // OIDC discovery is used if jwksURL is not set. - provider, err := oidc.NewProvider(context.Background(), issuer) - // OIDC discovery may fail, e.g. http request for the OIDC server may fail. - if err != nil { - return nil, fmt.Errorf("failed at creating an OIDC provider for %v: %v", issuer, err) - } - verifier = provider.Verifier(&oidc.Config{SkipClientIDCheck: true}) - } else { - keySet := oidc.NewRemoteKeySet(context.Background(), jwksURL) - verifier = oidc.NewVerifier(issuer, keySet, &oidc.Config{SkipClientIDCheck: true}) - } - return &JwtAuthenticator{ - trustDomain: trustDomain, - verifier: verifier, - audiences: jwtRule.Audiences, - }, nil -} - -const ( - // IdentityTemplate is the SPIFFE format template of the identity. - IdentityTemplate = "spiffe://%s/ns/%s/sa/%s" -) - -func (j *JwtAuthenticator) Authenticate(ctx context.Context, bearerToken string) ([]string, error) { - idToken, err := j.verifier.Verify(ctx, bearerToken) - if err != nil { - return nil, fmt.Errorf("failed to verify the JWT token (error %v)", err) - } - - sa := &JwtPayload{} - - // "aud" for trust domain, "sub" has "system:serviceaccount:$namespace:$serviceaccount". - // in future trust domain may use another field as a standard is defined. - if err := idToken.Claims(&sa); err != nil { - return nil, fmt.Errorf("failed to extract claims from WorkloadID token: %v", err) - } - - if !strings.HasPrefix(sa.Sub, "system:serviceaccount") { - return nil, fmt.Errorf("invalid sub %v", sa.Sub) - } - - parts := strings.Split(sa.Sub, ":") - ns := parts[2] - ksa := parts[3] - if !checkAudience(sa.Aud, j.audiences) { - return nil, fmt.Errorf("invalid audiences %v", sa.Aud) - } - - return []string{fmt.Sprintf(IdentityTemplate, j.trustDomain, ns, ksa)}, nil -} - -// checkAudience() returns true if the audiences to check are in -// the expected audiences. Otherwise, return false. -func checkAudience(audToCheck []string, audExpected []string) bool { - for _, a := range audToCheck { - for _, b := range audExpected { - if a == b { - return true - } - } - } - return false -} - -type JwtPayload struct { - // Aud is the expected audience, defaults to istio-ca - but is based on istiod.yaml configuration. - // If set to a different value - use the value defined by istiod.yaml. Env variable can - // still override - Aud []string `json:"aud"` - - // Exp is not currently used - we don't use the token for authn, just to determine k8s settings - Exp int `json:"exp"` - - // Issuer - configured by K8S admin for projected tokens. Will be used to verify all tokens. - Iss string `json:"iss"` - - Sub string `json:"sub"` -} diff --git a/ugated/pkg/quic/envoy_quic.yaml b/pkg/quic/envoy_quic.yaml similarity index 100% rename from ugated/pkg/quic/envoy_quic.yaml rename to pkg/quic/envoy_quic.yaml diff --git a/pkg/quic/go.mod b/pkg/quic/go.mod new file mode 100644 index 0000000..468b9a7 --- /dev/null +++ b/pkg/quic/go.mod @@ -0,0 +1,28 @@ +module github.com/costinm/ugate/pkg/quic + +go 1.21 + +replace github.com/costinm/ugate => ../.. + +require ( + github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 + github.com/costinm/ugate v0.0.0-00010101000000-000000000000 + github.com/quic-go/quic-go v0.40.1 +) + +require ( + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect + github.com/onsi/ginkgo/v2 v2.9.5 // indirect + github.com/quic-go/qpack v0.4.0 // indirect + github.com/quic-go/qtls-go1-20 v0.4.1 // indirect + go.uber.org/mock v0.3.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.16.0 // indirect +) diff --git a/pkg/quic/mux.go b/pkg/quic/mux.go new file mode 100644 index 0000000..515a860 --- /dev/null +++ b/pkg/quic/mux.go @@ -0,0 +1,148 @@ +package quic + +import ( + "context" + + "github.com/costinm/ugate" + "github.com/quic-go/quic-go" + + //"io" + "log" + "net" +) + +// QuicMUX is a mux to a specific node. May be accepted or dialed. +// Equivalent with quic/h3/client.go ( when dialing ), and Quic server when accepting. +type QuicMUX struct { + // Remote - has an WorkloadID and Addr. Set for client connections. + n *ugate.MeshCluster + client bool + + // Can be accepted or dialed - the protocol is symmetric. + s quic.EarlyConnection + +} + +const errorNoError = 0x100 +var Debug = false + +func (ugs *QuicMUX) Close() error { + if Debug { + log.Println("H3: MUX close ", ugs.n.ID) + } + return ugs.s.CloseWithError(0, "") +} + + +//func (ugs *QuicMUX) DialStream(ctx context.Context, addr string, inStream util.Stream) (util.Stream, error) { +// //if UseRawStream { +// s, err := ugs.s.OpenStream() +// if err != nil { +// return nil, err +// } +// +// str := util.GetStream(s, s) +// if inStream != nil && inStream.RequestHeader() != nil { +// for k, v := range inStream.RequestHeader() { +// str.Header()[k] = v +// } +// } +// +// str.Header().Set("dest", addr) +// err = str.SendHeader(s, str.Header()) +// if err != nil { +// return nil, err +// } +// +// // RoundTripStart sending +// if inStream != nil { +// go func() { +// // Equivalent with proxyToClient. +// str.CopyBuffered(s, inStream, true) +// // TODO: do something on err, done +// log.Println("QUIC out - copy reader close ", str.StreamId, addr) +// +// }() +// } +// +// err = str.ReadHeader(s) +// if err != nil { +// return nil, err +// } +// log.Println("QUIC out stream res", str.StreamId, addr, str.InHeader) +// +// return str, nil +//} + +// DialContext uses the current association to open a stream. +// +// Note that H3 is handled separately - this is an L4 use of QUIC, similar to SSH. +// +func (ugs *QuicMUX) DialContext(ctx context.Context, net, addr string) (net.Conn, error) { + str, err := ugs.s.OpenStream() + if err != nil { + return nil, err + } + + return &QuicNetCon{Stream: str}, nil +} + +type QuicNetCon struct { + quic.Stream +} + +func (q QuicNetCon) LocalAddr() net.Addr { + //TODO implement me + panic("implement me") +} + +func (q QuicNetCon) RemoteAddr() net.Addr { + //TODO implement me + panic("implement me") +} + +//// RoundTrip is used for forwarding HTTP connections back to the client (normal) or +//// server ( reverse ). +//func (ugs *QuicMUX) RoundTrip(request *http.Request) (*http.Response, error) { +// // make sure the request will be accepted +// request.URL.Scheme = "https" +// request.URL.Host = ugs.hostname +// if Debug { +// if ugs.n != nil { +// log.Println("H3: RT-start", ugs.n.ID, request.URL, ugs.client) +// } else { +// log.Println("H3: RT-start", request.URL, ugs.client) +// } +// } +// var res *http.Response +// var err error +// if ugs.rt != nil { +// res, err = ugs.rt.RoundTrip(request) +// } else { +// // Replacement for the lack of support in QUIC for using the H3 request programmatically. +// // This only works with h3s servers. +// s := util.NewStream() +// s.Request = request +// s.In = request.Body +// +// rs, err1 := ugs.DialStream(request.Context(), request.URL.Host, s) +// if err1 != nil { +// return nil, err1 +// } +// +// res = &http.Response{ +// Body: rs, // rs.In +// Header: rs.Header(), +// } +// } +// if Debug { +// log.Println("H3: RT-done", request.URL, ugs.client, err) +// if err == nil { +// go func() { +// <-request.Context().Done() +// log.Println("H3: RT-ctx-done", request.URL) +// }() +// } +// } +// return res, err +//} diff --git a/ugated/pkg/quic/quic.go b/pkg/quic/quic.go similarity index 52% rename from ugated/pkg/quic/quic.go rename to pkg/quic/quic.go index 9bb97a3..5d68957 100644 --- a/ugated/pkg/quic/quic.go +++ b/pkg/quic/quic.go @@ -7,53 +7,32 @@ import ( "log" "net" "net/http" + "os" "time" - "github.com/costinm/hbone/nio" "github.com/costinm/meshauth" + "github.com/costinm/ssh-mesh/nio" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/lucas-clemente/quic-go" - "github.com/lucas-clemente/quic-go/http3" -) -func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - qa := New(ug) + "github.com/quic-go/quic-go" - return func(ug *ugatesvc.UGate) { - qa.Start() - } - }) -} + "github.com/quic-go/webtransport-go" + +) // Quic is the adapter to QUIC/H3/MASQUE for uGate. -// -// Implements: -// - MuxDialer -// -// # Will start a H3 server and dispatch streams and H3 requests to uGate -// -// Integration with Quic library: -// - fork to expose few internal methods needed -// - low level UDP will be multiplexed with STUN/TURN - feature is supported upstream -// - using the raw QUIC library for streams, to get access to the reverse path -// - main RoundTripper is uGate, this acts as 'client.go'. -// -// TODO: Datagram will also be dispatched - either as UDP or as Webpush messages -// TODO: define 'webpush over MASQUE' -// TODO: also MASQUE-IP, if TUN support is enabled ( Android ) type Quic struct { Auth *meshauth.MeshAuth - Port int // Incoming streams are mapped to HTTP - HTTPHandler http.Handler - server *http3.Server + //HTTPHandler http.Handler + //server *http3.Server // UgateSVC - for node tracking - UG *ugatesvc.UGate + UG *ugate.UGate tlsServerConfig *tls.Config + + l *meshauth.PortListener } // DataSreamer is implemented by response writer on server side to take over the stream. @@ -61,24 +40,42 @@ type DataStreamer interface { DataStream() quic.Stream } -func New(ug *ugatesvc.UGate) *Quic { - //os.Setenv("QUIC_GO_LOG_LEVEL", "DEBUG") +// Not in init +func InitQuic(gate *ugate.UGate) { + //ugate.Modules["quic"] = func(gate *ugate.UGate) { + gate.ListenerProto["quic"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + qa := New(gate, ll) + + gate.StartFunctions = append(gate.StartFunctions, func(ug *ugate.UGate) { + qa.Start() + }) + return nil + } + + // Only for H3 server ! + gate.ListenerProto["webtransport"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + wts := webtransport.Server{} + gate.Mux.HandleFunc("/.well-known/webtransport", func(writer http.ResponseWriter, request *http.Request) { + // expects CONNECT - can't be handled by Mux + wts.Upgrade(writer, request) + }) + return nil + } + +} + +func New(ug *ugate.UGate, ll *meshauth.PortListener) *Quic { + os.Setenv("QUIC_GO_LOG_LEVEL", "DEBUG") - // We will only register a single QUIC server by default, and a factory for cons - port := ug.Config.BasePort + ugate.PORT_BTS - //if os.Getuid() == 0 { - // port = 443 - //} qa := &Quic{ - Port: port, + l: ll, Auth: ug.Auth, - HTTPHandler: ug.H2Handler, + //HTTPHandler: ug.H2Handler, UG: ug, } - ug.MuxDialers["quic"] = qa - mtlsServerConfig := qa.Auth.GenerateTLSConfigServer() + mtlsServerConfig := qa.Auth.GenerateTLSConfigServer(true) // Overrides mtlsServerConfig.NextProtos = []string{"h3r", "h3-34"} @@ -89,6 +86,7 @@ func New(ug *ugatesvc.UGate) *Quic { for i, certEntry := range rawCerts { certs[i], _ = x509.ParseCertificate(certEntry) } + log.Println("H3: verifyPeerCertificate", certs) return nil } mtlsServerConfig.VerifyConnection = func(state tls.ConnectionState) error { @@ -125,6 +123,41 @@ func New(ug *ugatesvc.UGate) *Quic { return qa } + +// Either direction - h3 is indicated by a header frame. +// Format is: i(type) i(len) payload[len] +// Type: data(0), header(1), +func (q *Quic) handleRaw(qs quic.Stream) { + str := nio.GetStream(qs, qs) + + err := str.ReadHeader(qs) + if err != nil { + log.Println("Receive error ", err) + return + } + + str.Dest = str.InHeader.Get("dest") + log.Println("QUIC stream IN", str.StreamId, str.Dest) + + str.PostDialHandler = func(conn net.Conn, err error) { + str.Header().Set("status", "200") + str.SendHeader(qs, str.Header()) + log.Println("QUIC stream IN rcv", str.StreamId, str.InHeader) + } + + nc, err := q.UG.Dial("tcp", str.Dest) + if err != nil { + str.PostDialHandler(nil, err) + return + } + str.PostDialHandler(nil, nil) + + nio.Proxy(nc, str, str, str.Dest) + +} + + + func (q *Quic) quicConfig() *quic.Config { return &quic.Config{ //RequestConnectionIDOmission: false, @@ -135,7 +168,7 @@ func (q *Quic) quicConfig() *quic.Config { HandshakeIdleTimeout: 4 * time.Second, // default 10 // make sure we don't get 0. - ConnectionIDLength: 4, + //ConnectionIDLength: 4, MaxIncomingStreams: 30000, MaxIncomingUniStreams: 30000, @@ -153,7 +186,9 @@ func (q *Quic) quicConfig() *quic.Config { } } -func (qd *Quic) DialMux(ctx context.Context, node *ugate.Cluster, meta http.Header, ev func(t string, stream *nio.Stream)) (ugate.Muxer, error) { + + +func (qd *Quic) DialMux(ctx context.Context, node *ugate.MeshCluster) (*QuicMUX, error) { tlsConf := &tls.Config{ // VerifyPeerCertificate used instead InsecureSkipVerify: true, @@ -174,49 +209,24 @@ func (qd *Quic) DialMux(ctx context.Context, node *ugate.Cluster, meta http.Head } // session.Context() is canceled when the session is closed. - session, err := quic.DialEarlyContext(ctx, udpConn, udpAddr, addr, tlsConf, qd.quicConfig()) + session, err := quic.DialEarly(ctx, udpConn, udpAddr, tlsConf, qd.quicConfig()) if err != nil { return nil, err } - var rt http.RoundTripper + //var rt http.RoundTripper // TODO: use node.WorkloadID if available - Addr is a temp address and may // be shared. - tok := qd.Auth.VAPIDToken(node.ID) + //tok := qd.Auth.VAPIDToken(node.ID) - session.SendMessage([]byte(tok)) + //session.SendDatagram([]byte(tok)) - //if !UseRawStream { - // // Exposed in fork only. - // // Will call OpenUniStream, AcceptUniStream and OpenStream - // rt = http3.NewClient(node.WorkloadID, session, qd.quicConfig()) - // - // // TODO: use MASQUE ( with extension headers ? ) - // initReq, _ := http.NewRequest("GET", "https://"+node.WorkloadID+"/_dm/id/Q/"+qd.Auth.WorkloadID, nil) - // initReq.Header.StartListener("authorization", tok) - // res, err := rt.RoundTrip(initReq) - // if err != nil { - // return nil, err - // } - // // TODO: parse the data, use MASQUE format for handshake - // _, _ = ioutil.ReadAll(res.Body) - // res.Body.Close() - // - // if res != nil && res.StatusCode == 200 { - // log.Println("H3R: start on ", qd.Auth.WorkloadID, "for", node.WorkloadID, session.RemoteAddr()) - // } else { - // log.Println("H3: start on ", qd.Auth.WorkloadID, "for", node.WorkloadID, session.RemoteAddr()) - // } - //} go func() { <-session.Context().Done() log.Println("H3: stop on ", qd.Auth.ID, "for", node.ID, session.RemoteAddr()) - node.Muxer = nil - // TODO: anything to do on close ? - qd.UG.OnMuxClose(node) }() - ugc := &QuicMUX{s: session, rt: rt, hostname: node.ID, client: true} + ugc := &QuicMUX{s: session, n: node, client: true} //decoder := qpack.NewDecoder(nil) go func() { @@ -226,32 +236,18 @@ func (qd *Quic) DialMux(ctx context.Context, node *ugate.Cluster, meta http.Head log.Println("H3: acceptStream err", err) return } - - //if UseRawStream { go qd.handleRaw(str) - //} else { - // // Treat the remote (server) originated stream as a H3 reverse request. - // // The server will process the session and dispatch to a handler. - // go qd.server.HandleRequest(session, str, decoder, func() { - // // Called when done - // }) - //} } }() go qd.handleMessages(ugc) - node.Muxer = ugc + node.Dialer = ugc return ugc, nil } -// will eventually support the MASQUE protocol, multiplexing -// other proxy protocols over H3. - func (qd *Quic) Start() error { - // TODO: MUX, same port as client side (for better STUN) - c, err := net.ListenUDP("udp", &net.UDPAddr{ - Port: qd.Port, + Port: int(qd.l.GetPort()), }) if err != nil { log.Println("H3: Failed to listen quic ", err) @@ -263,6 +259,7 @@ func (qd *Quic) Start() error { log.Println("H3: Failed to start server ", err) return err } + go func() { for { s, err := l.Accept(context.Background()) @@ -279,7 +276,6 @@ func (qd *Quic) Start() error { // not blocking qd.handleMessages(ugc) - //if UseRawStream { go func() { for { str, err := s.AcceptStream(context.Background()) @@ -290,25 +286,6 @@ func (qd *Quic) Start() error { go qd.handleRaw(str) } }() - //} else { - // // TODO: we need a way to pass the mux on the first - // // request ( or the WorkloadID request ) to associate it with the node. - // // At this point we don't have the identity. - // // Currently we use x-quic-session as experiment. - // go func() { - // qd.server.HandleConn(s) - // - // if ugc.n != nil { - // ugc.n.Muxer = nil - // log.Println("H3R: stop on ", qd.Auth.WorkloadID, "for", ugc.n.WorkloadID, s.RemoteAddr()) - // qd.UG.OnMuxClose(ugc.n) - // } else { - // log.Println("H3: stop on ", qd.Auth.WorkloadID, s.RemoteAddr()) - // } - // - // }() - //} - } }() @@ -319,9 +296,8 @@ func (qd *Quic) Start() error { // Will call the cancel function when done. func (qd *Quic) handleMessages(ugc *QuicMUX) { go func() { - var n *ugate.Cluster for { - d, err := ugc.s.ReceiveMessage() + d, err := ugc.s.ReceiveDatagram(context.Background()) if err != nil { log.Println("H3: ReceiveMessage err ", err) return @@ -329,23 +305,7 @@ func (qd *Quic) handleMessages(ugc *QuicMUX) { if len(d) == 0 { continue } - if d[0] == 'v' { // 'vapid t= ,k= - jwt := string(d) - _, pub, err := meshauth.CheckVAPID(jwt, time.Now()) - if err == nil { - remoteID := meshauth.IDFromPublicKeyBytes(pub) - log.Println("H3R: start", remoteID, "on", qd.UG.Auth.ID) - n = qd.UG.GetOrAddNode(remoteID) - - ugc.n = n - ugc.hostname = n.ID - //ugc.rt = http3.NewClient(remoteID, ugc.s, qd.quicConfig()) - - n.Muxer = ugc - } - continue - } - // TODO: other message types + log.Println("Received QUIC message", string(d)) } }() } diff --git a/ugated/pkg/quic/quic_raw.go b/pkg/quic/quic_raw.go similarity index 100% rename from ugated/pkg/quic/quic_raw.go rename to pkg/quic/quic_raw.go diff --git a/ugated/pkg/quic/quic_test.go b/pkg/quic/quic_test.go similarity index 51% rename from ugated/pkg/quic/quic_test.go rename to pkg/quic/quic_test.go index cb76545..1875286 100644 --- a/ugated/pkg/quic/quic_test.go +++ b/pkg/quic/quic_test.go @@ -7,28 +7,26 @@ import ( "testing" "time" + "github.com/costinm/meshauth" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/test" + "github.com/costinm/ugate/pkg/test" ) func BenchmarkUGateQUIC(b *testing.B) { // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{BasePort: 6300, NoAccessLog: true, Name: "alice"}, func(gate *ugatesvc.UGate) { - New(gate) - }) + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{BasePort: 6300}) + New(alice, &meshauth.PortListener{Address: ":6301"}) // In memory config store. All options - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, NoAccessLog: true, Name: "bob"}, func(bob *ugatesvc.UGate) { - qb := New(bob) - qb.Start() - }) + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{BasePort: 6400}) + qb := New(bob, &meshauth.PortListener{Address: ":6401"}) + qb.Start() log.Println(bob.Auth.VIP6) - bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugate.PORT_BTS) + bobAddr := "localhost:" + strconv.Itoa(bob.BasePort+7) // Alice dials a MUX to bob - bobNode := alice.GetOrAddNode(bob.Auth.ID) + bobNode, _ := alice.Cluster(nil, bob.Auth.ID) bobNode.Addr = bobAddr _, err := alice.DialMUX(context.Background(), "quic", bobNode, nil) if err != nil { @@ -64,30 +62,32 @@ func BenchmarkUGateQUIC(b *testing.B) { func TestQuic(t *testing.T) { // Fixed key, config from filesystem. Base is 14000 - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{BasePort: 6300, Name: "alice"}, func(gate *ugatesvc.UGate) { - New(gate) - }) + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{BasePort: 6300}) + New(alice, &meshauth.PortListener{Address: ":6307"}) // In memory config store. All options - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{BasePort: 6400, Name: "bob"}, func(bob *ugatesvc.UGate) { - qb := New(bob) - qb.Start() - }) - log.Println(bob.Auth.VIP6) + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{BasePort: 6400}) + qb := New(bob, &meshauth.PortListener{Address: ":6407"}) + bob.Start() + qb.Start() - bobAddr := "localhost:" + strconv.Itoa(bob.Config.BasePort+ugate.PORT_BTS) - // Alice dials a MUX to bob - bobNode := alice.GetOrAddNode(bob.Auth.ID) + bobAddr := "localhost:" + strconv.Itoa(bob.BasePort+7) + + // Add a cluster to alice with bob's ID, address and protocol + bobNode, _ := alice.Cluster(nil, bob.Auth.ID) bobNode.Addr = bobAddr - _, err := alice.DialMUX(context.Background(), "quic", bobNode, nil) - if err != nil { - t.Fatal("Error dialing mux", err) - } + bobNode.Proto = "quic" + + //_, err := alice.DialMUX(context.Background(), "quic", bobNode, nil) + //if err != nil { + // t.Fatal("Error dialing mux", err) + //} // Alice -> QUIC -> Bob -> Echo t.Run("egress", func(t *testing.T) { // Using DialContext interface - mesh address will use the node. + // The port is the echo port on Bob. con, err := alice.DialContext(context.Background(), "tcp", bob.Auth.ID+":6412") if err != nil { t.Fatal(err) @@ -95,34 +95,34 @@ func TestQuic(t *testing.T) { _, err = test.CheckEcho(con, con) }) - t.Run("egress10", func(t *testing.T) { - for i := 0; i < 10; i++ { - // Using DialContext interface - mesh address will use the node. - con, err := alice.DialContext(context.Background(), "tcp", bob.Auth.ID+":6412") - if err != nil { - t.Fatal(err) - } - _, err = test.CheckEcho(con, con) - } - }) - - t.Run("egress10p", func(t *testing.T) { - ch := make(chan string, 10) - for i := 0; i < 10; i++ { - go func() { - // Using DialContext interface - mesh address will use the node. - con, err := alice.DialContext(context.Background(), "tcp", bob.Auth.ID+":6412") - if err != nil { - t.Fatal(err) - } - _, err = test.CheckEcho(con, con) - ch <- "" - }() - } - for i := 0; i < 10; i++ { - <-ch - } - }) + //t.Run("egress10", func(t *testing.T) { + // for i := 0; i < 10; i++ { + // // Using DialContext interface - mesh address will use the node. + // con, err := alice.DialContext(context.Background(), "tcp", bob.Auth.ID+":6412") + // if err != nil { + // t.Fatal(err) + // } + // _, err = test.CheckEcho(con, con) + // } + //}) + // + //t.Run("egress10p", func(t *testing.T) { + // ch := make(chan string, 10) + // for i := 0; i < 10; i++ { + // go func() { + // // Using DialContext interface - mesh address will use the node. + // con, err := alice.DialContext(context.Background(), "tcp", bob.Auth.ID+":6412") + // if err != nil { + // t.Fatal(err) + // } + // _, err = test.CheckEcho(con, con) + // ch <- "" + // }() + // } + // for i := 0; i < 10; i++ { + // <-ch + // } + //}) // Bob -> H3R -> Alice -> Echo // Bob did not dial Alice, doesn't have the address ( and alice didn't start server ) diff --git a/pkg/sni/sni.go b/pkg/sni/sni.go new file mode 100644 index 0000000..e6263ea --- /dev/null +++ b/pkg/sni/sni.go @@ -0,0 +1,71 @@ +package sni + +import ( + "context" + "errors" + "net" + "strings" + + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate" +) + +type SNIHandler struct { + UGate *ugate.UGate + Dialer net.Dialer +} + +// HandleSNIConn implements SNI based routing. This can be used for compat +// with Istio. Was original method to tunnel for serverless. +// +// This can be used for a legacy CNI to UGate bridge. The old Istio client expects an mTLS connection +// to the other end - the UGate proxy is untrusted. +func (snih *SNIHandler) HandleConn(conn net.Conn) error { + hb := snih.UGate + + s := nio.NewBufferReader(conn) + defer conn.Close() + defer s.Buffer.Recycle() + + cn, sni, err := nio.SniffClientHello(s) + if err != nil { + return err + } + if cn == nil { + // First bytes are not TLS + return errors.New("Not TLS") + } + + // At this point we have a SNI service name. Need to convert it to a real service + // name, RoundTripStart and proxy. + + addr := sni + ":443" + // Based on SNI, make a hbone request, using JWT auth. + if strings.HasPrefix(sni, "outbound_.") { + // Current Istio SNI looks like: + // + // outbound_.9090_._.prometheus-1-prometheus.mon.svc.cluster.local + // We need to map it to a cloudrun external address, add token based on the audience, and + // make the call using the tunnel. + // + // Also supports the 'natural' form and egress + + // + // + parts := strings.SplitN(sni, ".", 4) + remoteService := parts[3] + // TODO: extract 'version' from URL, convert it to cloudrun revision ? + addr = net.JoinHostPort(remoteService, parts[1]) + } + + ctx := context.Background() + nc, err := hb.DialContext(ctx, "tcp", addr) + if err != nil { + return err + } + err = nio.Proxy(nc, s, conn, addr) + if err != nil { + return err + } + return nil +} diff --git a/pkg/socks/socks5_capture.go b/pkg/socks/socks5_capture.go deleted file mode 100644 index fa04115..0000000 --- a/pkg/socks/socks5_capture.go +++ /dev/null @@ -1,247 +0,0 @@ -package socks - -import ( - "encoding/binary" - "errors" - "fmt" - "log" - "net" - "strconv" - - "github.com/costinm/hbone" - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" -) - -// Egress capture. See also iptables, TUN, CONNECT proxy -// Should be on a dedicated port. - -// curl --socks5 127.0.0.1:15004 .... -// export HTTP_PROXY=socks5://127.0.0.1:15004 - -// TODO: tor extensions -// - send client data in advance, forward to the server -// - resolve - -// Note: max DNS size is 255 ( including trailing 0, and len labels ) -// - -const ( - ConnectCommand = uint8(1) - BindCommand = uint8(2) - AssociateCommand = uint8(3) - ipv4Address = uint8(1) - fqdnAddress = uint8(3) - ipv6Address = uint8(4) -) - -const ( - successReply uint8 = iota - serverFailure - ruleFailure - networkUnreachable - hostUnreachable - connectionRefused - ttlExpired - commandNotSupported - addrTypeNotSupported -) - -const ( - NoAuth = uint8(0) - noAcceptable = uint8(255) - UserPassAuth = uint8(2) - userAuthVersion = uint8(1) - authSuccess = uint8(0) - authFailure = uint8(1) -) - -/* - RFC1928 - - 1. Req: - VER 0x05 - NMETHODS 0x01 - METHOD 0x00 [one byte for each method - NoAuth] - (other auth not supported - we bind on 127.0.0.1 or use mtls) - - Res: - VER 0x05 - METHOD 0x00 - - 2. VER: X'05' - CMD - o CONNECT X'01' - o BIND X'02' - o UDP ASSOCIATE X'03' - RSV RESERVED 0x00 - ATYP address type of following address - o IP V4 address: X'01' - o DOMAINNAME: X'03' - o IP V6 address: X'04' - DST.ADDR desired destination address - DST.PORT desired destination port in network octet order -*/ -func New(ug *ugatesvc.UGate) { - p := ug.Config.BasePort + ugate.PORT_SOCKS - ll := &hbone.Listener{ - Address: fmt.Sprintf("127.0.0.1:%d", p), - Protocol: ugate.ProtoSocks, - PortHandler: &Socks{ug: ug}, - } - - err := ug.StartListener(ll) - if err != nil { - log.Println("Failed to start SOCKS, continue ", err) - } -} - -type Socks struct { - ug *ugatesvc.UGate -} - -func (s *Socks) String() string { - return "socks" -} - -func (s *Socks) Handle(bconn *nio.Stream) error { - bconn.Direction = nio.StreamTypeOut - - _, bconn.ReadErr = Unmarshal(bconn) - if bconn.ReadErr != nil { - return bconn.ReadErr - } - - // Dest is set, will be forwarded to the dest. - bconn.ReadErr = s.ug.HandleStream(bconn) - return bconn.ReadErr -} - -func Unmarshal(s *nio.Stream) (done bool, err error) { - // Fill the read buffer with one Read. - // Typically 3-4 bytes unless client is eager. - - head, err := s.Fill(3) - if err != nil { - return false, err - } - - if head[0] != 5 { - return false, errors.New("invalid header") - } - // Client: 0x05 0x01 0x00 - // 0x05 0x02 0x00 0x01 - // Server: 0x05 0x00 - off := 1 - sz := int(head[off]) - off++ // 2 - if len(head) < off+sz { // if it only read 2, probably malicious - 2 < 2 + 1 - head, err = s.Fill(off + sz) - if err != nil { - return false, err - } - } - off += sz // 3 - - s.Write([]byte{5, 0}) - - // We may have bytes in the buffer, in case sender didn't wait - if len(head) <= off+6 { - head, err = s.Fill(off + sz) - if err != nil { - return false, err - } - } - // We have at least 6 bytes - if head[off] != 5 { - return false, errors.New("invalid header 2") - } - off++ - if head[off] != 1 { - return false, errors.New("invalid method " + strconv.Itoa(int(head[off]))) - } - off++ - off++ // rsvd - - atyp := head[off+3] - off++ - - destName := "" - var destIP []byte - // off should be 3 or 4 - switch atyp { - case 1: - if len(head) <= off+6 { - head, err = s.Fill(off + 6) - } - destIP = make([]byte, 4) - copy(destIP, head[off:off+4]) - off += 4 - case 4: - if len(head) <= off+18 { - head, err = s.Fill(off + 18) - } - destIP = make([]byte, 16) - copy(destIP, head[off:off+16]) - off += 16 - - case 3: - dlen := int(head[off]) - off++ - if len(head) <= off+dlen+2 { - head, err = s.Fill(off + dlen + 2) - } - destName = string(head[off : off+dlen]) - off += dlen - } - if err != nil { - return false, err - } - port := binary.BigEndian.Uint16(head[off:]) - off += 2 - - // Any reminding bytes are eager sent - s.Skip(off) - - if atyp == 3 { - s.Dest = net.JoinHostPort(destName, strconv.Itoa(int(port))) - s.Type = "socks5" - } else { - s.DestAddr = &net.TCPAddr{IP: destIP, Port: int(port)} - s.Dest = s.DestAddr.String() - s.Type = "socks5IP" - } - - // Must be called before sending any data. - s.PostDialHandler = func(conn net.Conn, err error) { - if err != nil || conn == nil { - // TODO: write error code - s.Write([]byte{5, 1}) - s.Close() - } - // Not accurate for tcp-over-http. - // TODO: pass a 'on connect' callback - localAddr := conn.LocalAddr() - tcpAddr := localAddr.(*net.TCPAddr) - r := make([]byte, len(tcpAddr.IP)+6) - r[0] = 5 - r[1] = 0 // success - r[2] = 0 // rsv - off := 4 - if tcpAddr.IP.To4() != nil { - r[3] = 1 - copy(r[off:off+4], []byte(tcpAddr.IP)) - off += 4 - } else { - r[3] = 2 - copy(r[off:off+16], []byte(tcpAddr.IP)) - off += 16 - } - binary.BigEndian.PutUint16(r[off:], uint16(tcpAddr.Port)) - off += 2 - s.Write(r[0:off]) - } - - return true, nil -} diff --git a/pkg/tcp_proxy/tcp_proxy.go b/pkg/tcp_proxy/tcp_proxy.go new file mode 100644 index 0000000..6537065 --- /dev/null +++ b/pkg/tcp_proxy/tcp_proxy.go @@ -0,0 +1 @@ +package tcp_proxy diff --git a/pkg/test/testing.go b/pkg/test/testing.go new file mode 100644 index 0000000..4daa3ac --- /dev/null +++ b/pkg/test/testing.go @@ -0,0 +1,235 @@ +package test + +import ( + "bytes" + "errors" + "fmt" + "io" + "log" + "testing" + "time" + + "github.com/costinm/meshauth" + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate" + "github.com/costinm/ugate/pkg/echo" +) + +// Separate package to avoid recursive deps. +// The ugated package depends on each protocol impl. +// This is used from each protocol dir for single-protocol tests. +// Also an example on how to use without configs. + +// NewClientNode inits a test node from a config dir, with no default listeners. +func NewClientNode(maCfg *meshauth.MeshCfg, cfg *ugate.MeshSettings) (*ugate.UGate, error) { + ma := meshauth.NewMeshAuth(maCfg) + + // This is a base gate - without any special protocol (from ugated). + ug := ugate.New(ma, cfg) + ug.ListenerProto["echo"] = echo.EchoPortHandler + + err := ug.Start() + return ug, err +} + +// NewTestNode creates a node with the given config. +func NewTestNode(acfg *meshauth.MeshCfg, cfg *ugate.MeshSettings) *ugate.UGate { + basePort := cfg.BasePort + + a := meshauth.NewMeshAuth(acfg) + if a.Priv == "" { + a.InitSelfSigned("") + } + ug := ugate.New(a, cfg) + + ech := &echo.EchoHandler{UGate: ug} + ug.Mux.Handle("/debug/echo/", ech) + + ug.ListenerProto["echo"] = echo.EchoPortHandler + + // Echo - TCP + ug.StartListener(&meshauth.PortListener{ + Address: fmt.Sprintf("0.0.0.0:%d", basePort+11), + Protocol: "echo", // TLS ? + }) + ug.StartListener(&meshauth.PortListener{ + Address: fmt.Sprintf("0.0.0.0:%d", basePort+12), + Protocol: "echo", + }) + + return ug +} + +func InitEcho(port int) *ugate.UGate { + //cs := meshauth.NewConf() + ug := ugate.New(nil, &ugate.MeshSettings{ + BasePort: port, + }) + + // Echo - TCP + + ug.ListenerProto["echo"] = echo.EchoPortHandler + + ug.StartListener(&meshauth.PortListener{ + Address: fmt.Sprintf("0.0.0.0:%d", port+12), + Protocol: "echo", + }) + return ug +} + +var chunk1 = []byte("Hello world") +var chunk2 = []byte("chunk2") + +// CheckEcho will verify the behavior of the echo server. +// - write chunk1 (to verify we don't hang ) +// - read response from server - should include metadata for the request plus chunk1 +// - +func CheckEcho(in io.Reader, out io.Writer) (string, error) { + + d := make([]byte, 2048) + // RoundTripStart with a write - client send first (echo will wait, to verify that body is not cached) + _, err := out.Write(chunk1) + if err != nil { + return "", err + } + + //ab.SetDeadline(time.Now().StartListener(5 * time.Second)) + n, err := in.Read(d) + if err != nil { + return "", err + } + + idx := bytes.IndexByte(d[0:n], '\n') + if idx < 0 { + return string(d[0:n]), errors.New("missing header") + } + js := string(d[0:idx]) + idx++ // skip \n + // Server writes 2 chunkes - the header and what we wrote. There is a flush, but + // the transports don't guarantee boundary. + start := 0 + if idx < n { + copy(d[0:], d[idx:n]) + start = n - idx + n = start + } else { + n = 0 + } + if n < len(chunk1) { + n, err = in.Read(d[start:]) + if err != nil { + return "", err + } + n += start + } + + if !bytes.Equal(chunk1, d[0:n]) { + return js, errors.New("miss-matched result1 " + string(d[0:n])) + } + + _, err = out.Write(chunk2) + if err != nil { + return "", err + } + + n, err = in.Read(d) + if err != nil { + return "", err + } + + if !bytes.Equal(chunk2, d[0:n]) { + return js, errors.New("miss-matched result " + string(d[0:n])) + } + + /* _, err = out.Write([]byte("close\n")) + if err != nil { + return "", err + } + */ + if cw, ok := out.(nio.CloseWriter); ok { + cw.CloseWrite() + } else { + out.(io.Closer).Close() + } + // Possible issue: the server has sent FIN, but reader (h3 response body) did not + // receive it. + + n, err = in.Read(d) + if err != io.EOF { + return "", err + } + + return js, nil +} + +var AliceMeshAuthCfg = &meshauth.MeshCfg{ + Name: "alice", + Domain: "test.m.internal", + Priv: ` +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIOa4YuOsiCIqcFqqknjeTaPCwVEuF/X9YJMdf77V09HyoAoGCCqGSM49 +AwEHoUQDQgAE1ac88a5eI83WDHmtOJmce4HhRO3s9iObYKnP9QkpZPMRYwJcvi0i +N9miG3v5LoooDq6r9Nt2e/koHw6E1SvmlQ== +-----END EC PRIVATE KEY----- +`, + CertBytes: ` +-----BEGIN CERTIFICATE----- +MIIBeDCCAR+gAwIBAgIQUzvKlOHbjBotS03Lku+pBTAKBggqhkjOPQQDAjAXMQkw +BwYDVQQKEwAxCjAIBgNVBAMTAS4wHhcNMjQwMTA1MTg0NDMyWhcNMjUwMTA0MTg0 +NDMyWjAXMQkwBwYDVQQKEwAxCjAIBgNVBAMTAS4wWTATBgcqhkjOPQIBBggqhkjO +PQMBBwNCAATVpzzxrl4jzdYMea04mZx7geFE7ez2I5tgqc/1CSlk8xFjAly+LSI3 +2aIbe/kuiigOrqv023Z7+SgfDoTVK+aVo00wSzAOBgNVHQ8BAf8EBAMCBaAwHQYD +VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwDAYDVR0R +BAUwA4IBLjAKBggqhkjOPQQDAgNHADBEAiAGfrW7fgnGYV0AHPhc2sgymzpuy0DS +T8kswXTqlc/b2gIgUNTQoHbS9R/VTrxIbHCQeL5TZE4XCGq3DQ9lHgAld4E= +-----END CERTIFICATE----- +`, +} + +var BobMeshAuthCfg = &meshauth.MeshCfg{ + Name: "bob", + Domain: "test.m.internal", + Priv: `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIG0y/ACuY0grzpMCZRWs/mUCgXY/vaMFN5MZOY+X901IoAoGCCqGSM49 +AwEHoUQDQgAE51wdYyA7nhXKgUzvruRo4ZchJLNgJTlSkKRLpNYHhLrBjHivC4A4 +HgysDlU4frwsTSg6qPOiXkTkA8VZJzdHMg== +-----END EC PRIVATE KEY-----`, + CertBytes: `-----BEGIN CERTIFICATE----- +MIIBejCCASCgAwIBAgIRAK9oRInSJbAZDLpCWQX/UN8wCgYIKoZIzj0EAwIwFzEJ +MAcGA1UEChMAMQowCAYDVQQDEwEuMB4XDTIyMTEwNDE0MjgxMFoXDTIzMTEwNDE0 +MjgxMFowFzEJMAcGA1UEChMAMQowCAYDVQQDEwEuMFkwEwYHKoZIzj0CAQYIKoZI +zj0DAQcDQgAE51wdYyA7nhXKgUzvruRo4ZchJLNgJTlSkKRLpNYHhLrBjHivC4A4 +HgysDlU4frwsTSg6qPOiXkTkA8VZJzdHMqNNMEswDgYDVR0PAQH/BAQDAgWgMB0G +A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMAwGA1Ud +EQQFMAOCAS4wCgYIKoZIzj0EAwIDSAAwRQIhALQoenr80BTUkIeFKyqOJTQM75sx +31/cQyVaS0hZfTRsAiBPnuyNeeLFuQ7+2ogMB2FQsg8oIjFEcd781XFEjJWMDg== +-----END CERTIFICATE----- +`, +} + +// Helpers for setting up a ugate test env. + +// Verify using the basic echo server. +func EchoClient2(t *testing.T, lout io.WriteCloser, lin io.Reader, serverFirst bool) { + b := make([]byte, 1024) + timer := time.AfterFunc(3*time.Second, func() { + log.Println("timeout") + //lin.CloseWithError(errors.New("timeout")) + lout.Close() // (errors.New("timeout")) + }) + + if serverFirst { + b := make([]byte, 1024) + n, err := lin.Read(b) + if n == 0 || err != nil { + t.Fatal(n, err) + } + } + + lout.Write([]byte("Ping")) + n, err := lin.Read(b) + if n != 4 { + t.Error(n, err) + } + timer.Stop() +} diff --git a/pkg/udp/buffer_pool.go b/pkg/udp/buffer_pool.go deleted file mode 100644 index 15953d6..0000000 --- a/pkg/udp/buffer_pool.go +++ /dev/null @@ -1,80 +0,0 @@ -package udp - -import ( - "sync" -) - -type packetBuffer struct { - Data []byte - - // refCount counts how many packets Data is used in. - // It doesn't support concurrent use. - // It is > 1 when used for coalesced packet. - refCount int -} - -// Split increases the refCount. -// It must be called when a packet buffer is used for more than one packet, -// e.g. when splitting coalesced packets. -func (b *packetBuffer) Split() { - b.refCount++ -} - -// Decrement decrements the reference counter. -// It doesn't put the buffer back into the pool. -func (b *packetBuffer) Decrement() { - b.refCount-- - if b.refCount < 0 { - panic("negative packetBuffer refCount") - } -} - -// MaybeRelease puts the packet buffer back into the pool, -// if the reference counter already reached 0. -func (b *packetBuffer) MaybeRelease() { - // only put the packetBuffer back if it's not used any more - if b.refCount == 0 { - b.putBack() - } -} - -// Release puts back the packet buffer into the pool. -// It should be called when processing is definitely finished. -func (b *packetBuffer) Release() { - b.Decrement() - if b.refCount != 0 { - panic("packetBuffer refCount not zero") - } - b.putBack() -} - -// Len returns the length of Data -func (b *packetBuffer) Len() int { - return len(b.Data) -} - -const MaxPacketBufferSize = 9000 - -func (b *packetBuffer) putBack() { - if cap(b.Data) != int(MaxPacketBufferSize) { - panic("putPacketBuffer called with packet of wrong size!") - } - bufferPool.Put(b) -} - -var bufferPool sync.Pool - -func getPacketBuffer() *packetBuffer { - buf := bufferPool.Get().(*packetBuffer) - buf.refCount = 1 - buf.Data = buf.Data[:0] - return buf -} - -func init() { - bufferPool.New = func() interface{} { - return &packetBuffer{ - Data: make([]byte, 0, MaxPacketBufferSize), - } - } -} diff --git a/pkg/udp/conn_oob.go b/pkg/udp/conn_oob.go index ae54509..c579064 100644 --- a/pkg/udp/conn_oob.go +++ b/pkg/udp/conn_oob.go @@ -16,10 +16,15 @@ import ( "time" "unsafe" + "github.com/costinm/ssh-mesh/nio" "golang.org/x/sys/unix" ) -// If the PacketConn passed to RoundTripStart or Listen satisfies this interface, quic-go will read the ECN bits from the IP header. +const MaxPacketBufferSize = 9000 + +// If the PacketConn passed to RoundTripStart or Listen satisfies this interface, quic-go will read the +// ECN bits from the IP header. +// // In this case, ReadMsgUDP() will be used instead of ReadFrom() to read packets. type OOBCapablePacketConn interface { net.PacketConn @@ -33,7 +38,7 @@ type packetInfo struct { } type receivedPacket struct { - buffer *packetBuffer + buffer *nio.Buffer remoteAddr net.Addr rcvTime time.Time @@ -58,11 +63,12 @@ const ( const ecnMask uint8 = 0x3 -func setReceiveBuffer(c net.PacketConn, minSize int) error { +func SetReceiveBuffer(c net.PacketConn, minSize int) error { conn, ok := c.(interface{ SetReadBuffer(int) error }) if !ok { return errors.New("connection doesn't allow setting of receive buffer size. Not a *net.UDPConn?") } + size, err := inspectReadBuffer(c) if err != nil { return fmt.Errorf("failed to determine receive buffer size: %w", err) @@ -70,6 +76,7 @@ func setReceiveBuffer(c net.PacketConn, minSize int) error { if size >= minSize { return nil } + if err := conn.SetReadBuffer(minSize); err != nil { return fmt.Errorf("failed to increase receive buffer size: %w", err) } @@ -84,6 +91,7 @@ func setReceiveBuffer(c net.PacketConn, minSize int) error { if newSize < minSize { return fmt.Errorf("failed to sufficiently increase receive buffer size (was: %d kiB, wanted: %d kiB, got: %d kiB)", size/1024, minSize/1024, newSize/1024) } + log.Printf("Increased receive buffer size to %d kiB", newSize/1024) return nil } @@ -167,12 +175,13 @@ func newConn(c OOBCapablePacketConn) (*oobConn, error) { } func (c *oobConn) ReadPacket() (*receivedPacket, error) { - buffer := getPacketBuffer() + buffer := nio.GetBuffer(0, MaxPacketBufferSize) // The packet size should not exceed protocol.MaxPacketBufferSize bytes // If it does, we only read a truncated packet, which will then end up undecryptable - buffer.Data = buffer.Data[:MaxPacketBufferSize] + //buffer = buffer[:MaxPacketBufferSize] c.oobBuffer = c.oobBuffer[:cap(c.oobBuffer)] - n, oobn, _, addr, err := c.OOBCapablePacketConn.ReadMsgUDP(buffer.Data, c.oobBuffer) + data := buffer.Buffer() + n, oobn, _, addr, err := c.OOBCapablePacketConn.ReadMsgUDP(data[0:cap(data)], c.oobBuffer) if err != nil { return nil, err } @@ -231,7 +240,7 @@ func (c *oobConn) ReadPacket() (*receivedPacket, error) { return &receivedPacket{ remoteAddr: addr, rcvTime: time.Now(), - data: buffer.Data[:n], + data: data[:n], ecn: ecn, info: info, buffer: buffer, diff --git a/pkg/udp/tproxy_udp.go b/pkg/udp/tproxy_udp.go new file mode 100644 index 0000000..83f7dbc --- /dev/null +++ b/pkg/udp/tproxy_udp.go @@ -0,0 +1,198 @@ +package udp + +import ( + "bytes" + "encoding/binary" + "fmt" + "log" + "net" + "strconv" + "syscall" + "unsafe" + + "golang.org/x/net/ipv4" +) + +// WIP: requires root, UDP proxy using orig dest. + +// To preserve the original srcIP it is also possible to use udp.WriteMsg. + +func UDPAccept(con *net.UDPConn, u func(ip net.IP, port uint16, ip2 net.IP, u uint16, bytes []byte)) { + //go tu.blockingLoop(tu.con, u) + go blockingLoop(con, u) +} + +// ReadFromUDP reads a UDP packet from c, copying the payload into b. +// It returns the number of bytes copied into b and the return address +// that was on the packet. +// +// RequestInPipe-of-band data is also read in so that the original destination +// address can be identified and parsed. +func ReadFromUDP(conn *net.UDPConn, b []byte) (int, *net.UDPAddr, *net.UDPAddr, error) { + oob := make([]byte, 2048) + n, oobn, _, addr, err := conn.ReadMsgUDP(b, oob) + if err != nil { + return 0, nil, nil, err + } + + msgs, err := syscall.ParseSocketControlMessage(oob[:oobn]) + if err != nil { + return 0, nil, nil, fmt.Errorf("parsing socket control message: %s", err) + } + + var originalDst *net.UDPAddr + for _, msg := range msgs { + //if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == syscall.IPV6_PKTINFO { + // // 20 bytes + // log.Println(msg.Header.Level, msg.Header.Type, msg.Data) + // rawaddr := make([]byte, 16) + // // raw IP address, 4 bytes for IPv4 or 16 bytes for IPv6, only IPv4 is supported now + // copy(rawaddr, msg.Data[0:16]) + // origIP := net.IP(rawaddr) + // + // // Bigendian is the network bit order, seems to be used here. + // origPort := binary.BigEndian.Uint16(msg.Data[16:]) + // originalDst = &net.UDPAddr{ + // IP: origIP, + // Port: int(origPort), + // } + //} else + if msg.Header.Level == syscall.SOL_IPV6 && msg.Header.Type == 74 { + // 28 bytes - family, port, + rawaddr := make([]byte, 16) + // raw IP address, 4 bytes for IPv4 or 16 bytes for IPv6, only IPv4 is supported now + copy(rawaddr, msg.Data[8:]) + origIP := net.IP(rawaddr) + + // Bigendian is the network bit order, seems to be used here. + origPort := binary.BigEndian.Uint16(msg.Data[2:]) + originalDst = &net.UDPAddr{ + IP: origIP, + Port: int(origPort), + } + } else if msg.Header.Level == syscall.SOL_IP && msg.Header.Type == syscall.IP_RECVORIGDSTADDR { + originalDstRaw := &syscall.RawSockaddrInet4{} + if err = binary.Read(bytes.NewReader(msg.Data), binary.LittleEndian, originalDstRaw); err != nil { + return 0, nil, nil, fmt.Errorf("reading original destination address: %s", err) + } + + switch originalDstRaw.Family { + case syscall.AF_INET: + pp := (*syscall.RawSockaddrInet4)(unsafe.Pointer(originalDstRaw)) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + originalDst = &net.UDPAddr{ + IP: net.IPv4(pp.Addr[0], pp.Addr[1], pp.Addr[2], pp.Addr[3]), + Port: int(p[0])<<8 + int(p[1]), + } + + case syscall.AF_INET6: + pp := (*syscall.RawSockaddrInet6)(unsafe.Pointer(originalDstRaw)) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + originalDst = &net.UDPAddr{ + IP: net.IP(pp.Addr[:]), + Port: int(p[0])<<8 + int(p[1]), + Zone: strconv.Itoa(int(pp.Scope_id)), + } + + default: + return 0, nil, nil, fmt.Errorf("original destination is an unsupported network family") + } + } else { + log.Println(msg.Header.Level, msg.Header.Type) + } + } + + if originalDst == nil { + return 0, nil, nil, fmt.Errorf("unable to obtain original destination: %s", err) + } + + return n, addr, originalDst, nil +} + +// Handle packets received on the tproxy interface. +func blockingLoop(con *net.UDPConn, u func(ip net.IP, port uint16, ip2 net.IP, u uint16, bytes []byte)) { + data := make([]byte, 1600) + + for { + n, a1, addr, err := ReadFromUDP(con, data) + if err != nil { + log.Println("Read err", err) + continue + } + + go u(a1.IP, uint16(a1.Port), addr.IP, uint16(addr.Port), data[0:n]) + } +} + +// Initialize a port as a TPROXY socket. This can be sent over UDS from the root, and used for +// UDP capture. +func StartUDPTProxyListener6(port int) (*net.UDPConn, error) { + network := "udp" + laddr := &net.UDPAddr{Port: port} + listener, err := net.ListenUDP(network, laddr) + if err != nil { + return nil, err + } + + fileDescriptorSource, err := listener.File() + if err != nil { + return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("get file descriptor: %s", err)} + } + defer fileDescriptorSource.Close() + + fileDescriptor := int(fileDescriptorSource.Fd()) + if err = syscall.SetsockoptInt(fileDescriptor, syscall.SOL_IP, syscall.IP_TRANSPARENT, 1); err != nil { + return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_TRANSPARENT: %s", err)} + } + + if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IP, syscall.IP_RECVORIGDSTADDR, 1); err != nil { + return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + } + // doesn't work + // if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IPV6, syscall.IP_RECVORIGDSTADDR, 1); err != nil { + // return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + // } + // only ip + //if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IPV6, syscall.IPV6_RECVPKTINFO, 1); err != nil { + // return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + //} + // IPV6_ORIGDSTADDR + if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IPV6, 74, 1); err != nil { + return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + } + // no work + //if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IPV6, syscall.IPV6_DSTOPTS, 1); err != nil { + // return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + //} + // New + //if err = syscall.SetsockoptInt(fileDescriptor, syscall.IPPROTO_IP, syscall.IP_PKTINFO, 1); err != nil { + // return nil, &net.OpError{Op: "listen", Net: network, Source: nil, Addr: laddr, Err: fmt.Errorf("set socket option: IP_RECVORIGDSTADDR: %s", err)} + //} + + return listener, nil +} + +// Handles UDP packets intercepted using TProxy. +// Can send packets preserving original IP/port. +type TProxyUDP struct { + con *net.UDPConn + con6 *net.UDPConn +} + +// UDP write with source address control. +func (tudp *TProxyUDP) WriteTo(data []byte, dstAddr *net.UDPAddr, srcAddr *net.UDPAddr) (int, error) { + + // Attempt to write as UDP + cm4 := new(ipv4.ControlMessage) + cm4.Src = srcAddr.IP + oob := cm4.Marshal() + n, _, err := tudp.con.WriteMsgUDP(data, oob, dstAddr) + if err != nil { + n, err = tudp.con.WriteToUDP(data, dstAddr) + if err != nil { + log.Print("Failed to send DNS ", dstAddr, srcAddr) + } + } + + return n, err // tudp.con.WriteTo(data, dstAddr) +} diff --git a/pkg/udp/udpproxy.go b/pkg/udp/udpproxy.go index 7b1a8f6..656bb36 100644 --- a/pkg/udp/udpproxy.go +++ b/pkg/udp/udpproxy.go @@ -23,19 +23,18 @@ package udp import ( + "context" "encoding/json" "log" "net" "net/http" - "net/url" "strconv" - "strings" "sync" "time" - "github.com/costinm/hbone" + "github.com/costinm/meshauth" + "github.com/costinm/ssh-mesh/nio" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" ) // TODO: For TUN capture, we can process the UDP packet directly, without going through the stack. @@ -113,14 +112,14 @@ var ( // This should be sufficient for local capture and small p2p nets. // In the mesh, UDP should be encapsulated in WebRTC or quic. type UdpNat struct { - ugate.Stats + nio.Stats // External address - string Dest string // External address DestAddr *net.UDPAddr - //nio.Stream + //util.Stream // bound to a local port (on the real network). UDP *net.UDPConn @@ -139,14 +138,14 @@ type UdpNat struct { // This is typically a netstack or TProxy var TransparentUDPWriter ugate.UdpWriter -type UDPGate struct { - cfg *ugatesvc.UGate +type UDPListener struct { + cfg *ugate.UGate // NAT udpLock sync.RWMutex ActiveUdp map[string]*UdpNat - AllUdpCon map[string]*ugate.HostStats + //AllUdpCon map[string]*ugatesvc.HostStats // UDP // Capture return - sends packets back to client app. @@ -155,49 +154,37 @@ type UDPGate struct { // Timeout for UDP sockets. Default 60 sec. ConnTimeout time.Duration + l *meshauth.PortListener } -func New(ug *ugatesvc.UGate) *UDPGate { - udpg := &UDPGate{ - cfg: ug, - ConnTimeout: 60 * time.Second, - ActiveUdp: map[string]*UdpNat{}, - AllUdpCon: map[string]*ugate.HostStats{}, - } - if ug.Mux != nil { - udpg.InitMux(ug.Mux) - } - ug.UDPHandler = udpg - for k, l := range ug.Config.Listeners { - if strings.HasPrefix(k, "udp://") { - l.Address = k - udpg.Listener(l) - log.Println("uGate: listen UDP ", l.Address, l.ForwardTo) +func New(ug *ugate.UGate, l *meshauth.PortListener) *UDPListener { + if ug.UDPHandler == nil { + udpg := &UDPListener{ + cfg: ug, + ConnTimeout: 60 * time.Second, + ActiveUdp: map[string]*UdpNat{}, + //AllUdpCon: map[string]*ugatesvc.HostStats{}, } + udpg.l = l + udpg.InitMux(ug.Mux) + ug.UDPHandler = udpg + udpg.periodic() } - udpg.periodic() - return udpg + return ug.UDPHandler.(*UDPListener) } -func (udpg *UDPGate) periodic() { +func (udpg *UDPListener) periodic() { FreeIdleSockets(udpg) time.AfterFunc(60*time.Second, udpg.periodic) } -// http debug/ui - -func (udpg *UDPGate) InitMux(mux *http.ServeMux) { - mux.HandleFunc("/dmesh/udpa", udpg.HttpUDPNat) - mux.HandleFunc("/dmesh/udp", udpg.HttpAllUDP) -} +// http debug/metrics -func (udpg *UDPGate) HttpAllUDP(w http.ResponseWriter, r *http.Request) { - udpg.udpLock.RLock() - defer udpg.udpLock.RUnlock() - json.NewEncoder(w).Encode(udpg.AllUdpCon) +func (udpg *UDPListener) InitMux(mux *http.ServeMux) { + mux.HandleFunc("/dmesh/udpa/"+udpg.l.Address, udpg.HttpUDPNat) } -func (udpg *UDPGate) HttpUDPNat(w http.ResponseWriter, r *http.Request) { +func (udpg *UDPListener) HttpUDPNat(w http.ResponseWriter, r *http.Request) { udpg.udpLock.RLock() defer udpg.udpLock.RUnlock() json.NewEncoder(w).Encode(udpg.ActiveUdp) @@ -225,7 +212,7 @@ func (udpg *UDPGate) HttpUDPNat(w http.ResponseWriter, r *http.Request) { // the client will see the local address of this node, and the same port that is used with the remote. // // udpN is the 'dialed connection' - -func remoteConnectionReadLoop(gw *UDPGate, localAddr *net.UDPAddr, acceptConn *net.UDPConn, udpN *UdpNat, writer ugate.UdpWriter) { +func remoteConnectionReadLoop(gw *UDPListener, localAddr *net.UDPAddr, acceptConn *net.UDPConn, udpN *UdpNat, writer ugate.UdpWriter) { if DumpUdp { log.Println("Starting remote loop for ", localAddr, udpN.ReverseSrcAddr, udpN.DestAddr, udpN.Dest) } @@ -234,7 +221,7 @@ func remoteConnectionReadLoop(gw *UDPGate, localAddr *net.UDPAddr, acceptConn *n for { // TODO: reuse, detect MTU. Need to account for netstack buffer ownership - // upstreamConn is a UDP Listener bound to a random port, receiving messages + // upstreamConn is a UDP PortListener bound to a random port, receiving messages // from the remote app (or any other app in case of STUN) size, srcAddr, err := udpN.UDP.ReadFromUDP(buffer[0:cap(buffer)]) if err != nil { @@ -275,7 +262,7 @@ func remoteConnectionReadLoop(gw *UDPGate, localAddr *net.UDPAddr, acceptConn *n } } -func forwardReadLoop(gw *UDPGate, l *hbone.Listener, udpL *net.UDPConn) { +func forwardReadLoop(gw *UDPListener, l *meshauth.PortListener, udpL *net.UDPConn) { remoteA, err := net.ResolveUDPAddr("udp", l.ForwardTo) if err != nil { log.Println("Invalid forward address ", l.ForwardTo, err) @@ -288,7 +275,7 @@ func forwardReadLoop(gw *UDPGate, l *hbone.Listener, udpL *net.UDPConn) { defer bufferPoolUdp.Put(buffer) for { // TODO: reuse, detect MTU. Need to account for netstack buffer ownership - // upstreamConn is a UDP Listener bound to a random port, receiving messages + // upstreamConn is a UDP PortListener bound to a random port, receiving messages // from the remote app (or any other app in case of STUN) size, srcAddr, err := udpL.ReadFromUDP(buffer[0:cap(buffer)]) if err != nil { @@ -309,7 +296,7 @@ func forwardReadLoop(gw *UDPGate, l *hbone.Listener, udpL *net.UDPConn) { udpCon, err := net.ListenUDP("udp", &net.UDPAddr{ Port: 0, }) - setReceiveBuffer(udpCon, bufferSize) + SetReceiveBuffer(udpCon, bufferSize) if err != nil { log.Println("udp proxy failed to listen", err) @@ -354,17 +341,15 @@ func forwardReadLoop(gw *UDPGate, l *hbone.Listener, udpL *net.UDPConn) { // } //} -func (udpg *UDPGate) Listener(lc *hbone.Listener) { +// Listener creates a regular UDP listener port +func (udpg *UDPListener) Listener(lc *meshauth.PortListener) { log.Println("Adding UDP ", lc) - // port 0 - // TODO: attempt to use the localPort first - ua, _ := url.Parse(lc.Address) - _, p, _ := net.SplitHostPort(ua.Host) + _, p, _ := net.SplitHostPort(lc.Address) pp, _ := strconv.Atoi(p) udpCon, err := net.ListenUDP("udp", &net.UDPAddr{ Port: pp, }) - setReceiveBuffer(udpCon, bufferSize) + SetReceiveBuffer(udpCon, bufferSize) if err != nil { log.Println("udp proxy failed to listen", err) @@ -377,7 +362,7 @@ func (udpg *UDPGate) Listener(lc *hbone.Listener) { // HandleUDP is processing a captured UDP packet. It can be captured by iptables TPROXY or // netstack TUN. // Will create a NAT, using a local port as source and translating back. -func (udpg *UDPGate) HandleUdp(dstAddr net.IP, dstPort uint16, localAddr net.IP, localPort uint16, data []byte) { +func (udpg *UDPListener) HandleUdp(dstAddr net.IP, dstPort uint16, localAddr net.IP, localPort uint16, data []byte) { if dstPort == 1900 { return } @@ -414,17 +399,17 @@ func (udpg *UDPGate) HandleUdp(dstAddr net.IP, dstPort uint16, localAddr net.IP, return } - setReceiveBuffer(udpCon, bufferSize) + SetReceiveBuffer(udpCon, bufferSize) udpN = &UdpNat{ UDP: udpCon, } - l := udpg.cfg.FindRoutePrefix(dstAddr, dstPort, "udp://") - if l.ForwardTo != "" { - udpN.DestAddr, err = net.ResolveUDPAddr("udp", l.ForwardTo) + l, _ := udpg.cfg.Cluster(context.Background(), net.JoinHostPort(dstAddr.String(), strconv.Itoa(int(dstPort)))) //FindRoutePrefix(dstAddr, dstPort, "udp://") + if l != nil { + udpN.DestAddr, err = net.ResolveUDPAddr("udp", l.Addr) if err != nil { - log.Println("Failed to resolve ", l.ForwardTo, err) + log.Println("Failed to resolve ", l.Addr, err) return } udpN.ReverseSrcAddr = &net.UDPAddr{IP: dstAddr, Port: int(dstPort)} @@ -470,7 +455,7 @@ const bufferSize = (1 << 20) * 2 // Called on the periodic cleanup thread (~60sec), or if too many sockets open. // Will update udp stats. Default UDP timeout to 60 sec. -func FreeIdleSockets(gw *UDPGate) { +func FreeIdleSockets(gw *UDPListener) { var clientsToTimeout []string @@ -488,18 +473,18 @@ func FreeIdleSockets(gw *UDPGate) { remote.Closed = true clientsToTimeout = append(clientsToTimeout, client) - hs, f := gw.AllUdpCon[remote.Dest] - if !f { - hs = &ugate.HostStats{Open: time.Now()} - gw.AllUdpCon[remote.Dest] = hs - } - hs.Last = remote.LastRead - hs.SentPackets += remote.SentPackets - hs.SentBytes += remote.SentBytes - hs.RcvdPackets += remote.RcvdPackets - hs.RcvdBytes += remote.RcvdBytes - - hs.Count++ + //hs, f := gw.AllUdpCon[remote.MeshCluster] + //if !f { + // hs = &ugatesvc.HostStats{Open: time.Now()} + // gw.AllUdpCon[remote.MeshCluster] = hs + //} + //hs.Last = remote.LastRead + //hs.SentPackets += remote.SentPackets + //hs.SentBytes += remote.SentBytes + //hs.RcvdPackets += remote.RcvdPackets + //hs.RcvdBytes += remote.RcvdBytes + // + //hs.Count++ } else { //log.Printf("UDPC: active %v", remote) active++ @@ -520,7 +505,7 @@ func FreeIdleSockets(gw *UDPGate) { gw.udpLock.Unlock() } -func (gw *UDPGate) Close() error { +func (gw *UDPListener) Close() error { gw.udpLock.Lock() //gw.closed = true for _, conn := range gw.ActiveUdp { diff --git a/pkg/uds/uds.go b/pkg/uds/uds.go index 5306217..6829dfb 100644 --- a/pkg/uds/uds.go +++ b/pkg/uds/uds.go @@ -15,8 +15,8 @@ import ( "sync" "syscall" - "github.com/costinm/hbone/nio" msgs "github.com/costinm/ugate/webpush" + "golang.org/x/exp/slog" ) // uds provides helpers for passing credentials and files over UDS streams, and basic @@ -83,6 +83,8 @@ type UdsServer struct { var ( Debug = false + + logger = slog.With("name", "uds") ) // Create a UDS server listening on 'name'. @@ -95,11 +97,11 @@ func NewServer(name string, mux *msgs.Mux) (*UdsServer, error) { if err != nil { return nil, err } - return &UdsServer{Name: name, + return &UdsServer{ + Name: name, listener: us, Gid: -1, mux: mux, - //Handlers: map[string]MessageHandler{}, }, nil } @@ -112,6 +114,7 @@ func Dial(ifname string, mux *msgs.Mux, initial map[string]string) (*UdsConn, er initial: initial, mux: mux, } + uds.SendMessageToRemote = uds.SendMessage err := uds.Redial() @@ -139,12 +142,11 @@ func (uds *UdsServer) Close() { func (uds *UdsServer) accept() (*UdsConn, error) { inS, err := uds.listener.AcceptUnix() if err != nil { - fmt.Println("Error accepting ", uds.Name, err) return nil, err } err = enableUnixCredentials(inS) if err != nil { - log.Println("Error enabling unix creds ", err) + logger.Error("Error enabling unix creds ", "error", err) } uc := &UdsConn{ con: inS, @@ -159,11 +161,11 @@ func (uds *UdsServer) accept() (*UdsConn, error) { } func (uds *UdsServer) Start() error { - // TODO: stop and it's channel + // stop will happen when uds is closed. for { inS, err := uds.accept() if err != nil { - fmt.Println("Error accepting ", uds.Name, err) + logger.Error("Error accepting", "udsname", uds.Name, "error", err) return err } go uds.serverStream(inS) @@ -173,7 +175,7 @@ func (uds *UdsServer) Start() error { var cnt = 0 -// Called after connecting to the remote UDS. Must send something, so credentials are passed. +// Called after connecting to the remote UDS. Must send something, so user credentials are passed. func (conn *UdsConn) serverHandshake(uds *UdsServer) error { //data := make([]byte, 4096) @@ -182,7 +184,9 @@ func (conn *UdsConn) serverHandshake(uds *UdsServer) error { // First message from client should include unix credentials // Should also include the identity of the node ! _, data, err := conn.nextMessage() + //ndata, pid, uid, gid, err := conn.GetUnixCreds(data) + if err != nil { return errors.New(fmt.Sprint("Failed to read unix creds ", err)) } @@ -194,6 +198,7 @@ func (conn *UdsConn) serverHandshake(uds *UdsServer) error { conn.Name = fmt.Sprintf("udss:%d:%d:%d", conn.Uid, conn.Pid, cnt) cnt++ + // Respond so client can get server identity. conn.SendMessageDirect("ok", nil, nil) // First message: :open @@ -482,16 +487,6 @@ func (uds *UdsConn) File() *os.File { return fd } -func processUnixConn(bc *nio.Stream) error { - uc, ok := bc.Out.(*net.UnixConn) - if !ok { - return errors.New("Unexpected con") - } - enableUnixCredentials(uc) - - return nil -} - // Enable reception of PID/UID/GID func enableUnixCredentials(conn *net.UnixConn) error { viaf, err := conn.File() diff --git a/pkg/uds/uds_test.go b/pkg/uds/uds_test.go index e714def..0703b06 100644 --- a/pkg/uds/uds_test.go +++ b/pkg/uds/uds_test.go @@ -12,6 +12,8 @@ import ( ) func TestUDS(t *testing.T) { + //utel.InitDefaultHandler(nil) + fn := "testUDS" us, err := NewServer(fn, msgs.DefaultMux) defer os.Remove(fn) @@ -20,6 +22,7 @@ func TestUDS(t *testing.T) { return } go us.Start() + msgs.DefaultMux.AddHandler("srv", msgs.HandlerCallbackFunc(func(ctx context.Context, cmdS string, meta map[string]string, data []byte) { log.Println(cmdS, meta, data) })) diff --git a/pkg/ugatesvc/accept.go b/pkg/ugatesvc/accept.go deleted file mode 100644 index c540607..0000000 --- a/pkg/ugatesvc/accept.go +++ /dev/null @@ -1,204 +0,0 @@ -package ugatesvc - -import ( - "fmt" - "log" - "net" - - "github.com/costinm/hbone" - "github.com/costinm/hbone/nio" -) - -// Accepting connections on ports and extracting metadata, including sniffing. - -// WIP: special handling for egress, i.e. locally originated streams. -// Identification: -// - dedicated listener ports for iptables, socks5 or tun -// - listeners with address 127.0.0.1 -// - connections with src/dst address in 127.0.0.0/8 -// -// The last 2 are 'whitebox' mode, using the Port and address to select -// the routes. -// -// After determining the target from meta or config the request is proxied. -//func (pl *Listener) handleEgress(acceptedCon net.Stream) error { -// -// return nil -//} - -// WIP: handling for accepted connections for this node. -//func (pl *Listener) handleLocal(acceptedCon net.Stream) error { -// -// return nil -//} - -// For BTS/H2 and iptables-in, the config for the actual listen port is virtual. -// LocalAddr port determines which config to use for routing. -// RemoteAddr is the (authenticated) remote VIP or the real client IP. -// -// TUN and iptables(out) are used for egress, remoteAddr is the destination on a remote -// computer, and localAddr is on same computer and not very useful. - -// New style, based on lwip. Blocks until connect, proxy runs in background. -func (ug *UGate) HandleTUN(conn net.Conn, ra *net.TCPAddr, la *net.TCPAddr) error { - bconn := nio.GetStream(conn, conn) - bconn.Direction = nio.StreamTypeOut - ug.OnStream(bconn) - defer ug.OnStreamDone(bconn) - - bconn.RemoteA = ra - bconn.LocalA = la - - // Testing/debugging - localhost is captured by table local, rule 0. - if bconn.Dest == "" { - bconn.Dest = ra.String() - log.Println("LTUN ", ra, la, bconn.Dest) - } - - log.Println("TUN TCP ", bconn) - // TODO: config ? Could be shared with iptables port - return ug.HandleStream(bconn) -} - -// Handle a virtual (multiplexed) stream, received over -// another connection, for example H2 POST/CONNECT, etc -// The connection will have metadata, may include identify of the caller. -func (ug *UGate) HandleVirtualIN(bconn *nio.Stream) error { - ug.OnStream(bconn) - defer ug.OnStreamDone(bconn) - - return ug.HandleStream(bconn) -} - -// handleSNI is intended for a dedicated SNI port. -// Will use the Config.Routes to map the SNI host to a ForwardTo address. If not found, -// will use a callback for a dynamic route. -func (ug *UGate) handleSNI(str *nio.Stream) error { - // Used to present the right cert - _, str.ReadErr = ParseTLS(str) - if str.ReadErr != nil { - return str.ReadErr - } - - route := ug.Config.Routes[str.Dest] - if route != nil { - if route.ForwardTo != "" { - str.Dest = route.ForwardTo - } - if route.Handler != nil { - // SOCKS and others need to send something back - we don't - // have a real connection, faking it. - str.PostDial(str, nil) - str.Dest = fmt.Sprintf("%v", route.Handler) - err := route.Handler.Handle(str) - str.Close() - return err - } - } - - // Default stream handling is proxy to the SNI dest. - // Note that SNI does not include port number. - str.ReadErr = ug.DialAndProxy(str) - return nil -} - -// Hamdle implements the common interface for handling accepted streams. -// Will init and log the stream, then handle. -func (ug *UGate) Handle(s *nio.Stream) { - ug.OnStream(s) - defer ug.OnStreamDone(s) - - ug.HandleStream(s) -} - -func forwardTo(l net.Listener) string { - if ul, ok := l.(*hbone.Listener); ok { - return ul.ForwardTo - } - return "" -} - -// A real accepted connection on a 'legacy' port. Will be forwarded to -// the mesh. -func (ug *UGate) handleTCPForward(bconn *nio.Stream) error { - bconn.Direction = nio.StreamTypeForward - - ft := forwardTo(bconn.Listener) - if ft != "" { - bconn.Dest = ft - } - - bconn.ReadErr = ug.HandleStream(bconn) - return bconn.ReadErr -} - -func (ug *UGate) handleTCPEgress(bconn *nio.Stream) error { - bconn.Direction = nio.StreamTypeOut - - ft := forwardTo(bconn.Listener) - - bconn.Dest = ft - - bconn.ReadErr = ug.HandleStream(bconn) - return bconn.ReadErr -} - -// Auto-detect protocol on the wire, so routing info can be -// extracted: -// - TLS ( 22, 3) -// - HTTP -// - WS ( CONNECT ) -// - SOCKS (5) -// - H2 -// - TODO: HAproxy -//func sniff(pl *ugate.Listener, br *stream.Buffer) error { -// br.Sniff() -// var proto string -// -// for { -// _, err := br.Fill() -// if err != nil { -// return err -// } -// off := br.end -// if off >= 2 { -// b0 := br.buf[0] -// b1 := br.buf[1] -// if b0 == 5 { -// proto = ProtoSocks -// break -// } -// // TLS or SNI - based on the hostname we may terminate locally ! -// if b0 == 22 && b1 == 3 { -// // 22 03 01..03 -// proto = ProtoTLS -// break -// } -// } -// if off >= 7 { -// if bytes.Equal(br.buf[0:7], []byte("CONNECT")) { -// proto = ProtoConnect -// break -// } -// } -// if off >= len(h2ClientPreface) { -// if bytes.Equal(br.buf[0:len(h2ClientPreface)], h2ClientPreface) { -// proto = ProtoH2 -// break -// } -// } -// } -// -// // All bytes in the buffer will be Read again -// br.Reset(0) -// -// switch proto { -// case ProtoSocks: -// pl.gate.readSocksHeader(br) -// case ProtoTLS: -// pl.gate.sniffSNI(br) -// } -// br.Stream.Type = proto -// -// return nil -//} diff --git a/pkg/ugatesvc/handlers.go b/pkg/ugatesvc/handlers.go deleted file mode 100644 index 869e703..0000000 --- a/pkg/ugatesvc/handlers.go +++ /dev/null @@ -1,355 +0,0 @@ -package ugatesvc - -import ( - "bytes" - "encoding/json" - "io" - "log" - "net" - "net/http" - "strings" - "time" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" -) - -// HTTP handlers for admin, debug and testing - -// Control handler, also used for testing -type EchoHandler struct { -} - -var DebugEcho = false - -func (eh *EchoHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - if DebugEcho { - log.Println("ECHOH ", r) - } - w.WriteHeader(200) - w.(http.Flusher).Flush() - - // H2 requests require write to be flushed - buffering happens ! - // Wrap w.Body into Stream which does this automatically - str := nio.NewStreamRequest(r, w, nil) - - eh.handle(str, false) -} - -// StreamInfo tracks informations about one stream. -type StreamInfo struct { - LocalAddr net.Addr - RemoteAddr net.Addr - - Meta http.Header - - RemoteID string - - ALPN string - - Dest string - - Type string -} - -func GetStreamInfo(str *nio.Stream) *StreamInfo { - si := &StreamInfo{ - LocalAddr: str.LocalAddr(), - RemoteAddr: str.RemoteAddr(), - Dest: str.Dest, - Type: str.Type, - } - if str.Request != nil { - si.Meta = str.Request.Header - } - if str.TLS != nil { - si.ALPN = str.TLS.NegotiatedProtocol - } - - return si -} - -func (*EchoHandler) handle(str *nio.Stream, serverFirst bool) error { - d := make([]byte, 2048) - si := GetStreamInfo(str) - si.RemoteID = RemoteID(str) - b1, _ := json.Marshal(si) - b := &bytes.Buffer{} - b.Write(b1) - b.Write([]byte{'\n'}) - - if serverFirst { - str.Write(b.Bytes()) - } - //ac.SetDeadline(time.Now().StartListener(5 * time.Second)) - n, err := str.Read(d) - if err != nil { - return err - } - if DebugEcho { - log.Println("ECHO rcv", n, "strid", str.StreamId) - } - if !serverFirst { - str.Write(b.Bytes()) - } - str.Write(d[0:n]) - - io.Copy(str, str) - if nio.DebugClose { - log.Println("ECHO DONE", str.StreamId) - } - return nil -} -func (eh *EchoHandler) String() string { - return "Echo" -} -func (eh *EchoHandler) Handle(ac *nio.Stream) error { - if DebugEcho { - log.Println("ECHOS ", ac) - } - return eh.handle(ac, false) -} - -//func (h2p *H2P) InitPush(mux http.ServeMux) { -// mux.Handle("/push/*", h2p) -//} -// -//type H2P struct { -// // Key is peer WorkloadID. -// // TODO: multiple monitors per peer ? -// mons map[string]*Pusher -// -// // Active pushed connections. -// // Key is peerID / stream WorkloadID -// active map[string]*net.Stream -//} -// -//// Single Pusher - one for each monitor -//type Pusher struct { -// ch chan string -//} -// -//func NewPusher() *Pusher { -// return &Pusher{ -// ch: make(chan string, 10), -// } -//} -// -//func (h2p *H2P) ServeHTTP(w http.ResponseWriter, req *http.Request) { -// if strings.HasPrefix(req.URL.Path, "/push/mon/") { -// h2p.HTTPHandlerPushPromise(w, req) -// return -// } -// if strings.HasPrefix(req.URL.Path, "/push/up/") { -// h2p.HTTPHandlerPost(w, req) -// return -// } -// -// h2p.HTTPHandlerPush(w, req) -//} -// -//// Should be mapped to /push/* -//// If Method is GET ( standard stack ), only send the content of the con, expect -//// a separate connection for the POST side. -//func (h2p *H2P) HTTPHandlerPush(w http.ResponseWriter, req *http.Request) { -// w.WriteHeader(200) -// w.Write([]byte{1}) -// io.Copy(w, req.Body) -//} -// -//func (h2p *H2P) HTTPHandlerPost(w http.ResponseWriter, req *http.Request) { -// w.WriteHeader(200) -// w.Write([]byte{1}) -// io.Copy(w, req.Body) -//} -// -//// Hanging - will send push frames, corresponding HTTPHandlerPush will be called to service -//// the stream. When used with the 'standard' h2 stack only GET is supported. -//func (h2p *H2P) HTTPHandlerPushPromise(w http.ResponseWriter, req *http.Request) { -// w.WriteHeader(200) -// -// p := NewPusher() -// -// ctx := req.Context() -// for { -// select { -// case ev := <-p.ch: -// opt := &http.PushOptions{ -// Header: http.Header{ -// "User-Agent": {"foo"}, -// }, -// } -// // This will result in a separate handler to get the message -// if err := w.(http.Pusher).Push("/push/"+ev, opt); err != nil { -// fmt.Println("error pushing", err) -// return -// } -// case <-ctx.Done(): -// return -// } -// } -//} - -// Debug handlers - on default mux, on 15000 - -// curl -v http://s6.webinf.info:15000/... -// - /debug/vars -// - /debug/pprof - -func (gw *UGate) HttpTCP(w http.ResponseWriter, r *http.Request) { - gw.m.RLock() - defer gw.m.RUnlock() - w.Header().Add("content-type", "application/json") - err := json.NewEncoder(w).Encode(gw.ActiveTcp) - if err != nil { - log.Println("Error encoding ", err) - } -} - -// HttpNodesFilter returns the list of directly connected nodes. -// -// Optional 't' parameter is a timestamp used to filter recently seen nodes. -// Uses NodeByID table. -func (gw *UGate) HttpNodesFilter(w http.ResponseWriter, r *http.Request) { - gw.m.RLock() - defer gw.m.RUnlock() - r.ParseForm() - w.Header().Add("content-type", "application/json") - t := r.Form.Get("t") - rec := []*ugate.Cluster{} - t0 := time.Now() - for _, n := range gw.NodesByID { - if t != "" { - if t0.Sub(n.LastSeen) < 6000*time.Millisecond { - rec = append(rec, n) - } - } else { - rec = append(rec, n) - } - } - - je := json.NewEncoder(w) - je.SetIndent(" ", " ") - je.Encode(rec) - return -} - -func (gw *UGate) HttpH2R(w http.ResponseWriter, r *http.Request) { - gw.m.RLock() - defer gw.m.RUnlock() - - json.NewEncoder(w).Encode(gw.ActiveTcp) -} - -//// WIP: Istio-style signing -//func (gw *UGate) SignCert(w http.ResponseWriter, r *http.Request) { -// // TODO: json and raw proto -// // use a list of 'authorized' OIDC and roots ( starting with loaded istio and k8s pub ) -// // get the csr and sign -//} -// - -// HandleID is the first request in a MUX connection. -// -// If the request is authenticated, we'll track the node. -// For QUIC, mTLS handshake completes after 0RTT requests are received, so JWT is -// needed. -func (gw *UGate) HandleID(w http.ResponseWriter, r *http.Request) { - f := r.Header.Get("from") - if f == "" { - w.WriteHeader(http.StatusUnauthorized) - return - } - //n := gw.GetOrAddNode(f) - - w.WriteHeader(200) - w.Write([]byte(gw.Auth.ID)) -} - -// HandleTCPPRoxy is called for CONNECT and /dm/ADDRESS -// TODO: also handle /ipfs/... for compat. -func (gw *UGate) HandleTCPProxy(w http.ResponseWriter, r *http.Request) { - - // Create a stream, used for proxy with caching. - str := nio.NewStreamRequest(r, w, nil) - - if r.Method == "CONNECT" { - str.Dest = r.Host - } else { - parts := strings.Split(r.RequestURI, "/") - str.Dest = parts[2] - } - - str.PostDialHandler = func(conn net.Conn, err error) { - if err != nil { - w.Header().Add("Error", err.Error()) - w.WriteHeader(500) - w.(http.Flusher).Flush() - return - } - //w.Header().Set("Trailer", "X-Close") - w.WriteHeader(200) - w.(http.Flusher).Flush() - } - defer func() { - // Handler is done - even if it didn't call close, prevent calling it again. - if nio.DebugClose { - log.Println("HTTP.Close - handler done, no close ", str.Dest) - } - str.ServerClose = true - }() - - // Treat it as regular stream forwarding - gw.HandleVirtualIN(str) - - if nio.DebugClose { - log.Println("Handler closed for ", r.RequestURI) - } - -} - -// Inbound TLS over H2C. -// Used in KNative or similar environmnets that get a H2 POST or CONNECT -// Dest is local. -func (gw *UGate) HandleTLSoverH2(w http.ResponseWriter, r *http.Request) { - // Create a stream, used for proxy with caching. - str := nio.NewStreamRequest(r, w, nil) - - parts := strings.Split(r.RequestURI, "/") - str.Dest = parts[2] - - str.PostDialHandler = func(conn net.Conn, err error) { - if err != nil { - w.Header().Add("Error", err.Error()) - w.WriteHeader(500) - w.(http.Flusher).Flush() - return - } - //w.Header().Set("Trailer", "X-Close") - w.WriteHeader(200) - w.(http.Flusher).Flush() - } - defer func() { - // Handler is done - even if it didn't call close, prevent calling it again. - if nio.DebugClose { - log.Println("HTTP.Close - handler done, no close ", str.Dest) - } - str.ServerClose = true - }() - - tlsCfg := gw.TLSConfig - tc, err := gw.NewTLSConnIn(str.Context(), nil, nil, str, tlsCfg) - if err != nil { - str.ReadErr = err - log.Println("TLS: ", str.RemoteAddr(), str.Dest, err) - return - } - - // Treat it as regular stream forwarding - gw.HandleVirtualIN(tc) - - if nio.DebugClose { - log.Println("Handler closed for ", r.RequestURI) - } - -} diff --git a/pkg/ugatesvc/hbone.go b/pkg/ugatesvc/hbone.go deleted file mode 100644 index cb38ed9..0000000 --- a/pkg/ugatesvc/hbone.go +++ /dev/null @@ -1,193 +0,0 @@ -package ugatesvc - -import ( - "context" - "errors" - "fmt" - "io" - "log" - "net" - "net/http" - "runtime/debug" - "strings" - "time" - - "github.com/costinm/hbone/nio" - "golang.org/x/net/http2" -) - -// Dedicated BTS handler, for accepted connections with TLS. -// -// Port 443 (if root or redirected), or BASE + 7 -// -// curl https://$NAME/ --connect-to $NAME:443:127.0.0.1:15007 -func (ug *UGate) acceptedHbone(rawStream *nio.Stream) error { - - tlsCfg := ug.TLSConfig - tc, err := ug.NewTLSConnIn(rawStream.Context(), rawStream.Listener, nil, rawStream, tlsCfg) - if err != nil { - rawStream.ReadErr = err - log.Println("TLS: ", rawStream.RemoteAddr(), rawStream.Dest, err) - return nil - } - - // Handshake done. Now we have access to the ALPN. - tc.PostDial(tc, nil) - - // http2 and http expect a net.Listener, and do their own accept() - ug.H2Handler.h2Server.ServeConn( - tc, - &http2.ServeConnOpts{ - Handler: ug.H2Handler, // Also plain text, needs to be upgraded - Context: tc.Context(), // associated with the stream, with cancel - - //Context: // can be used to cancel, pass meta. - // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - }) - return nil -} - -// Handles an accepted connection with plain text h2, intended for -// hbone protocol. -func (ug *UGate) acceptedHboneC(tc *nio.Stream) error { - tc.PostDial(tc, nil) - ug.H2Handler.h2Server.ServeConn( - tc, - &http2.ServeConnOpts{ - Handler: http.HandlerFunc(ug.H2Handler.httpHandleHboneC), // Also plain text, needs to be upgraded - Context: tc.Context(), // associated with the stream, with cancel - //Context: // can be used to cancel, pass meta. - // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - }) - return nil -} - -func (l *H2Transport) httpHandleHboneC(w http.ResponseWriter, r *http.Request) { - t0 := time.Now() - defer func() { - // TODO: add it to an event buffer - l.ug.OnHClose("Hbone", "", "", r, time.Since(t0)) - - if r := recover(); r != nil { - fmt.Println("Recovered in hbone", r) - - debug.PrintStack() - - // find out exactly what the error was and set err - var err error - - switch x := r.(type) { - case string: - err = errors.New(x) - case error: - err = x - default: - err = errors.New("Unknown panic") - } - if err != nil { - fmt.Println("ERRROR: ", err) - } - } - }() - - // TODO: parse Envoy / hbone headers. - - if nio.DebugClose { - log.Println("Hbone-RoundTripStart ", r.Method, r.URL, r.Proto, r.Header, RemoteID, "", r.RemoteAddr) - } - - // TCP proxy for SSH - if r.Method == "CONNECT" || strings.HasPrefix(r.RequestURI, "/_hbone/") { - l.ug.HandleTCPProxy(w, r) - } - - tlsCfg := l.ug.TLSConfig - - // Create a stream, used for proxy with caching. - rawStream := nio.NewStreamRequest(r, w, nil) - - tc, err := l.ug.NewTLSConnIn(rawStream.Context(), rawStream.Listener, []string{"h2"}, rawStream, - tlsCfg) - if err != nil { - rawStream.ReadErr = err - log.Println("TLS: ", rawStream.RemoteAddr(), rawStream.Dest, err) - return - } - - // TODO: All Istio checks go here. The TLS handshake doesn't check - // root cert or anything - this is proof of concept only, to eval - // perf. - - if tc.TLS.NegotiatedProtocol == "h2" { - // http2 and http expect a net.Listener, and do their own accept() - l.ug.H2Handler.h2Server.ServeConn( - tc, - &http2.ServeConnOpts{ - Handler: http.HandlerFunc(l.ug.H2Handler.httpHandleHboneCHTTP), - Context: tc.Context(), // associated with the stream, with cancel - }) - } else { - // HTTP/1.1 - // TODO. Typically we want to upgrade over the wire to H2 - } -} - -// At this point we got the TLS stream over H2, and forward to the app -// We still need to know if the app is H2C or HTTP/1.1 -func (l *H2Transport) httpHandleHboneCHTTP(w http.ResponseWriter, r *http.Request) { - l.ForwardHTTP(w, r, "127.0.0.1:8080") -} - -// HboneCat copies stdin/stdout to a HBONE stream. -func HboneCat(ug *UGate, urlOrHost string, tls bool, stdin io.ReadCloser, - stdout io.WriteCloser) error { - i, o := io.Pipe() - - if !strings.HasPrefix(urlOrHost, "https://") { - h, p, err := net.SplitHostPort(urlOrHost) - if err != nil { - return err - } - urlOrHost = "https://" + h + "/hbone/:" + p - } - r, _ := http.NewRequest("POST", urlOrHost, i) - res, err := ug.RoundTrip(r) - if err != nil { - return err - } - - var nc *nio.Stream - if tls { - plain := nio.NewStreamRequestOut(r, o, res, nil) - nc, err = ug.NewTLSConnOut(context.Background(), plain, ug.TLSConfig, - "", []string{"h2"}) - if err != nil { - return err - } - } else { - nc = nio.NewStreamRequestOut(r, o, res, nil) - } - go func() { - b1 := make([]byte, 1024) - for { - n, err := nc.Read(b1) - if err != nil { - stdout.Close() - stdin.Close() - log.Println("Tun read err", err) - return - } - stdout.Write(b1[0:n]) - } - }() - - b1 := make([]byte, 1024) - for { - n, err := stdin.Read(b1) - if err != nil { - return err - } - nc.Write(b1[0:n]) - } - return nil -} diff --git a/pkg/ugatesvc/headers.go b/pkg/ugatesvc/headers.go deleted file mode 100644 index 1c96e41..0000000 --- a/pkg/ugatesvc/headers.go +++ /dev/null @@ -1,173 +0,0 @@ -package ugatesvc - -import ( - "bufio" - "bytes" - "encoding/binary" - "errors" - "log" - "net/http" - "net/textproto" - - "github.com/costinm/hbone/nio" -) - -// There are few options on how to pass stream metadata around: -// -// Transport proto: -// - H2 - clear protocol, but has overhead and complexity and because -// of muxing we can't splice -// -// Splice-able proto: -// - use HTTP/1.1 CONNECT - and mime headers -// - use HA Proxy - custom binary -// - use a proto (possibly with simplified proto parsing), like Istio -// - ??? -// -// A mixed mode is also possible - proto in a h2 or http header. -// Encoding/decoding speed and memory use are the key - technically -// all options can be supported. - -type MimeEncoder struct { -} - -func (*MimeEncoder) Unmarshal(s *nio.Stream) (done bool, err error) { - buf, err := s.Fill(5) - if err != nil { - return false, err - } - - len := binary.LittleEndian.Uint32(buf[1:]) - if len > 32*1024 { - return false, errors.New("header size") - } - - buf, err = s.Fill(5 + int(len)) - if err != nil { - return false, err - } - - hr := textproto.NewReader(bufio.NewReader(bytes.NewBuffer(buf[5:]))) - mh, err := hr.ReadMIMEHeader() - s.InHeader = http.Header(mh) - - // Skip the headers - - s.Skip(5 + int(len)) - - if nio.DebugClose { - log.Println("Stream.receiveHeaders ", s.StreamId, s.InHeader, s.RBuffer().Size()) - } - - return true, nil -} - -func (*MimeEncoder) Marshal(s *nio.Stream) error { - bb := s.WBuffer() - h := s.InHeader - if s.Direction == nio.StreamTypeOut || - s.Direction == nio.StreamTypeUnknown { - h = s.OutHeader - } - - bb.WriteByte(2) // To differentiate from regular H3, using 0 - bb.Write([]byte{0, 0, 0, 0}) - err := s.OutHeader.Write(bb) - data := bb.Bytes() - - binary.LittleEndian.PutUint32(data[1:], uint32(bb.Size()-5)) - if err != nil { - return err - } - - _, err = s.Write(data) - - if err != nil { - return err - } - - if nio.DebugClose { - log.Println("Stream.sendHeaders ", s.StreamId, h) - } - - return nil -} - -// BEncoder is a header encoder using a compact encoding, inspired -// from CBOR, CoAP, FlatBuffers. -// -// It is an experiment on evaluating impact of header format on -// latency for small requests (streams). -// -// I am trying to keep the actual encoding wire-compatible with protobuf, -// but with a careful proto: -// - flat - to avoid the length-prefix -// - short tags - look like 1 byte tag in other encodings -// - 'RoundTripStart' and 'end' fields - regular fields used as delimiters. -// Could also use (deprecated) RoundTripStart(3)/stop(4) group. -// See https://groups.google.com/g/protobuf/c/UKpsthqAmjw for benefits -// of the deprecated group. -// -// Tags use last 3 bits as: -// 0=varint, 1-64fixed, 2=len-delim, 5=32fixed. -type BEncoder struct { -} - -func (*BEncoder) AddHeader(s *nio.Stream, k, v []byte) { - bb := s.WBuffer() - if bb.Size() == 0 { - bb.WriteByte(0) - //bb.WriteByte(0x08) // tag=1, varint - bb.WriteUnint32(0) // header-RoundTripStart - } - bb.WriteByte(0x12) // tag=2, len-delim - bb.WriteVarint(int64(len(k))) - bb.Write(k) - bb.WriteByte(0x12) // tag=2, len-delim - bb.WriteVarint(int64(len(v))) - bb.Write(v) -} - -func (*BEncoder) Unmarshal(s *nio.Stream) (done bool, err error) { - h, err := s.Fill(5) - if err != nil { - return false, err - } - if h[0] != 0 { - return false, errors.New("unexpected delim") - } - - // WIP - - return true, nil -} - -func (*BEncoder) Marshal(s *nio.Stream) error { - bb := s.WBuffer() - h := s.InHeader - if s.Direction == nio.StreamTypeOut || - s.Direction == nio.StreamTypeUnknown { - h = s.OutHeader - } - // TODO: leave 5 bytes at RoundTripStart to reproduce streaming gRPC format - bb.WriteByte(0x08) // tag=1, varint - bb.WriteByte(1) // header-RoundTripStart - - for k, vv := range h { - for _, v := range vv { - bb.WriteByte(0x12) // tag=2, len-delim - bb.WriteVarint(int64(len(k))) - bb.Write([]byte(k)) - bb.WriteByte(0x12) // tag=2, len-delim - bb.WriteVarint(int64(len(v))) - bb.Write([]byte(v)) - } - } - bb.WriteByte(0x08) - bb.WriteByte(2) - - if nio.DebugClose { - log.Println("Stream.sendHeaders ", s.StreamId, h) - } - - return nil -} diff --git a/pkg/ugatesvc/http.go b/pkg/ugatesvc/http.go deleted file mode 100644 index 4f5a1d2..0000000 --- a/pkg/ugatesvc/http.go +++ /dev/null @@ -1,369 +0,0 @@ -package ugatesvc - -import ( - "bytes" - "crypto/tls" - "errors" - "fmt" - "log" - "net" - "net/http" - "os" - "runtime/debug" - "sync" - "time" - - "github.com/costinm/hbone/nio" - "github.com/costinm/meshauth" - "github.com/costinm/ugate" - "golang.org/x/net/http2" -) - -// HTTP2 based transport, using the standard library. -// This handles the main https port (BTS), as well as QUIC/H3 -// Will authenticate the request if possible ( JWT or mTLS ). - -// It also implements http.Handler, and can be registered with a HTTP/2 or HTTP/1 server. -// For HTTP/1 it will use websocket, with standard TLS and SPDY for crypto or mux. -// For HTTP/2 it will the normal connection if mTLS was negotiated. -// Otherwise will do a TLS+SPDY handshake for the POST method. -type H2Transport struct { - ug *UGate - - // the 'listener' object accepting - httpListener *listener - - // Transport object for http2 library - h2t *http2.Transport - h2Server *http2.Server - - // Included file server, for UI. - fs http.Handler - conns map[*http2.ClientConn]*ugate.Cluster - - m sync.RWMutex -} - -func NewH2Transport(ug *UGate) (*H2Transport, error) { - h2 := &H2Transport{ - ug: ug, - httpListener: newListener(), - conns: map[*http2.ClientConn]*ugate.Cluster{}, - h2t: &http2.Transport{ - ReadIdleTimeout: 10000 * time.Second, - StrictMaxConcurrentStreams: false, - AllowHTTP: true, - }, - } - h2.h2Server = &http2.Server{} - - if _, err := os.Stat("./www"); err == nil { - h2.fs = http.FileServer(http.Dir("./www")) - ug.Mux.Handle("/", h2.fs) - } - - //ug.Transport.HandleFunc("/h2r/", h2.HandleH2R) - - ug.Mux.HandleFunc("/_dm/", ug.HandleID) - ug.Mux.HandleFunc("/dm/", ug.HandleTCPProxy) - - ug.Mux.HandleFunc("/hbone/", ug.HandleTCPProxy) - ug.Mux.HandleFunc("/hbonec/", ug.HandleTLSoverH2) - ug.Mux.HandleFunc("/_hb/", ug.HandleTCPProxy) - ug.Mux.HandleFunc("/_hbc/", ug.HandleTLSoverH2) - - // Plain HTTP requests - we only care about CONNECT/ws - go http.Serve(h2.httpListener, h2) - - return h2, nil -} - -// Common entry point for H1, H2 - both plain and tls -// Will do the 'common' operations - authn, authz, logging, metrics for all BTS and regular HTTP. -// -// Important: -// When using for BTS we need to work around golang http stack implementation. -// This should be used as fallback - QUIC and WebRTC have proper mux and TUN support. -// In particular, while H2 POST and CONNECT allow req/res Body to act as TCP stream, -// the closing (FIN/RST) are very tricky: -// - ResponseWriter (in BTS server) does not have a 'Close' method, it is closed after -// the method returns. That means we can't signal the TCP FIN or RST, which breaks some -// protocols. -// - The request must be fully consumed before the method returns. -func (l *H2Transport) ServeHTTP(w http.ResponseWriter, r *http.Request) { - t0 := time.Now() - var RemoteID string - var SAN string - defer func() { - // TODO: add it to an event buffer - l.ug.OnHClose("HTTP", RemoteID, SAN, r, time.Since(t0)) - if r := recover(); r != nil { - fmt.Println("Recovered in f", r) - - debug.PrintStack() - - // find out exactly what the error was and set err - var err error - - switch x := r.(type) { - case string: - err = errors.New(x) - case error: - err = x - default: - err = errors.New("Unknown panic") - } - if err != nil { - fmt.Println("ERRROR: ", err) - } - } - }() - - // TODO: parse Envoy - // https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers - // In particular: - //x-forwarded-client-cert: By=http://frontend.lyft.com; - // Hash=468..; - // URI=http://testclient.lyft.com, - // By=http://backend.lyft.com; - // Hash=9ba61d6425303443; - // URI=http://frontend.lyft.com;DNS=foo.com - - vapidH := r.Header["Authorization"] - if len(vapidH) > 0 { - tok, pub, err := meshauth.CheckVAPID(vapidH[0], time.Now()) - if err == nil { - RemoteID = meshauth.IDFromPublicKeyBytes(pub) - SAN = tok.Sub - } - } - - tls := r.TLS - // If the request was handled by normal uGate listener. - us := r.Context().Value("nio.Stream") - if ugs, ok := us.(*nio.Stream); ok { - tls = ugs.TLS - r.TLS = tls - } - // other keys: - // - http-server (*http.Server) - // - local-addr - *net.TCPAddr - // - - if tls != nil && len(tls.PeerCertificates) > 0 { - pk1 := tls.PeerCertificates[0].PublicKey - RemoteID = meshauth.IDFromPublicKey(pk1) - // TODO: Istio-style, signed by a trusted CA. This is also for SSH-with-cert - sans, _ := meshauth.GetSAN(tls.PeerCertificates[0]) - if len(sans) > 0 { - SAN = sans[0] - } - } - // Using the 'from' header internally - if RemoteID != "" { - r.Header.Set("from", RemoteID) - } else { - r.Header.Del("from") - } - - if nio.DebugClose { - log.Println("HTTP-RoundTripStart ", r.Method, r.URL, r.Proto, r.Header, RemoteID, SAN, r.RemoteAddr) - } - - // TODO: authz for each case !!!! - - // Explicit hostname - forwardTo the node. - // The request may be a BTS TCP proxy or HTTP - either way forwarding is the same - // if the dest is a mesh node (BTS). - // - // Special case: local plain text http or http2 server ( sidecar ) - host, found := l.ug.Config.Clusters[r.Host] - if found { - l.ForwardHTTP(w, r, host.Addr) - return - } - - if r.Method == "CONNECT" { - l.ug.HandleTCPProxy(w, r) - return - } - - l.ug.Mux.ServeHTTP(w, r) -} - -// Handle accepted connection on a port declared as "http" -// Will sniff H2 and http/1.1 and use the right handler. -// -// Ex: curl localhost:9080/debug/vars --http2-prior-knowledge -func (t *H2Transport) handleHTTPListener(bconn *nio.Stream) error { - - err := SniffH2(bconn) - if err != nil { - return err - } - ctx := bconn.Context() - - if bconn.Type == ugate.ProtoH2 { - bconn.TLS = &tls.ConnectionState{ - Version: tls.VersionTLS12, - CipherSuite: tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - } - t.h2Server.ServeConn( - bconn, - &http2.ServeConnOpts{ - Handler: t, // Also plain text, needs to be upgraded - Context: ctx, // associated with the stream, with cancel - - //Context: // can be used to cancel, pass meta. - // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - }) - } else { - bconn.Type = ugate.ProtoHTTP - // TODO: identify 'the proxy protocol' - // port is marked as HTTP - assume it is HTTP - t.httpListener.incoming <- bconn - // TODO: wait for connection to be closed. - <-ctx.Done() - } - - return nil -} - -var ( - // ClientPreface is the string that must be sent by new - // connections from clients. - h2ClientPreface = []byte("PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n") -) - -func SniffH2(s *nio.Stream) error { - var proto string - - for { - buf, err := s.Fill(0) - if err != nil { - return err - } - - if ix := bytes.IndexByte(buf, '\n'); ix >= 0 { - if bytes.Contains(buf, []byte("HTTP/1.1")) { - proto = ugate.ProtoHTTP - break - } - } - if ix := bytes.IndexByte(buf, '\n'); ix >= 0 { - if bytes.Contains(buf, []byte("HTTP/2.0")) { - proto = ugate.ProtoH2 - break - } - } - } - - s.Type = proto - - return nil -} - -// Handle implements the connection interface for uGate, for HTTPS -// listeners. -// -// Blocking. -func (t *H2Transport) HandleHTTPS(str *nio.Stream) error { - // http2 and http expect a net.Listener, and do their own accept() - if str.TLS != nil && str.TLS.NegotiatedProtocol == "h2" { - t.h2Server.ServeConn( - str, - &http2.ServeConnOpts{ - Handler: t, // Also plain text, needs to be upgraded - Context: str.Context(), // associated with the stream, with cancel - - //Context: // can be used to cancel, pass meta. - // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - }) - return nil - } - - // Else: HTTP/1.1 - t.httpListener.incoming <- str - // TODO: wait for connection to be closed. - <-str.Context().Done() - - return nil -} - -func (l *H2Transport) Close() error { - return nil -} - -// Listener backed on an chan. Go HTTP stack requires a Listener -// implementation - use with http.Serve(). -// Used with a port sniffer - i.e. a real listener will identify HTTP -// and H2 requests, and dispatch to the channel listener for HTTP. -type listener struct { - l net.Listener - - closed chan struct{} - incoming chan net.Conn -} - -func newListener() *listener { - return &listener{ - incoming: make(chan net.Conn), - closed: make(chan struct{}), - } -} - -func (l *listener) Close() error { - if l.l != nil { - return l.l.Close() - } - l.closed <- struct{}{} - return nil -} - -func (l *listener) Addr() net.Addr { - return l.l.Addr() -} - -func (l *listener) Accept() (net.Conn, error) { - for { - select { - case c, ok := <-l.incoming: - - if !ok { - return nil, fmt.Errorf("listener is closed") - } - - //if l.t.Gater != nil && !(l.t.Gater.InterceptAccept(c) && l.t.Gater.InterceptSecured(n.DirInbound, c.RemotePeer(), c)) { - // c.Close() - // continue - //} - return c, nil - case <-l.closed: - return nil, fmt.Errorf("listener is closed") - } - } -} - -//type HttpClientStream struct { -// nio.Stream -// *http.Response -// request *http.Request -//} -// -//func NewHttpClientStream(s *nio.Stream) *HttpClientStream { -// h := &HttpClientStream{ -// } -// return h -//} -// -//type HttpServerStream struct { -// nio.Stream -// http.ResponseWriter -// request *http.Request -//} -// -//func NewHttpServerStream(s *nio.Stream) *HttpServerStream { -// h := &HttpServerStream{ -// } -// return h -//} diff --git a/pkg/ugatesvc/http_proxy.go b/pkg/ugatesvc/http_proxy.go deleted file mode 100644 index ed7e355..0000000 --- a/pkg/ugatesvc/http_proxy.go +++ /dev/null @@ -1,198 +0,0 @@ -package ugatesvc - -import ( - "context" - "io" - "log" - "net" - "net/http" - "strings" - - "github.com/costinm/hbone/nio" -) - -func (ht *H2Transport) ForwardHTTP(w http.ResponseWriter, r *http.Request, pathH string) { - r.Host = pathH - r1 := CreateUpstreamRequest(w, r) - - r1.URL.Scheme = "http" - - // will be used by RoundTrip. - r1.URL.Host = pathH - - // This uses the BTS/H2 protocol or reverse path. - // Forward to regular sites not supported. - res, err := ht.ug.RoundTrip(r1) - SendBackResponse(w, r, res, err) -} - -// Used by both ForwardHTTP and ForwardMesh, after RoundTrip is done. -// Will copy response headers and body -func SendBackResponse(w http.ResponseWriter, r *http.Request, - res *http.Response, err error) { - - if err != nil { - if res != nil { - CopyResponseHeaders(w.Header(), res.Header) - w.WriteHeader(res.StatusCode) - io.Copy(w, res.Body) - log.Println("Got ", err, res.Header) - } else { - http.Error(w, err.Error(), 500) - } - return - } - - origBody := res.Body - defer origBody.Close() - - CopyResponseHeaders(w.Header(), res.Header) - w.WriteHeader(res.StatusCode) - - stats := &nio.Stream{} - n, err := stats.CopyBuffered(w, res.Body, true) - - log.Println("Done: ", r.URL, res.StatusCode, n, err) -} - -// createUpstremRequest shallow-copies r into a new request -// that can be sent upstream. -// -// Derived from reverseproxy.go in the standard Go httputil package. -// Derived from caddy -func CreateUpstreamRequest(rw http.ResponseWriter, r *http.Request) *http.Request { - //ctx := r.Context() - //if cn, ok := rw.(http.CloseNotifier); ok { - // var cancel context.CancelFunc - // ctx, cancel = context.WithCancel(ctx) - // defer cancel() - // notifyChan := cn.CloseNotify() - // go func() { - // select { - // case <-notifyChan: - // cancel() - // case <-ctx.Done(): - // } - // }() - //} - ctx := context.Background() - - // URL, Form, TransferEncoding, Header, Trailer, URL - outreq := r.Clone(ctx) - - // We should set body to nil explicitly if request body is empty. - // For DmDns requests the Request Body is always non-nil. - if r.ContentLength == 0 { - outreq.Body = nil - } - if outreq.Header == nil { - outreq.Header = make(http.Header) // Issue 33142: historical behavior was to always allocate - } - outreq.Close = false - - // We are modifying the same underlying map from req (shallow - // copied above) so we only copy it if necessary. - copiedHeaders := false - - // Remove hop-by-hop headers listed in the "Connection" header. - // See RFC 2616, section 14.10. - if c := outreq.Header.Get("Connection"); c != "" { - for _, f := range strings.Split(c, ",") { - if f = strings.TrimSpace(f); f != "" { - if !copiedHeaders { - outreq.Header = make(http.Header) - CopyRequestHeaders(outreq.Header, r.Header) - copiedHeaders = true - } - outreq.Header.Del(f) - } - } - } - - // Remove hop-by-hop headers to the backend. Especially - // important is "Connection" because we want a persistent - // connection, regardless of what the client sent to us. - for _, h := range hopHeaders { - if outreq.Header.Get(h) != "" { - if !copiedHeaders { - outreq.Header = make(http.Header) - CopyRequestHeaders(outreq.Header, r.Header) - copiedHeaders = true - } - outreq.Header.Del(h) - } - } - - if clientIP, _, err := net.SplitHostPort(r.RemoteAddr); err == nil { - // If we aren't the first proxy, retain prior - // X-Forwarded-For information as a comma+space - // separated list and fold multiple headers into one. - if prior, ok := outreq.Header["X-Forwarded-For"]; ok { - clientIP = strings.Join(prior, ", ") + ", " + clientIP - } - outreq.Header.Set("X-Forwarded-For", clientIP) - } - - return outreq -} - -// Hop-by-hop headers. These are removed when sent to the backend in createUpstreamRequest -// http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html -var hopHeaders = []string{ - "Alt-Svc", - "Alternate-Protocol", - "Connection", - "Keep-Alive", - "HTTPGate-Authenticate", - "HTTPGate-Authorization", - "HTTPGate-Connection", // non-standard but still sent by libcurl and rejected by e.g. google - "Te", // canonicalized version of "TE" - "Trailer", // not Trailers per URL above; http://www.rfc-editor.org/errata_search.php?eid=4522 - "Transfer-Encoding", - "Upgrade", -} - -// used in createUpstreamRequetst to copy the headers to the new req. -func CopyRequestHeaders(dst, src http.Header) { - for k, vv := range src { - if _, ok := dst[k]; ok { - // skip some predefined headers - // see https://github.com/mholt/caddy/issues/1086 - if _, shouldSkip := skipHeaders[k]; shouldSkip { - continue - } - // otherwise, overwrite to avoid duplicated fields that can be - // problematic (see issue #1086) -- however, allow duplicate - // Server fields so we can see the reality of the proxying. - if k != "Server" { - dst.Del(k) - } - } - for _, v := range vv { - dst.Add(k, v) - } - } -} - -// Also used in httpproxy_capture, for forward http proxy -func CopyResponseHeaders(dst, src http.Header) { - for k := range dst { - dst.Del(k) - } - for k, vs := range src { - for _, v := range vs { - dst.Add(k, v) - } - } -} - -// skip these headers if they already exist. -// see https://github.com/mholt/caddy/pull/1112#discussion_r80092582 -var skipHeaders = map[string]struct{}{ - "Content-Type": {}, - "Content-Disposition": {}, - "accept-Ranges": {}, - "Set-Cookie": {}, - "Cache-Control": {}, - "Expires": {}, -} diff --git a/pkg/ugatesvc/port_listener.go b/pkg/ugatesvc/port_listener.go deleted file mode 100644 index d214463..0000000 --- a/pkg/ugatesvc/port_listener.go +++ /dev/null @@ -1,174 +0,0 @@ -package ugatesvc - -import ( - "errors" - "log" - "net" - "strings" - "time" - - "github.com/costinm/hbone" - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" -) - -// K8S: -// API_SERVER/api/v1/namespaces/%s/pods/%s/portforward -// Forwards a local port to the pod, using SPDY or Websocket. - -// Docs and other options: -//https://blog.ston3o.me/how-to-expose-local-server-behind-firewall/ -// - OpenVPN - easy to setup docker container -// - upnpc -// - tor -// ngrok - free 40 con/min -// pagekite - py, $3/month -// bleenco/localtunnel (go) -// localtunnel/localtunnel (js) -// yaler - commercial -// inlets / rancher remote dialer - -// socks bind standard - not commonly implemented - -// ssh -R remote_server_ip:12345:localhost:12345 -// - multiplexed over ssh TCP con, flow control per socket - -/* - byte SSH_MSG_CHANNEL_OPEN - string "forwarded-tcpip" - uint32 sender channel - - uint32 initial window size - uint32 maximum packet size - - string address that was connected - uint32 port that was connected - - string originator IP address - uint32 originator port -*/ - -// concourse TSA - uses ssh, default 2222 -// 'beacon' is effectively using ssh command to forward ports -// "golang.org/x/crypto/ssh" -//https://github.com/concourse/tsa/blob/master/tsacmd/server.go - -// Rancher 'Reverse Tunneling Dialer' and 'inlets': -// - use websocket - no multiplexing. -// - binary messages, using websocket frames - -// StartListener and Start a real port listener on a port. -// Virtual listeners can be added to ug.Conf or the mux. -func (ug *UGate) StartListener(ll *hbone.Listener) error { - - err := ug.startPortListener(ll) - if err != nil { - return err - } - - return nil -} - -// Creates a raw (port) TCP listener. Accepts connections -// on a local port, forwards to a remote destination. -func (gate *UGate) startPortListener(pl *hbone.Listener) error { - ll := pl - - if pl.Address == "" { - pl.Address = ":0" - } - - if pl.Address[0] == '-' { - return nil // virtual listener - } - - if pl.NetListener == nil { - if strings.HasPrefix(pl.Address, "/") || - strings.HasPrefix(pl.Address, "@") { - us, err := net.ListenUnix("unix", - &net.UnixAddr{ - Name: pl.Address, - Net: "unix", - }) - if err != nil { - return err - } - pl.NetListener = us - } else { - // Not supported: RFC: address "" means all families, 0.0.0.0 IP4, :: IP6, localhost IP4/6, etc - listener, err := net.Listen("tcp", ll.Address) - if err != nil { - host, _, _ := net.SplitHostPort(ll.Address) - ll.Address = host + ":0" - listener, err = net.Listen("tcp", ll.Address) - if err != nil { - log.Println("failed-to-listen", err) - return err - } - } - pl.NetListener = listener - } - } - switch pl.Protocol { - case ugate.ProtoTLS: - pl.PortHandler = nio.HandlerFunc(gate.handleSNI) - case ugate.ProtoSNI: - pl.PortHandler = nio.HandlerFunc(gate.handleSNI) - case ugate.ProtoBTS: - pl.PortHandler = nio.HandlerFunc(gate.acceptedHbone) - case ugate.ProtoBTSC: - pl.PortHandler = nio.HandlerFunc(gate.acceptedHboneC) - case ugate.ProtoHTTP: - pl.PortHandler = nio.HandlerFunc(gate.H2Handler.handleHTTPListener) - case ugate.ProtoTCPOut: - if pl.ForwardTo == "" { - return errors.New("invalid TCPOut, missing ForwardTo") - } - pl.PortHandler = nio.HandlerFunc(gate.handleTCPEgress) - case ugate.ProtoTCPIn: - if pl.ForwardTo == "" { - return errors.New("invalid TCPIn, missing ForwardTo") - } - pl.PortHandler = nio.HandlerFunc(gate.handleTCPForward) - default: - log.Println("Unspecified port, default to forward (in)") - pl.PortHandler = nio.HandlerFunc(gate.handleTCPForward) - } - - go serve(ll, gate) - return nil -} - -// For -R, runs on the remote ssh server to accept connections and forward back to client, which in turn -// will forward to a Port/app. -// Blocking. -func serve(pl *hbone.Listener, gate *UGate) { - log.Println("uGate: listen ", pl.Address, pl.NetListener.Addr(), pl.ForwardTo, pl.Protocol, pl.Handler, pl.PortHandler) - for { - remoteConn, err := pl.NetListener.Accept() - ugate.VarzAccepted.Add(1) - if ne, ok := err.(net.Error); ok { - ugate.VarzAcceptErr.Add(1) - if ne.Temporary() { - time.Sleep(100 * time.Millisecond) - continue - } - } - if err != nil { - log.Println("Accept error, closing listener ", pl, err) - return - } - if pl.PortHandler != nil { - go func() { - bconn := nio.GetStream(remoteConn, remoteConn) - bconn.Listener = pl - bconn.Type = pl.Protocol - gate.OnStream(bconn) - defer gate.OnStreamDone(bconn) - - pl.PortHandler.Handle(bconn) - }() - return - } - } -} diff --git a/pkg/ugatesvc/reverse.go b/pkg/ugatesvc/reverse.go deleted file mode 100644 index fa7e4e4..0000000 --- a/pkg/ugatesvc/reverse.go +++ /dev/null @@ -1,99 +0,0 @@ -package ugatesvc - -import ( - "context" - "log" - "net" - "time" - - "github.com/costinm/ugate" -) - -// Reverse tunnel: create a persistent connection to a gateway, and -// accept connections over that connection. -// -// The gateway registers the current endpoint with it's own IP:port -// (for example WorkloadEntry or Endpoint or in-memory ), and forwards accepted requests over the -// established connection. - -// UpdateReverseAccept updates the upstream accept connections, based on config. -// Should be called when the config changes -func (t *H2Transport) UpdateReverseAccept() { - ev := make(chan string) - for addr, key := range t.ug.Config.H2R { - // addr is a hostname - dm := t.ug.GetOrAddNode(addr) - if dm.Addr == "" { - if key == "" { - dm.Addr = net.JoinHostPort(addr, "443") - } else { - dm.Addr = net.JoinHostPort(addr, "15007") - } - } - - go t.maintainPinnedConnection(dm, ev) - } - <-ev - log.Println("maintainPinned connected for ", t.ug.Auth.VIP6) - -} - -// Reverse Accept dials a connection to addr, and registers a H2 SERVER -// conn on it. The other end will register a H2 client, and create streams. -// The client cert will be used to associate incoming streams, based on config or direct mapping. -// TODO: break it in 2 for tests to know when accept is in effect. -func (t *H2Transport) maintainPinnedConnection(dm *ugate.Cluster, ev chan string) { - // maintain while the host is in the 'pinned' list - if _, f := t.ug.Config.H2R[dm.ID]; !f { - return - } - - //ctx := context.Background() - if dm.Backoff == 0 { - dm.Backoff = 1000 * time.Millisecond - } - - ctx := context.TODO() - //ctx, ctxCancel := context.WithTimeout(ctx, 5*time.Second) - //defer ctxCancel() - - protos := []string{"quic", "h2r"} - var err error - var muxer ugate.Muxer - for _, k := range protos { - muxer, err = t.ug.DialMUX(ctx, k, dm, nil) - if err == nil { - break - } - } - if err == nil { - log.Println("UP: ", dm.Addr, muxer) - // wait for mux to be closed - dm.Backoff = 1000 * time.Millisecond - return - } - - log.Println("UP: err", dm.Addr, err, dm.Backoff) - // Failed to connect - if dm.Backoff < 15*time.Minute { - dm.Backoff = 2 * dm.Backoff - } - - time.AfterFunc(dm.Backoff, func() { - t.maintainPinnedConnection(dm, ev) - }) - - // p := str.TLS.NegotiatedProtocol - //if p == "h2r" { - // // Old code used the 'raw' TLS connection to create a server connection - // t.h2Server.ServeConn( - // str, - // &http2.ServeConnOpts{ - // Handler: t, // Also plain text, needs to be upgraded - // Context: str.Context(), - // - // //Context: // can be used to cancel, pass meta. - // // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - // }) - //} -} diff --git a/pkg/ugatesvc/routing.go b/pkg/ugatesvc/routing.go deleted file mode 100644 index d3aa28c..0000000 --- a/pkg/ugatesvc/routing.go +++ /dev/null @@ -1,373 +0,0 @@ -package ugatesvc - -import ( - "context" - "errors" - "io" - "log" - "net" - "net/http" - "strings" - "time" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" - "golang.org/x/net/http2" -) - -// After a Stream ( TCP+meta or HTTP ) is accepted/captured, we need to route it based on -// the config. -// -// Use cases: -// - Ingress: proxy to a local port on the same machine or in-process handler -// - Relay to mesh: use BTS or H2R to another gate. Dest is a mesh node. -// - Egress to internet - forward to a non-mesh node, on original port. -// Can be TCP(incl TLS) or HTTP. Client MUST be local or trusted -// - Gateway to a non-mesh node - probably should not be supported, subcase -// of 'ingress' but using a non-local address. - -var NotFound = errors.New("not found") - -func (ug *UGate) Dial(netw, addr string) (net.Conn, error) { - return ug.DialContext(context.Background(), netw, addr) -} - -// DialTLS opens a direct TLS connection using the dialer for TCP. -// No peer verification - the returned stream will have the certs. -// addr is a real internet address, not a mesh one. -// -// Used internally to create the raw TLS connections to both mesh -// and non-mesh nodes. -func (ug *UGate) DialTLS(ctx context.Context, addr string, alpn []string) (*nio.Stream, error) { - ctx1, cf := context.WithTimeout(ctx, 5*time.Second) - defer cf() - tcpC, err := ug.parentDialer.DialContext(ctx1, "tcp", addr) - if err != nil { - return nil, err - } - // TODO: parse addr as URL or VIP6 extract peer WorkloadID - t, err := ug.NewTLSConnOut(ctx1, tcpC, ug.TLSConfig, "", alpn) - if err != nil { - return nil, err - } - return t, nil -} - -// Primary function for egress streams, after metadata has been parsed. -// -// RoundTripStart the target and proxy to it. -// - if Dest is a mesh node, use BTS -// - else use TCP proxy. -// -// -// str.Dest is the destination hostname:port or hostname. -// - -func (ug *UGate) DialAndProxy(str *nio.Stream) error { - - nc, err := ug.dial(context.Background(), str.Dest, str) - str.PostDial(nc, err) - if err != nil { - // postDial will take care of sending error code. - return err - } - defer nc.Close() - - // RoundTripStart may begin streaming from input connection to the dialed. - // When dial return, the headers from dialed con are received. - - if ncs, ok := nc.(*nio.Stream); ok { - if ncs.OutHeader != nil { - CopyResponseHeaders(str.Header(), ncs.OutHeader) - } - str.Flush() - } - - return str.ProxyTo(nc) -} - -// Stream received via a BTS SNI route. -// Similar with dialAndProxy -func (ug *UGate) HandleSNIStream(str *nio.Stream) error { - idx := strings.Index(str.Dest, ".") - if idx > 0 { - // Only SNI route to mesh nodes, ignore the domain name - str.Dest = str.Dest[0:idx] - } - - nc, err := ug.dial(context.Background(), str.Dest, str) - str.PostDial(nc, err) - - if err != nil { - // postDial will take care of sending error code. - return err - } - defer nc.Close() - - return str.ProxyTo(nc) -} - -// DialContext creates connection to the remote addr, implements -// x.net.proxy.ContextDialer and ugate.ContextDialer. -// -// Used for integration with other libraries without dependencies. -// Does not support metatada or 0-RTT sending or piping an existing stream. -func (ug *UGate) DialContext(ctx context.Context, netw, addr string) (net.Conn, error) { - host, _, err := net.SplitHostPort(addr) - n := ug.GetNode(host) - if n != nil { - // Mesh node - return ug.dial(ctx, addr, nil) - } - - //ug.dial(addr, ) - - // Use the Dialer passed as an option, may do additional proxying - // for the TCP connection. - tcpC, err := ug.parentDialer.DialContext(ctx, "tcp", addr) - if err != nil { - return nil, err - } - - if "tls" == netw { - // TODO: parse addr as URL or VIP6 extract peer WorkloadID - return ug.NewTLSConnOut(ctx, tcpC, ug.TLSConfig, "", nil) - } - - return tcpC, err -} - -// DialMUX creates an association with the node, using one of the supported -// transports. -// -// The node should have at least the address or public key or hash populated. -// -// If it has real endpoint address - we can use the associated protocol. -// Else we can try all supported protos. -func (ug *UGate) DialMUX(ctx context.Context, net string, node *ugate.Cluster, ev func(t string, stream *nio.Stream)) (ugate.Muxer, error) { - // TODO: list, try them all. - rd := ug.MuxDialers[net] - if rd == nil { - return nil, errors.New("Not found " + net) - } - return rd.DialMux(ctx, node, nil, ev) -} - -// This should be called when any MUX is created ( either way ) -func (ug *UGate) OnMUX(node *ugate.Cluster) error { - - return nil -} - -// Using pipe: 345Mbps -// -// Not using: constant 440Mbps. -// The QUIC read buffer is 8k -const usePipe = false - -// Dial creates a stream to the given address. -func (ug *UGate) dial(ctx context.Context, addr string, s *nio.Stream) (net.Conn, error) { - // sets clientEventContextKey - if ctx is used for a round trip, will - // set all data. - // Will also make sure DNSStart, Connect, etc are set (if we want to) - //ctx, cancel := context.WithCancel(bconn.Meta().Request.Context()) - //ctx := httptrace.WithClientTrace(bconn.Meta().Request.Context(), - // &bconn.Meta().ClientTrace) - //ctx = context.WithValue(ctx, "ugate.conn", bconn) - var nc net.Conn - var err error - - // Extract a mesh WorkloadID from the address, return the WorkloadID or "" - nid := ug.Auth.Host2ID(addr) - - // Destination is a mesh WorkloadID, not a host:port. Use the discovery or - // existing reverse connections. - // RoundTripStart out via an existing 'reverse h2' connection - dmn := ug.GetNode(nid) // no port - if dmn != nil { - rt := dmn.Muxer - - if rt != nil { - // We have an active reverse RoundTripper for the host. - var in io.Reader - var out io.WriteCloser - - h, port, _ := net.SplitHostPort(addr) - - if dd, ok := rt.(ugate.StreamDialer); ok { - return dd.DialStream(ctx, "127.0.0.1:"+port, s) - } - - if usePipe || s == nil || s.In == nil { - in, out = io.Pipe() // pipe.New() - //in = p - //out = p - } else { - in = s.In - } - - // Regular TCP stream, upgraded to H2. - // This is a simple tunnel, so use the right URL - r1, err := http.NewRequestWithContext(ctx, "POST", - "https://"+h+"/dm/127.0.0.1:"+port, in) - - // RoundTrip Transport guarantees this is set - if r1.Header == nil { - r1.Header = make(http.Header) - } - - // RT client - forward the request. - res, err := rt.RoundTrip(r1) - if err != nil { - log.Println("H2R error", addr, err) - return nil, err - } - - rs := nio.NewStreamRequestOut(r1, out, res, nil) - if nio.DebugClose { - log.Println(rs.StreamId, "dial.TUN: ", addr, r1.URL) - } - return rs, nil - } - - if dmn.Addr != "" { - addr = dmn.Addr - } - } - - // TODO: if it is a mesh node, create a connection ! - - // TODO: use discovery to map VIPs or key-based hosts to real addr - // TODO: use local announces - // TODO: use VPN server for all or for mesh - - nc, err = ug.parentDialer.DialContext(context.Background(), "tcp", addr) - if err != nil { - log.Println("Failed to connect ", addr, err) - return nil, err - } - - if dmn != nil { - lconn, err := ug.NewTLSConnOut(ctx, nc, ug.TLSConfig, "", nil) - if err != nil { - return nil, err - } - nc = lconn - } - - return nc, nil -} - -// TODO: implement H2 ClientConnPool -// HTTP round-trip using the mesh connections. Will use H2 and the mesh -// auth protocol, on the BTS port. -func (ug *UGate) RoundTrip(req *http.Request) (*http.Response, error) { - cc, err := ug.H2Handler.GetClientConn(req, req.Host) - if err != nil { - return nil, err - } - return cc.RoundTrip(req) -} - -func (t *H2Transport) MarkDead(h2c *http2.ClientConn) { - t.m.Lock() - dmn := t.conns[h2c] - if dmn != nil { - dmn.Muxer = nil - log.Println("Dead", dmn.ID, h2c) - } - t.m.Unlock() -} - -// GetClientConn returns H2 multiplexed client connection for connecting to a mesh host. -// -// Part of x.net.http2.ClientConnPool interface. -// addr is a host:port, based on the URL host. -// The result implements RoundTrip interface. -func (t *H2Transport) GetClientConn(req *http.Request, addr string) (*http2.ClientConn, error) { - // The h2 Transport has support for dialing TLS, with the std handshake. - // It is possible to replace Transport.DialTLS, used in clientConnPool - // which tracks active connections. Or specify a custom conn pool. - - // addr is either based on req.Host or the resolved IP, in which case Host must be used for TLS verification. - - nid := t.ug.Auth.Host2ID(addr) - // TODO: if mesh node, don't attempt to dial directly - dmn := t.ug.GetNode(nid) - if dmn != nil { - rt := dmn.Muxer - if rt != nil { - if rtc, ok := rt.(*http2.ClientConn); ok { - return rtc, nil - } - } - - // TODO: if we don't have addr, use discovery - - // TODO: if discovery doesn't return an address, use upsteram gate. - if dmn.Addr == "" { - return nil, NotFound - } - // Real address - - addr = dmn.Addr - } - var tc *nio.Stream - var err error - // TODO: use local announces - // TODO: use VPN server for all or for mesh - if req.URL.Scheme == "http" { - rc, err := t.ug.DialContext(req.Context(), "tcp", addr) - if err != nil { - return nil, err - } - tc = nio.NewStream() - tc.In = rc - tc.Out = rc - } else { - tc, err = t.ug.DialTLS(req.Context(), addr, []string{"h2"}) - if err != nil { - return nil, err - } - } - - // TODO: reuse connection or use egress server - // TODO: track it by addr - - cc, err := t.ug.H2Handler.h2t.NewClientConn(tc) - - if dmn != nil { - // Forward connection ok too. - dmn.Muxer = cc - } - return cc, err -} - -// CreateStream will open a stream to a node. -// -// The httpRequest may include metadata (headers), URL and a body. -// If a body is not provided, a pipe will be created - the result is a -// net.Stream and can be used as such. -// -// - http.Client is specialized on HTTP requests model - has a cookie jar, -// redirects, deals with idle connections, etc. -// - http.Client.Do() requires req.URL to be set, as well as Body -// The request body is closed at the end of Do. -// - in http client, URL must be set and RequestURI must be empty. -// - RoundTripper takes a request and returns a *Response. -// -// http.Transport supports schem->RoundTripper map ! -// It also supports HTTPS, HTTPProxies, connection caching - should be -// reused. - -// http.Client also sets Authorization Basic, Cookies -// and has its own timeout. - -// it also has a heuristic of looking for the type of the -// round tripper, checking for *http2.Transport name to -// guess if it supports context. - -// TODO: implement RoundTrip, Muxer in UGate - as main interface -// TODO: convert client HttpRequest + Response to stream -// TODO: convert server HttpReq+Res to stream. -// TODO: 'messages' is a one-way http request -// TODO: support 'GET' diff --git a/pkg/ugatesvc/run.go b/pkg/ugatesvc/run.go deleted file mode 100644 index 0438898..0000000 --- a/pkg/ugatesvc/run.go +++ /dev/null @@ -1,29 +0,0 @@ -package ugatesvc - -import ( - "log" - - "github.com/costinm/ugate" -) - -func Run(config ugate.ConfStore, g *ugate.MeshSettings) (*UGate, error) { - // RoundTripStart a Gate. Basic H2 and H2R services enabled. - ug := New(config, nil, g) - - sf := []StartFunc{} - if InitHooks != nil { - for _, h := range InitHooks { - s := h(ug) - if s != nil { - sf = append(sf, s) - } - } - } - - for _, h := range sf { - go h(ug) - } - ug.Start() - log.Println("Started: ", ug.Auth.ID) - return ug, nil -} diff --git a/pkg/ugatesvc/tls_conn.go b/pkg/ugatesvc/tls_conn.go deleted file mode 100644 index 84a264f..0000000 --- a/pkg/ugatesvc/tls_conn.go +++ /dev/null @@ -1,362 +0,0 @@ -package ugatesvc - -import ( - "context" - "crypto/tls" - "crypto/x509" - "errors" - "log" - "net" - "strings" - "sync" - - "github.com/costinm/hbone/nio" - "github.com/costinm/meshauth" - "github.com/costinm/ugate" -) - -// TLSConn extends tls.Conn with extra metadata. -// Adds the Proxy() method, implements ReadFrom and WriteTo using recycled buffers. -type TLSConn struct { - // Raw TCP connection, for remote address and stats - // TODO: for H2-over-TLS-over-WS, it will be a WS conn - *nio.Stream - - // wrapps the original conn for Local/RemoteAddress and deadlines - // Implements CloseWrite, ConnectionState, - tls *tls.Conn -} - -func (ug *UGate) NewTLSConnOut(ctx context.Context, nc net.Conn, cfg *tls.Config, peerID string, alpn []string) (*nio.Stream, error) { - lc := &TLSConn{} - if mc, ok := nc.(*nio.Stream); ok { - lc.Stream = mc - if rnc, ok := lc.Out.(net.Conn); ok { - nc = rnc - } - } else { - lc.Stream = nio.NewStream() - } - - config, keyCh := ConfigForPeer(ug.Auth, cfg, peerID) - if alpn != nil { - config.NextProtos = alpn - } - lc.tls = tls.Client(nc, config) - cs, _, err := lc.handshake(ctx, keyCh) - if err != nil { - return nil, err - } - lc.Stream.In = lc.tls - lc.Stream.Out = lc.tls - - //lc.tls.ConnectionState().DidResume - tcs := lc.tls.ConnectionState() - lc.Stream.TLS = &tcs - lc.tls = cs - - return lc.Stream, err -} - -// SecureInbound runs the TLS handshake as a server. -// Accepts connections without client certificate - alternate form of auth will be used, either -// an inner TLS connection or JWT in metadata. -func (ug *UGate) NewTLSConnIn(ctx context.Context, l net.Listener, alpn []string, nc net.Conn, cfg *tls.Config) (*nio.Stream, error) { - config, keyCh := ConfigForPeer(ug.Auth, cfg, "") - if alpn == nil { - config.NextProtos = []string{"h2r", "h2"} - } else { - config.NextProtos = alpn - } - tc := &TLSConn{} - tc.Stream = nio.NewStream() - if mc, ok := nc.(*nio.Stream); ok { - m := mc - // Sniffed, etc - tc.Route = m.Route - tc.Dest = m.Dest - } - - tc.tls = tls.Server(nc, config) - cs, _, err := tc.handshake(ctx, keyCh) - tc.tls = cs - if err != nil { - return nil, err - } - tcs := tc.tls.ConnectionState() - tc.Stream.TLS = &tcs - tc.Stream.In = tc.tls - tc.Stream.Out = tc.tls - - return tc.Stream, err -} - -func ConfigForPeer(a *meshauth.MeshAuth, cfg *tls.Config, remotePeerID string) (*tls.Config, <-chan []*x509.Certificate) { - keyCh := make(chan []*x509.Certificate, 1) - // We need to check the peer WorkloadID in the VerifyPeerCertificate callback. - // The tls.Config it is also used for listening, and we might also have concurrent dials. - // Clone it so we can check for the specific peer WorkloadID we're dialing here. - conf := cfg.Clone() - // We're using InsecureSkipVerify, so the verifiedChains parameter will always be empty. - // We need to parse the certificates ourselves from the raw certs. - conf.VerifyPeerCertificate = func(rawCerts [][]byte, _ [][]*x509.Certificate) error { - defer close(keyCh) - - if remotePeerID == "" && len(rawCerts) == 0 { - // Legacy infrastructure, client certs not transmitted. - keyCh <- nil - return nil - } - - chain, err := meshauth.RawToCertChain(rawCerts) - if err != nil { - return err - } - - pubKey, err := meshauth.PubKeyFromCertChain(chain) - //pubKeyPeerID := auth.IDFromCert(chain) - pubKeyPeerID := meshauth.IDFromPublicKey(pubKey) - if err != nil { - return err - } - - // TODO: also verify the SAN (Istio and DNS style) - - if remotePeerID != "" && - remotePeerID != pubKeyPeerID { - return errors.New("peer IDs don't match") - } - keyCh <- chain - return nil - } - return conf, keyCh -} - -func (pl *TLSConn) handshake( - ctx context.Context, - keyCh <-chan []*x509.Certificate, -) (*tls.Conn, []*x509.Certificate, error) { - - // There's no way to pass a context to tls.Stream.Handshake(). - // See https://github.com/golang/go/issues/18482. - // Close the connection instead. - - done := make(chan struct{}) - var wg sync.WaitGroup - - // Ensure that we do not return before - // either being done or having a context - // cancellation. - defer wg.Wait() - defer close(done) - - wg.Add(1) - - go func() { - defer wg.Done() - select { - case <-done: - case <-ctx.Done(): - pl.tls.Close() - } - }() - - if err := pl.tls.Handshake(); err != nil { - // if the context was canceled, return the context error - if ctxErr := ctx.Err(); ctxErr != nil { - return nil, nil, ctxErr - } - return nil, nil, err - } - - // Should be ready by this point, don't block. - var remotePubKey []*x509.Certificate - select { - case remotePubKey = <-keyCh: - default: - } - - // Also: - //tlsConn.ConnectionState().PeerCertificates - //t.RemotePub = remotePubKey - // - //// At this point the BufferedCon unsecure connection can't be used. - //t.Stream = tlsConn - - return pl.tls, remotePubKey, nil -} - -var sniErr = errors.New("Invalid TLS") - -type clientHelloMsg struct { // 22 - vers uint16 - random []byte - sessionId []byte - cipherSuites []uint16 - compressionMethods []uint8 - nextProtoNeg bool - serverName string - ocspStapling bool - scts bool - supportedPoints []uint8 - ticketSupported bool - sessionTicket []uint8 - secureRenegotiation []byte - alpnProtocols []string -} - -// TLS extension numbers -const ( - extensionServerName uint16 = 0 -) - -// TODO: if a session WorkloadID is provided, use it as a cookie and attempt -// to find the corresponding host. -// On server side generate session IDs ! -// -// TODO: in mesh, use one cypher suite (TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) -// maybe 2 ( since keys are ECDSA ) -func ParseTLS(acc *nio.Stream) (*clientHelloMsg, error) { - buf, err := acc.Fill(5) - if err != nil { - return nil, err - } - typ := buf[0] // 22 3 1 2 0 - if typ != 0x16 { - return nil, sniErr - } - vers := uint16(buf[1])<<8 | uint16(buf[2]) - if vers != 0x301 { - log.Println("Version ", vers) - } - - rlen := int(buf[3])<<8 | int(buf[4]) - if rlen > 4096 { - log.Println("RLen ", rlen) - return nil, sniErr - } - - off := 5 - m := clientHelloMsg{} - - end := rlen + 5 - buf, err = acc.Fill(end) - if err != nil { - return nil, err - } - clientHello := buf[5:end] - chLen := end - 5 - - if chLen < 38 { - log.Println("chLen ", chLen) - return nil, sniErr - } - - // off is the last byte in the buffer - will be forwarded - - m.vers = uint16(clientHello[4])<<8 | uint16(clientHello[5]) - // random: data[6:38] - - sessionIdLen := int(clientHello[38]) - if sessionIdLen > 32 || chLen < 39+sessionIdLen { - log.Println("sLen ", sessionIdLen) - return nil, sniErr - } - m.sessionId = clientHello[39 : 39+sessionIdLen] - off = 39 + sessionIdLen - - // cipherSuiteLen is the number of bytes of cipher suite numbers. Since - // they are uint16s, the number must be even. - cipherSuiteLen := int(clientHello[off])<<8 | int(clientHello[off+1]) - off += 2 - if cipherSuiteLen%2 == 1 || chLen-off < 2+cipherSuiteLen { - return nil, sniErr - } - - //numCipherSuites := cipherSuiteLen / 2 - //m.cipherSuites = make([]uint16, numCipherSuites) - //for i := 0; i < numCipherSuites; i++ { - // m.cipherSuites[i] = uint16(data[2+2*i])<<8 | uint16(data[3+2*i]) - //} - off += cipherSuiteLen - - compressionMethodsLen := int(clientHello[off]) - off++ - if chLen-off < 1+compressionMethodsLen { - return nil, sniErr - } - //m.compressionMethods = data[1 : 1+compressionMethodsLen] - off += compressionMethodsLen - - if off+2 > chLen { - // ClientHello is optionally followed by extension data - return nil, sniErr - } - - extensionsLength := int(clientHello[off])<<8 | int(clientHello[off+1]) - off = off + 2 - if extensionsLength != chLen-off { - return nil, sniErr - } - - for off < chLen { - extension := uint16(clientHello[off])<<8 | uint16(clientHello[off+1]) - off += 2 - length := int(clientHello[off])<<8 | int(clientHello[off+1]) - off += 2 - if off >= end { - return nil, sniErr - } - - switch extension { - case extensionServerName: - d := clientHello[off : off+length] - if len(d) < 2 { - return nil, sniErr - } - namesLen := int(d[0])<<8 | int(d[1]) - d = d[2:] - if len(d) != namesLen { - return nil, sniErr - } - for len(d) > 0 { - if len(d) < 3 { - return nil, sniErr - } - nameType := d[0] - nameLen := int(d[1])<<8 | int(d[2]) - d = d[3:] - if len(d) < nameLen { - return nil, sniErr - } - if nameType == 0 { - m.serverName = string(d[:nameLen]) - // An SNI value may not include a - // trailing dot. See - // https://tools.ietf.org/html/rfc6066#section-3. - if strings.HasSuffix(m.serverName, ".") { - return nil, sniErr - } - break - } - d = d[nameLen:] - } - default: - //log.Println("TLS Ext", extension, length) - } - - off += length - } - - // Does not contain port !!! Assume the port is 443, or map it. - - // TODO: unmangle server name - port, mesh node - - if m.serverName != "" { - //destAddr := m.serverName + ":443" - acc.Dest = m.serverName - } - acc.Type = ugate.ProtoTLS - - return &m, nil -} diff --git a/pkg/ugatesvc/ugate.go b/pkg/ugatesvc/ugate.go deleted file mode 100644 index b1673f4..0000000 --- a/pkg/ugatesvc/ugate.go +++ /dev/null @@ -1,584 +0,0 @@ -package ugatesvc - -import ( - "crypto/tls" - "crypto/x509" - "encoding/json" - "errors" - "fmt" - "log" - "net" - "net/http" - "os" - "runtime/debug" - "strconv" - "strings" - "sync" - "time" - - "github.com/costinm/hbone" - "github.com/costinm/hbone/nio" - "github.com/costinm/meshauth" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/cfgfs" - msgs "github.com/costinm/ugate/webpush" -) - -type StartFunc func(ug *UGate) - -// TODO: convert them to take cfg as input, return an interface. -// The interface should have CfgEvent(xx), with empty indicating start. -// A Map[component]CfgEvent will be maintained. The interface impl may be the UGate -var InitHooks []func(gate *UGate) StartFunc - -type UGate struct { - Config *ugate.MeshSettings - - // Default dialer used to connect to host:port extracted from metadata. - // Defaults to net.Dialer, making real connections. - // - // Can be replaced with a mux or egress dialer or router for - // integration. - parentDialer ugate.ContextDialer - - DefaultRoute *nio.Route - - // Handlers for incoming connections - local accept or forwarding. - Mux *http.ServeMux - - // template, used for TLS connections and the host WorkloadID - TLSConfig *tls.Config - - H2Handler *H2Transport - - // Direct Nodes by interface address (which is derived from public key). This includes only - // directly connected notes - either Wifi on same segment, or VPNs and - // connected devices - with TLS termination and mutual auth. The nodes typically - // have a multiplexed connection. - Nodes map[uint64]*ugate.Cluster - NodesByID map[string]*ugate.Cluster - - // Active connection by internal stream WorkloadID. - // Tracks incoming Streams - if the stream is getting proxied to - // a net.Conn or Stream, the dest will not be tracked here. - ActiveTcp map[int]*nio.Stream - - m sync.RWMutex - - Auth *meshauth.MeshAuth - - Msg *msgs.Mux - - MuxDialers map[string]ugate.MuxDialer - DNS ugate.UDPHandler - UDPHandler ugate.UDPHandler -} - -func NewConf(base ...string) ugate.ConfStore { - return cfgfs.NewConf(base...) -} - -func Get(h2 ugate.ConfStore, name string, to interface{}) error { - raw, err := h2.Get(name) - if err != nil { - log.Println("name:", err) - raw = []byte("{}") - //return nil - } - if len(raw) > 0 { - // TODO: detect yaml or proto ? - if err := json.Unmarshal(raw, to); err != nil { - log.Println(err) - return err - } - } - return nil -} - -func NewGate(d ugate.ContextDialer, a *meshauth.MeshAuth, cfg *ugate.MeshSettings, cs ugate.ConfStore) *UGate { - ug := New(cs, a, cfg) - if d != nil { - ug.parentDialer = d - } - go ug.H2Handler.UpdateReverseAccept() - ug.DefaultPorts(ug.Config.BasePort) - - ug.Start() - return ug -} - -func New(cs ugate.ConfStore, a *meshauth.MeshAuth, cfg *ugate.MeshSettings) *UGate { - if cs == nil { - cs = cfgfs.NewConf() - } - if cfg == nil { - bp := ugate.ConfInt(cs, "BASE_PORT", 15000) - - cfg = &ugate.MeshSettings{ - BasePort: bp, - } - } - if cfg.H2R == nil { - cfg.H2R = map[string]string{} - } - if cfg.Clusters == nil { - cfg.Clusters = map[string]*ugate.Cluster{} - } - if cfg.Listeners == nil { - cfg.Listeners = map[string]*hbone.Listener{} - } - if cfg.Routes == nil { - cfg.Routes = map[string]*nio.Route{} - } - - // Merge 'ugate' JSON config, from config store. - Get(cs, "ugate", cfg) - - if cfg.Domain == "" { - cfg.Domain = ugate.ConfStr(cs, "DOMAIN", "c1.webinf.info") - if len(cfg.H2R) == 0 { - cfg.H2R[cfg.Domain] = "" - } - } - - if a == nil { - a = meshauth.NewAuth(cfg.Name, cfg.Domain) - } - - ug := &UGate{ - parentDialer: &net.Dialer{}, - MuxDialers: map[string]ugate.MuxDialer{}, - Config: cfg, - NodesByID: map[string]*ugate.Cluster{}, - Nodes: map[uint64]*ugate.Cluster{}, - Mux: http.NewServeMux(), - Auth: a, - ActiveTcp: map[int]*nio.Stream{}, - DefaultRoute: &nio.Route{}, - Msg: msgs.DefaultMux, - } - - if l, ok := cfg.Routes["*"]; ok { - ug.DefaultRoute = l - } - - ug.TLSConfig = &tls.Config{ - //MinVersion: tls.VersionTLS13, - //PreferServerCipherSuites: ugate.preferServerCipherSuites(), - InsecureSkipVerify: true, // This is not insecure here. We will verify the cert chain ourselves. - ClientAuth: tls.RequestClientCert, // not require - we'll fallback to JWT - Certificates: []tls.Certificate{*a.Cert}, // a.TlsCerts, - VerifyPeerCertificate: func(_ [][]byte, _ [][]*x509.Certificate) error { - panic("tls config not specialized for peer") - }, - NextProtos: []string{"istio", "h2"}, - // Will only be called if client supplies SNI and Certificates empty - GetCertificate: func(ch *tls.ClientHelloInfo) (*tls.Certificate, error) { - // Log on each new TCP connection, after client hello - // - log.Printf("Server/NewConn/CH %s %v %v", ch.ServerName, ch.SupportedProtos, ch.Conn.RemoteAddr()) - // doesn't include :5228 - c, ok := a.CertMap[ch.ServerName] - if ok { - return c, nil - } - return ug.Auth.Cert, nil - }, - - //SessionTicketsDisabled: true, - } - - msgs.InitMux(ug.Msg, ug.Mux, ug.Auth) - - ug.H2Handler, _ = NewH2Transport(ug) - - ug.Mux.Handle("/debug/", http.DefaultServeMux) - ug.Mux.HandleFunc("/dmesh/tcpa", ug.HttpTCP) - ug.Mux.HandleFunc("/dmesh/rd", ug.HttpNodesFilter) - ug.Mux.Handle("/debug/echo/", &EchoHandler{}) - ug.Mux.HandleFunc("/.well-known/openid-configuration", ug.Auth.HandleDisc) - ug.Mux.HandleFunc("/jwks", ug.Auth.HandleJWK) - //ug.Transport.HandleFunc("/sts", ug.Auth.HandleSTS) - - return ug -} - -// Start listening on all configured ports. -func (ug *UGate) Start() { - // Explicit TCP forwarders. - for k, t := range ug.Config.Listeners { - if strings.HasPrefix(k, "udp://") { - continue - } - t.Address = k - ug.StartListener(t) - } - - log.Println("Starting uGate ", ug.Config.Name, - ug.Config.BasePort, - meshauth.IDFromPublicKey(meshauth.PublicKey(ug.Auth.Cert.PrivateKey)), - ug.Auth.VIP6) -} - -// Expects the result to be validated and do ALPN. -//func (ug *UGate) DialTLS(net, addr string, tc *tls.Config) { -// -//} - -func NewDMNode() *ugate.Cluster { - now := time.Now() - return &ugate.Cluster{ - Labels: map[string]string{}, - FirstSeen: now, - LastSeen: now, - NodeAnnounce: &ugate.NodeAnnounce{}, - } -} - -// GetNode returns a node, using an encoded id string. -func (ug *UGate) GetNode(id string) *ugate.Cluster { - ug.m.RLock() - n := ug.NodesByID[id] - if n == nil { - n = ug.Config.Clusters[id] - } - // Make sure it is set correctly. - if n != nil && n.ID == "" { - n.ID = id - } - ug.m.RUnlock() - return n -} - -// GetOrAddNode will get a node, and if not found create one, -// updating "FirstSeen". LastSeen will be update as well. -// NodesByID will be updated. -// -// id is a hostname or meshid, without port. -func (ug *UGate) GetOrAddNode(id string) *ugate.Cluster { - ug.m.Lock() - n := ug.NodesByID[id] - if n == nil { - n = ug.Config.Clusters[id] - } - // Make sure it is set correctly. - if n != nil && n.ID == "" { - n.ID = id - } - if n == nil { - n = &ugate.Cluster{ - FirstSeen: time.Now(), - ID: id, - } - ug.NodesByID[id] = n - } - n.LastSeen = time.Now() - ug.m.Unlock() - return n -} - -// All streams must call this method, and defer OnStreamDone -func (ug *UGate) OnStream(s *nio.Stream) { - ug.m.Lock() - ug.ActiveTcp[s.StreamId] = s - ug.m.Unlock() - - ugate.TcpConActive.Add(1) - ugate.TcpConTotal.Add(1) -} - -// Called at the end of the connection handling. After this point -// nothing should use or refer to the connection, both proxy directions -// should already be closed for write or fully closed. -func (ug *UGate) OnStreamDone(str *nio.Stream) { - - ug.m.Lock() - delete(ug.ActiveTcp, str.StreamId) - ug.m.Unlock() - ugate.TcpConActive.Add(-1) - // TODO: track multiplexed streams separately. - if str.ReadErr != nil { - ugate.VarzSErrRead.Add(1) - } - if str.WriteErr != nil { - ugate.VarzSErrWrite.Add(1) - } - if str.ProxyReadErr != nil { - ugate.VarzCErrRead.Add(1) - } - if str.ProxyWriteErr != nil { - ugate.VarzCErrWrite.Add(1) - } - - if r := recover(); r != nil { - - debug.PrintStack() - - // find out exactly what the error was and set err - var err error - - switch x := r.(type) { - case string: - err = errors.New(x) - case error: - err = x - default: - err = errors.New("Unknown panic") - } - log.Println("AC: Recovered in f", r, err) - } - - if nio.NoEOF(str.ReadErr) != nil || str.WriteErr != nil { - log.Println(str.StreamId, "AE:", "Err in:", str.ReadErr, str.WriteErr) - } - if nio.NoEOF(str.ProxyReadErr) != nil || str.ProxyWriteErr != nil { - log.Println(str.StreamId, "AE:", "Err out:", str.ProxyReadErr, str.ProxyWriteErr) - } - if !str.Closed { - str.Close() - } - - ug.OnSClose(str, str.RemoteAddr()) - -} - -// RemoteID returns the node WorkloadID based on authentication. -func RemoteID(s *nio.Stream) string { - if s.TLS == nil { - return "" - } - if len(s.TLS.PeerCertificates) == 0 { - return "" - } - pk, err := meshauth.PubKeyFromCertChain(s.TLS.PeerCertificates) - if err != nil { - return "" - } - - return meshauth.IDFromPublicKey(pk) -} - -func (ug *UGate) Close() error { - var err error - for _, p := range ug.Config.Listeners { - if p.NetListener != nil { - e := p.NetListener.Close() - if e != nil { - err = err - } - p.NetListener = nil - } - } - return err -} - -// Setup default ports, using base port. -// For Istio, should be 15000. If running in Knative, use PORT and start -// only a H2 listener. -// -// Will run: -// - plaintext HTTP/1 or H2 - on PORT or base (15000) -// - BTS on 15007 (or 443 if running as root) -func (ug *UGate) DefaultPorts(base int) error { - // Set if running in a knative env, or if an Envoy runs as a sidecar to handle - // TLS, QUIC, H2. In this mode only standard H2/MASQUE are supported, with - // reverse connections over POST or websocket. - knativePort := os.Getenv("PORT") - haddr := "" - if knativePort != "" { - haddr = ":" + knativePort - } else { - haddr = fmt.Sprintf("0.0.0.0:%d", base) - } - // ProtoHTTP detects H1/H2 and sends to ug.H2Handler - // That deals with auth and dispatches to ugate.Transport - ug.StartListener(&hbone.Listener{ - Address: haddr, - Protocol: ugate.ProtoHTTP, - }) - - // KNative doesn't support other ports by default - but still register them - btsAddr := fmt.Sprintf("0.0.0.0:%d", base+ugate.PORT_BTS) - btscAddr := fmt.Sprintf("0.0.0.0:%d", base+ugate.PORT_BTSC) - - // Main BTS port, with TLS certificates - // Normally should be 443 for SNI gateways, when running as root - // Use iptables to redirect, or an explicit config for port 443 if running as root. - ug.StartListener(&hbone.Listener{ - Address: btsAddr, - Protocol: ugate.ProtoBTS, - ALPN: []string{"h2", "h2r"}, - }) - ug.StartListener(&hbone.Listener{ - Address: btscAddr, - Protocol: ugate.ProtoBTSC, - }) - if os.Getuid() == 0 { - ug.StartListener(&hbone.Listener{ - Address: "0.0.0.0:443", - Protocol: ugate.ProtoTLS, - ALPN: []string{"h2", "h2r"}, - }) - ug.StartListener(&hbone.Listener{ - Address: "0.0.0.0:80", - Protocol: ugate.ProtoHTTP, - }) - } - - return nil -} - -// Based on the port in the Dest, find the Listener config. -// Used when the dest IP:port is extracted from the metadata -func (ug *UGate) FindRouteIn(m *nio.Stream) *nio.Route { - //_, p, _ := net.SplitHostPort(m.Dest) - //l := ug.Config.Listeners[":"+p] - //if l != nil { - // return l - //} - - //l := ug.Config.Listeners["-:"+p] - //if l != nil { - // return &l.Route - //} - return ug.DefaultRoute -} - -// FindRouteOut will use the IP in Dest, and find the cluster -// and endpoints. -func (ug *UGate) FindRouteOut(m *nio.Stream) *nio.Route { - l := ug.Config.Routes[m.Dest] - if l != nil { - return l - } - - h, p, _ := net.SplitHostPort(m.Dest) - l = ug.Config.Routes[h] - if l != nil { - return l - } - l = ug.Config.Routes[":"+p] - if l != nil { - return l - } - return ug.DefaultRoute -} - -func (ug *UGate) FindRoutePrefix(dstaddr net.IP, p uint16, prefix string) *nio.Route { - port := ":" + strconv.Itoa(int(p)) - l := ug.Config.Routes[prefix+dstaddr.String()+port] - if l != nil { - return l - } - - l = ug.Config.Routes[prefix+port] - if l != nil { - return l - } - - l = ug.Config.Routes[prefix+"-"+port] - if l != nil { - return l - } - return ug.DefaultRoute -} - -// HandleStream is called for accepted (incoming) streams. -// -// Multiplexed streams ( H2, SNI ) also call this method. -// -// At this point the stream has the metadata: -// -// - Listener - actual port that accepted connection. -// - Dest - SNI, Host, original dest for iptables, listener's forward addr -// - RequestURI -// - Host -// - Headers -// - TLS context -// -// In addition TrackStreamIn has been called. -// This is a blocking method. -func (ug *UGate) HandleStream(str *nio.Stream) error { - if str.Route == nil { - str.Route = ug.FindRouteOut(str) - } - route := str.Route - - //if route.Protocol == ugate.ProtoBTS || route.Protocol == ugate.ProtoBTSC { - // panic("Should not happen") - // str.PostDial(str, nil) - // // TLS is already wrapped for BTS - // return ug.H2Handler.HandleHTTPS(str) - //} - - if route.ForwardTo != "" { - str.Dest = route.ForwardTo - } - - if route.Handler == nil && strings.HasPrefix(route.ForwardTo, "/") { - // TODO: register handlers - if route.ForwardTo == "/echo" { - route.Handler = &EchoHandler{} - } - } - - // Config has an in-process handler - not forwarding (or the handler may - // forward). - if route.Handler != nil { - // SOCKS and others need to send something back - we don't - // have a real connection, faking it. - str.PostDial(str, nil) - str.Dest = fmt.Sprintf("%v", route.Handler) - err := route.Handler.Handle(str) - str.Close() - return err - } - - // By default, dial out - return ug.DialAndProxy(str) -} - -func (gw *UGate) OnMuxClose(dm *ugate.Cluster) { - if _, f := gw.Config.H2R[dm.ID]; !f { - return - } - gw.H2Handler.maintainPinnedConnection(dm, nil) - -} - -var LogClose = true - -// OnHClose called on http close -func (gw *UGate) OnHClose(s string, id string, san string, r *http.Request, since time.Duration) { - if !gw.Config.NoAccessLog { - log.Println("HTTP", r.Method, r.URL, r.Proto, r.Header, id, san, r.RemoteAddr, since) - } -} - -func (gw *UGate) OnSClose(str *nio.Stream, addr net.Addr) { - if !gw.Config.NoAccessLog { - if str.ReadErr != nil || str.WriteErr != nil { - log.Printf("%d AC: src=%s://%v dst=%s rcv=%d/%d snd=%d/%d la=%v ra=%v op=%v %v %v", - str.StreamId, - str.Type, addr, - str.Dest, - str.RcvdPackets, str.RcvdBytes, - str.SentPackets, str.SentBytes, - time.Since(str.LastWrite), - time.Since(str.LastRead), - int64(time.Since(str.Open).Seconds()), - str.ReadErr, str.WriteErr) - return - } - log.Printf("AC: %d src=%s://%v dst=%s rcv=%d/%d snd=%d/%d la=%v ra=%v op=%v", - str.StreamId, - str.Type, addr, - str.Dest, - str.RcvdPackets, str.RcvdBytes, - str.SentPackets, str.SentBytes, - time.Since(str.LastWrite), - time.Since(str.LastRead), - int64(time.Since(str.Open).Seconds())) - - } -} diff --git a/pkg/ugatesvc/ugate_test.go b/pkg/ugatesvc/ugate_test.go deleted file mode 100644 index 03d067f..0000000 --- a/pkg/ugatesvc/ugate_test.go +++ /dev/null @@ -1,205 +0,0 @@ -package ugatesvc_test - -import ( - "context" - "crypto" - "crypto/ecdsa" - "crypto/tls" - "fmt" - "io" - "log" - "net/http" - "testing" - - "github.com/costinm/hbone/nio" - "github.com/costinm/meshauth" - "github.com/costinm/ugate" - "github.com/costinm/ugate/test" -) - -func TestSrv(t *testing.T) { - // xx07 -> BTS port - // xx12 -> plain text echo - // "/dm/" -> POST-based tunnel ( more portable than CONNECT ) - - // Bob connected to Carol - bob := test.InitTestServer(test.BOB_KEYS, &ugate.MeshSettings{ - BasePort: 6100, - Name: "bob", - }, nil) - - // Alice connected to Bob - alice := test.InitTestServer(test.ALICE_KEYS, &ugate.MeshSettings{ - BasePort: 6000, - Name: "alice", - H2R: map[string]string{ - "bob": "-", - }, - Clusters: map[string]*ugate.Cluster{ - "bob": &ugate.Cluster{ - Addr: "127.0.0.1:6107", - }, - }, - }, nil) - - //carol := test.InitTestServer(test.CAROL_KEYS, &ugate.MeshSettings{ - // BasePort: 6200, - // Name: "carol", - //}, nil) - - //http2.DebugGoroutines = true - - t.Run("Echo-tcp", func(t *testing.T) { - ab, err := alice.DialContext(context.Background(), "tcp", - fmt.Sprintf("127.0.0.1:%d", 6112)) - if err != nil { - t.Fatal(err) - } - res, err := test.CheckEcho(ab, ab) - if err != nil { - t.Fatal(err) - } - log.Println("Result ", res) - - }) - - // TLS Echo server, on 6111 - t.Run("Echo-tls", func(t *testing.T) { - ab, err := alice.DialContext(context.Background(), "tls", - fmt.Sprintf("127.0.0.1:%d", 6111)) - if err != nil { - t.Fatal(err) - } - // TODO: verify the identity, cert, etc - res, err := test.CheckEcho(ab, ab) - if err != nil { - t.Fatal(err) - } - mc := ab.(*nio.Stream) - log.Println("Result ", res, mc) - }) - - // This is a H2 (BTS) request that is forwarded to a TCP stream handler. - // Alice -BTS-> Bob -TCP-> Carol - t.Run("H2-egress", func(t *testing.T) { - i, o := io.Pipe() - r, _ := http.NewRequest("POST", "https://127.0.0.1:6107/dm/"+"127.0.0.1:6112", i) - res, err := alice.RoundTrip(r) - if err != nil { - t.Fatal(err) - } - - res1, err := test.CheckEcho(res.Body, o) - if err != nil { - t.Fatal(err) - } - - log.Println(res1, alice, bob) - }) - - // TODO: perm checks for egress - // TODO: same test for ingress ( localhost:port ) and internal listeners - - //// Bob -> H2R -> Alice - //t.Run("H2R1", func(t *testing.T) { - // p := pipe.New() - // r, _ := http.NewRequest("POST", "https://" + alice.Auth.WorkloadID + "/dm/127.0.0.1:6112", p) - // res, err := bob.RoundTrip(r) - // if err != nil { - // t.Fatal(err) - // } - // nc := nio.NewStreamRequestOut(r, p, res, nil) - // - // if err != nil { - // t.Fatal(err) - // } - // res1, err := test.CheckEcho(nc, nc) - // if err != nil { - // t.Fatal(err) - // } - // - // log.Println(res1, alice, bob) - //}) - // - //// Alice -- reverse tunnel --> Bob - //// Carol --> Bob -- via H2R --> Alice - //t.Run("H2R", func(t *testing.T) { - // alice.H2Handler.UpdateReverseAccept() - // // Connecting to Bob's gateway (from c). Request should go to Alice. - // // - // p := pipe.New() - // r, _ := http.NewRequest("POST", "https://127.0.0.1:6107/dm/"+alice.Auth.WorkloadID + "/dm/127.0.0.1:6112", p) - // res, err := carol.RoundTrip(r) - // if err != nil { - // t.Fatal(err) - // } - // nc := nio.NewStreamRequestOut(r, p, res, nil) - // - // if err != nil { - // t.Fatal(err) - // } - // res1, err := test.CheckEcho(nc, nc) - // if err != nil { - // t.Fatal(err) - // } - // - // log.Println(res1, alice, bob) - //}) -} - -// Run a suite of tests with a specific key, to repeat the tests for all types of keys. -func testKey(k crypto.PrivateKey, t *testing.T) { - pk := meshauth.PublicKey(k) - if pk == nil { - t.Fatal("Invalid public") - } - id := meshauth.IDFromPublicKey(pk) - //crt, err := KeyToCertificate(k) - //if err != nil { - // t.Fatal(err) - //} - //chain, err := RawToCertChain(crt.Certificate) - //if err != nil { - // t.Fatal(err) - //} - //certPub, err := PubKeyFromCertChain(chain) - //if id != IDFromPublicKey(certPub) { - // t.Fatal("Cert chain public key not matching", id, IDFromPublicKey(certPub)) - //} - - t.Log("Key WorkloadID:", id) -} - -func TestCrypto(t *testing.T) { - t.Run("AuthInit", func(t *testing.T) { - a := meshauth.NewAuth("", "") - - //if a.RSACert == nil { - // t.Error("Missing RSA") - //} - if a.Cert == nil { - t.Error("Missing EC") - } - //if a.ED25519Cert == nil { - // t.Error("Missing ED") - //} - - b := meshauth.NewAuth("", "") - //if !bytes.Equal(a.ED25519Cert.PrivateKey.(ed25519.PrivateKey), - // b.ED25519Cert.PrivateKey.(ed25519.PrivateKey)) { - // t.Error("Error loading") - //} - //if !a.RSACert.PrivateKey.(*rsa.PrivateKey).Equal( - // b.RSACert.PrivateKey) { - // t.Error("Error loading") - //} - if !a.Cert.PrivateKey.(*ecdsa.PrivateKey).Equal(b.Cert.PrivateKey) { - t.Error("Error loading") - } - //testKey(a.ED25519Cert.PrivateKey, t) - //testKey(a.RSACert.PrivateKey, t) - testKey(a.Cert, t) - }) -} - -var tlsConfigInsecure = &tls.Config{InsecureSkipVerify: true} diff --git a/ugated/pkg/webrtc/README.md b/pkg/webrtc/README.md similarity index 100% rename from ugated/pkg/webrtc/README.md rename to pkg/webrtc/README.md diff --git a/pkg/webrtc/go.mod b/pkg/webrtc/go.mod new file mode 100644 index 0000000..013a3f4 --- /dev/null +++ b/pkg/webrtc/go.mod @@ -0,0 +1,41 @@ +module github.com/costinm/ugate/pkg/webrtc + +go 1.21 + +replace github.com/costinm/ugate => ../.. + +require ( + github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 + github.com/costinm/ugate v0.0.0-00010101000000-000000000000 + github.com/pion/sctp v1.8.9 + github.com/pion/turn/v2 v2.1.4 + github.com/pion/webrtc/v3 v3.2.24 +) + +require ( + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/google/uuid v1.3.1 // indirect + github.com/pion/datachannel v1.5.5 // indirect + github.com/pion/dtls/v2 v2.2.7 // indirect + github.com/pion/ice/v2 v2.3.11 // indirect + github.com/pion/interceptor v0.1.25 // indirect + github.com/pion/logging v0.2.2 // indirect + github.com/pion/mdns v0.0.8 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.12 // indirect + github.com/pion/rtp v1.8.3 // indirect + github.com/pion/sdp/v3 v3.0.6 // indirect + github.com/pion/srtp/v2 v2.0.18 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/transport/v2 v2.2.3 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect +) diff --git a/ugated/pkg/webrtc/rtc.go b/pkg/webrtc/rtc.go similarity index 100% rename from ugated/pkg/webrtc/rtc.go rename to pkg/webrtc/rtc.go diff --git a/ugated/pkg/webrtc/rtc_test.go b/pkg/webrtc/rtc_test.go similarity index 68% rename from ugated/pkg/webrtc/rtc_test.go rename to pkg/webrtc/rtc_test.go index adaf4d7..1499f9b 100644 --- a/ugated/pkg/webrtc/rtc_test.go +++ b/pkg/webrtc/rtc_test.go @@ -4,19 +4,24 @@ import ( "testing" "time" - "github.com/costinm/ugate/test" + "github.com/costinm/ugate" + "github.com/costinm/ugate/pkg/test" ) func TestRTC(t *testing.T) { - alice := test.InitTestServer(test.ALICE_KEYS, nil, nil) + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{ + BasePort: 5700, + }) // Enable RTC for alice pc1, off1, err := InitWebRTCS(alice, alice.Auth) if err != nil { t.Fatal(err) } - bob := test.InitTestServer(test.BOB_KEYS, nil, nil) + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{ + BasePort: 5800, + }) InitWebRTCS(bob, bob.Auth) res, err := DialWebRTC(off1) diff --git a/ugated/pkg/webrtc/webrtc.go b/pkg/webrtc/webrtc.go similarity index 89% rename from ugated/pkg/webrtc/webrtc.go rename to pkg/webrtc/webrtc.go index 92b1242..fc471d3 100644 --- a/ugated/pkg/webrtc/webrtc.go +++ b/pkg/webrtc/webrtc.go @@ -8,16 +8,20 @@ import ( "net/http" "time" + "github.com/costinm/ugate" + "github.com/costinm/meshauth" - "github.com/costinm/ugate/pkg/ugatesvc" "github.com/pion/sctp" "github.com/pion/webrtc/v3" ) +// WIP: experiments with webRTC for data channels. +// WebRTC is bi-directional, like SSH - both ends can initiate connections. + type RTC struct { Conn map[string]sctp.Association - UGate *ugatesvc.UGate + UGate *ugate.UGate } // Returns a json with an offer for connecting this host, to allow a web or dmesh client @@ -121,7 +125,7 @@ func DialWebRTC(inOffer *webrtc.SessionDescription) (*webrtc.SessionDescription, peerConnection.OnConnectionStateChange(func(state webrtc.PeerConnectionState) { log.Println("OnConnectionStateChange: ", state, peerConnection.SignalingState()) if state == webrtc.PeerConnectionStateConnected { - //log.Println(peerConnection.SCTP().Transport().GetRemoteCertificate()) + //log.Println(peerConnection.SCTP().H2Transport().GetRemoteCertificate()) log.Println(peerConnection.SCTP().Transport().GetLocalParameters()) } }) @@ -163,7 +167,7 @@ func DialWebRTC(inOffer *webrtc.SessionDescription) (*webrtc.SessionDescription, // // TODO: // - session.URI -func InitWebRTCS(ug *ugatesvc.UGate, auth *meshauth.MeshAuth) (*webrtc.PeerConnection, *webrtc.SessionDescription, error) { +func InitWebRTCS(ug *ugate.UGate, auth *meshauth.MeshAuth) (*webrtc.PeerConnection, *webrtc.SessionDescription, error) { rtcg := &RTC{ UGate: ug, } @@ -264,6 +268,7 @@ func InitWebRTCS(ug *ugatesvc.UGate, auth *meshauth.MeshAuth) (*webrtc.PeerConne if err = peerConnection.SetLocalDescription(offer); err != nil { panic(err) } + // Create channel that is blocked until ICE Gathering is complete gatherComplete := webrtc.GatheringCompletePromise(peerConnection) @@ -272,6 +277,23 @@ func InitWebRTCS(ug *ugatesvc.UGate, auth *meshauth.MeshAuth) (*webrtc.PeerConne // in a production application you should exchange ICE Candidates via OnICECandidate <-gatherComplete - log.Println("Offer gather complete") + //log.Println("Offer gather complete", offer) + // {offer v=0 + //o=- 4226443055588174689 1705330927 IN IP4 0.0.0.0 + //s=- + //t=0 0 + //a=fingerprint:sha-256 2D:EF:8B:7A:82:09:0A:C4:7F:33:A1:55:E9:0B:CA:C4:FA:C6:5C:7B:BB:E6:AE:02:80:B1:3C:F3:A0:96:8E:7D + //a=extmap-allow-mixed + //a=group:BUNDLE 0 + //m=application 9 UDP/DTLS/SCTP webrtc-datachannel + //c=IN IP4 0.0.0.0 + //a=setup:actpass + //a=mid:0 + //a=sendrecv + //a=sctp-port:5000 + //a=ice-ufrag:AyLwJUlXXeVvlzTD + //a=ice-pwd:ggGigrcnoGALEkMDmBuWVNfAFwdicCnN + // 0xc0000d6240} + return peerConnection, &offer, nil } diff --git a/pkg/ws/README.md b/pkg/ws/README.md new file mode 100644 index 0000000..b1e4872 --- /dev/null +++ b/pkg/ws/README.md @@ -0,0 +1,9 @@ +# Websocket and WS over H2 + +# Others + +https://github.com/gabihodoroaga/http-grpc-websocket + - based on "nhooyr.io/websocket" +It appears it does an UPGRADE over the H2 stream - not connect ??? + + diff --git a/proto/README.md b/proto/README.md deleted file mode 100644 index 03d3f0f..0000000 --- a/proto/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Protos defined and used in the repo - -Adopting the style of 'buf.build', and keeping the protos dependency-free (except the proto itself) - - -## BSR - -auto-generated code: - go.buf.build/TEMPLATE_OWNER/TEMPLATE_NAME/MODULE_OWNER/MODULE_NAME - -Example: -"go.buf.build/grpc/go/googleapis/googleapis/google/storage/v1" - -## Usage - -grpcurl -protoset <(buf build -o -) ... - - -## Imported packages - -- proto - Istio test echo is using the 'proto' package - preserved for compatibility with the test infra. -- private ca -- meshca -- istio ca -- grpc/grpc-proto - except tls/provider/meshca -- simplified version of envoy -- konectivity from kde diff --git a/proto/buf.gen.yaml b/proto/buf.gen.yaml deleted file mode 100644 index 7537744..0000000 --- a/proto/buf.gen.yaml +++ /dev/null @@ -1,5 +0,0 @@ -version: v1 -plugins: - - name: go - out: ../gen/proto - opt: paths=source_relative diff --git a/proto/envoy/service/discovery/v3/xds.proto b/proto/envoy/service/discovery/v3/xds.proto deleted file mode 100644 index 64f8832..0000000 --- a/proto/envoy/service/discovery/v3/xds.proto +++ /dev/null @@ -1,25 +0,0 @@ -syntax = "proto3"; - -// GRPC package - part of the URL. Service is added. -// URL: /PACKAGE.SERVICE/METHOD -package envoy.service.discovery.v3; -import "xds/envoy_simplified.proto"; - -option go_package="github.com/costinm/grpc-mesh/gen/proto/envoy/service/discovery"; - -// ServiceName: "envoy.service.discovery.v2.AggregatedDiscoveryService", - - -// Bi-directional streaming interface for messages. -// Subscribe, Ack, Push are represented as upstream messages. -// Monitor, Receipts, SubscribeResponse, AckResponse are represented as downstream messages. -// -// See https://github.com/lyft/envoy-api#apis for a description of the role of -// ADS and how it is intended to be used by a management server. ADS requests -// have the same structure as their singleton xDS counterparts, but can -// multiplex many resource types on a single stream. The type_url in the -// DiscoveryRequest/DiscoveryResponse provides sufficient information to recover -// the multiplexed singleton APIs at the Envoy instance and management server. -service AggregatedDiscoveryService { - rpc StreamAggregatedResources(stream xds.DiscoveryRequest) returns (stream xds.DiscoveryResponse) {} -} diff --git a/proto/fgrpc/ping.proto b/proto/fgrpc/ping.proto deleted file mode 100644 index a1bfac1..0000000 --- a/proto/fgrpc/ping.proto +++ /dev/null @@ -1,16 +0,0 @@ -// regenerate the .pb.go file after any change using -// protoc ping.proto --go_out=plugins=grpc:. -syntax = "proto3"; -package fgrpc; -option go_package="github.com/costinm/ugate/gen/proto/fgrpc"; - -message PingMessage { - int64 seq = 1; // sequence number - int64 ts = 2; // src send ts / dest receive ts - string payload = 3; // extra packet data - int64 delayNanos = 4; // delay the response by x nanoseconds -} - -service PingServer { - rpc Ping (PingMessage) returns (PingMessage) {} -} diff --git a/proto/google/api/annotations.proto b/proto/google/api/annotations.proto deleted file mode 100644 index efdab3d..0000000 --- a/proto/google/api/annotations.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/api/http.proto"; -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "AnnotationsProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // See `HttpRule`. - HttpRule http = 72295728; -} diff --git a/proto/google/api/client.proto b/proto/google/api/client.proto deleted file mode 100644 index 3b3fd0c..0000000 --- a/proto/google/api/client.proto +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "ClientProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // A definition of a client library method signature. - // - // In client libraries, each proto RPC corresponds to one or more methods - // which the end user is able to call, and calls the underlying RPC. - // Normally, this method receives a single argument (a struct or instance - // corresponding to the RPC request object). Defining this field will - // add one or more overloads providing flattened or simpler method signatures - // in some languages. - // - // The fields on the method signature are provided as a comma-separated - // string. - // - // For example, the proto RPC and annotation: - // - // rpc CreateSubscription(CreateSubscriptionRequest) - // returns (Subscription) { - // option (google.api.method_signature) = "name,topic"; - // } - // - // Would add the following Java overload (in addition to the method accepting - // the request object): - // - // public final Subscription createSubscription(String name, String topic) - // - // The following backwards-compatibility guidelines apply: - // - // * Adding this annotation to an unannotated method is backwards - // compatible. - // * Adding this annotation to a method which already has existing - // method signature annotations is backwards compatible if and only if - // the new method signature annotation is last in the sequence. - // * Modifying or removing an existing method signature annotation is - // a breaking change. - // * Re-ordering existing method signature annotations is a breaking - // change. - repeated string method_signature = 1051; -} - -extend google.protobuf.ServiceOptions { - // The hostname for this service. - // This should be specified with no prefix or protocol. - // - // Example: - // - // service Foo { - // option (google.api.default_host) = "foo.googleapi.com"; - // ... - // } - string default_host = 1049; - - // OAuth scopes needed for the client. - // - // Example: - // - // service Foo { - // option (google.api.oauth_scopes) = \ - // "https://www.googleapis.com/auth/cloud-platform"; - // ... - // } - // - // If there is more than one scope, use a comma-separated string: - // - // Example: - // - // service Foo { - // option (google.api.oauth_scopes) = \ - // "https://www.googleapis.com/auth/cloud-platform," - // "https://www.googleapis.com/auth/monitoring"; - // ... - // } - string oauth_scopes = 1050; -} diff --git a/proto/google/api/field_behavior.proto b/proto/google/api/field_behavior.proto deleted file mode 100644 index c4abe3b..0000000 --- a/proto/google/api/field_behavior.proto +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "FieldBehaviorProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // A designation of a specific field behavior (required, output only, etc.) - // in protobuf messages. - // - // Examples: - // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; - repeated google.api.FieldBehavior field_behavior = 1052; -} - -// An indicator of the behavior of a given field (for example, that a field -// is required in requests, or given as output but ignored as input). -// This **does not** change the behavior in protocol buffers itself; it only -// denotes the behavior and may affect how API tooling handles the field. -// -// Note: This enum **may** receive new values in the future. -enum FieldBehavior { - // Conventional default for enums. Do not use this. - FIELD_BEHAVIOR_UNSPECIFIED = 0; - - // Specifically denotes a field as optional. - // While all fields in protocol buffers are optional, this may be specified - // for emphasis if appropriate. - OPTIONAL = 1; - - // Denotes a field as required. - // This indicates that the field **must** be provided as part of the request, - // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). - REQUIRED = 2; - - // Denotes a field as output only. - // This indicates that the field is provided in responses, but including the - // field in a request does nothing (the server *must* ignore it and - // *must not* throw an error as a result of the field's presence). - OUTPUT_ONLY = 3; - - // Denotes a field as input only. - // This indicates that the field is provided in requests, and the - // corresponding field is not included in output. - INPUT_ONLY = 4; - - // Denotes a field as immutable. - // This indicates that the field may be set once in a request to create a - // resource, but may not be changed thereafter. - IMMUTABLE = 5; - - // Denotes that a (repeated) field is an unordered list. - // This indicates that the service may provide the elements of the list - // in any arbitrary order, rather than the order the user originally - // provided. Additionally, the list's order may or may not be stable. - UNORDERED_LIST = 6; - - // Denotes that this field returns a non-empty default value if not set. - // This indicates that if the user provides the empty value in a request, - // a non-empty value will be returned. The user will not be aware of what - // non-empty value to expect. - NON_EMPTY_DEFAULT = 7; -} diff --git a/proto/google/api/http.proto b/proto/google/api/http.proto deleted file mode 100644 index 113fa93..0000000 --- a/proto/google/api/http.proto +++ /dev/null @@ -1,375 +0,0 @@ -// Copyright 2015 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "HttpProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -message Http { - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - repeated HttpRule rules = 1; - - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - bool fully_decode_reserved_expansion = 2; -} - -// # gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | -// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: -// "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: -// "123456")` -// -// ## Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all -// fields are passed via URL path and URL query parameters. -// -// ### Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// ## Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// Example: -// -// http: -// rules: -// # Selects a gRPC method and applies HttpRule to it. -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// ## Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -message HttpRule { - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - string selector = 1; - - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - oneof pattern { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - string get = 2; - - // Maps to HTTP PUT. Used for replacing a resource. - string put = 3; - - // Maps to HTTP POST. Used for creating a resource or performing an action. - string post = 4; - - // Maps to HTTP DELETE. Used for deleting a resource. - string delete = 5; - - // Maps to HTTP PATCH. Used for updating a resource. - string patch = 6; - - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - CustomHttpPattern custom = 8; - } - - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - string body = 7; - - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - string response_body = 12; - - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - repeated HttpRule additional_bindings = 11; -} - -// A custom pattern is used for defining custom HTTP verb. -message CustomHttpPattern { - // The name of this custom HTTP verb. - string kind = 1; - - // The path matched by this custom verb. - string path = 2; -} diff --git a/proto/google/api/resource.proto b/proto/google/api/resource.proto deleted file mode 100644 index 0ce0344..0000000 --- a/proto/google/api/resource.proto +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "ResourceProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // An annotation that describes a resource reference, see - // [ResourceReference][]. - google.api.ResourceReference resource_reference = 1055; -} - -extend google.protobuf.FileOptions { - // An annotation that describes a resource definition without a corresponding - // message; see [ResourceDescriptor][]. - repeated google.api.ResourceDescriptor resource_definition = 1053; -} - -extend google.protobuf.MessageOptions { - // An annotation that describes a resource definition, see - // [ResourceDescriptor][]. - google.api.ResourceDescriptor resource = 1053; -} - -// A simple descriptor of a resource type. -// -// ResourceDescriptor annotates a resource message (either by means of a -// protobuf annotation or use in the service config), and associates the -// resource's schema, the resource type, and the pattern of the resource name. -// -// Example: -// -// message Topic { -// // Indicates this message defines a resource schema. -// // Declares the resource type in the format of {service}/{kind}. -// // For Kubernetes resources, the format is {api group}/{kind}. -// option (google.api.resource) = { -// type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: "pubsub.googleapis.com/Topic" -// pattern: "projects/{project}/topics/{topic}" -// -// Sometimes, resources have multiple patterns, typically because they can -// live under multiple parents. -// -// Example: -// -// message LogEntry { -// option (google.api.resource) = { -// type: "logging.googleapis.com/LogEntry" -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -// }; -// } -// -// The ResourceDescriptor Yaml config will look like: -// -// resources: -// - type: 'logging.googleapis.com/LogEntry' -// pattern: "projects/{project}/logs/{log}" -// pattern: "folders/{folder}/logs/{log}" -// pattern: "organizations/{organization}/logs/{log}" -// pattern: "billingAccounts/{billing_account}/logs/{log}" -message ResourceDescriptor { - // A description of the historical or future-looking state of the - // resource pattern. - enum History { - // The "unset" value. - HISTORY_UNSPECIFIED = 0; - - // The resource originally had one pattern and launched as such, and - // additional patterns were added later. - ORIGINALLY_SINGLE_PATTERN = 1; - - // The resource has one pattern, but the API owner expects to add more - // later. (This is the inverse of ORIGINALLY_SINGLE_PATTERN, and prevents - // that from being necessary once there are multiple patterns.) - FUTURE_MULTI_PATTERN = 2; - } - - // A flag representing a specific style that a resource claims to conform to. - enum Style { - // The unspecified value. Do not use. - STYLE_UNSPECIFIED = 0; - - // This resource is intended to be "declarative-friendly". - // - // Declarative-friendly resources must be more strictly consistent, and - // setting this to true communicates to tools that this resource should - // adhere to declarative-friendly expectations. - // - // Note: This is used by the API linter (linter.aip.dev) to enable - // additional checks. - DECLARATIVE_FRIENDLY = 1; - } - - // The resource type. It must be in the format of - // {service_name}/{resource_type_kind}. The `resource_type_kind` must be - // singular and must not include version numbers. - // - // Example: `storage.googleapis.com/Bucket` - // - // The value of the resource_type_kind must follow the regular expression - // /[A-Za-z][a-zA-Z0-9]+/. It should start with an upper case character and - // should use PascalCase (UpperCamelCase). The maximum number of - // characters allowed for the `resource_type_kind` is 100. - string type = 1; - - // Optional. The relative resource name pattern associated with this resource - // type. The DNS prefix of the full resource name shouldn't be specified here. - // - // The path pattern must follow the syntax, which aligns with HTTP binding - // syntax: - // - // Template = Segment { "/" Segment } ; - // Segment = LITERAL | Variable ; - // Variable = "{" LITERAL "}" ; - // - // Examples: - // - // - "projects/{project}/topics/{topic}" - // - "projects/{project}/knowledgeBases/{knowledge_base}" - // - // The components in braces correspond to the IDs for each resource in the - // hierarchy. It is expected that, if multiple patterns are provided, - // the same component name (e.g. "project") refers to IDs of the same - // type of resource. - repeated string pattern = 2; - - // Optional. The field on the resource that designates the resource name - // field. If omitted, this is assumed to be "name". - string name_field = 3; - - // Optional. The historical or future-looking state of the resource pattern. - // - // Example: - // - // // The InspectTemplate message originally only supported resource - // // names with organization, and project was added later. - // message InspectTemplate { - // option (google.api.resource) = { - // type: "dlp.googleapis.com/InspectTemplate" - // pattern: - // "organizations/{organization}/inspectTemplates/{inspect_template}" - // pattern: "projects/{project}/inspectTemplates/{inspect_template}" - // history: ORIGINALLY_SINGLE_PATTERN - // }; - // } - History history = 4; - - // The plural name used in the resource name and permission names, such as - // 'projects' for the resource name of 'projects/{project}' and the permission - // name of 'cloudresourcemanager.googleapis.com/projects.get'. It is the same - // concept of the `plural` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // - // Note: The plural form is required even for singleton resources. See - // https://aip.dev/156 - string plural = 5; - - // The same concept of the `singular` field in k8s CRD spec - // https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/ - // Such as "project" for the `resourcemanager.googleapis.com/Project` type. - string singular = 6; - - // Style flag(s) for this resource. - // These indicate that a resource is expected to conform to a given - // style. See the specific style flags for additional information. - repeated Style style = 10; -} - -// Defines a proto annotation that describes a string field that refers to -// an API resource. -message ResourceReference { - // The resource type that the annotated field references. - // - // Example: - // - // message Subscription { - // string topic = 2 [(google.api.resource_reference) = { - // type: "pubsub.googleapis.com/Topic" - // }]; - // } - // - // Occasionally, a field may reference an arbitrary resource. In this case, - // APIs use the special value * in their resource reference. - // - // Example: - // - // message GetIamPolicyRequest { - // string resource = 2 [(google.api.resource_reference) = { - // type: "*" - // }]; - // } - string type = 1; - - // The resource type of a child collection that the annotated field - // references. This is useful for annotating the `parent` field that - // doesn't have a fixed resource type. - // - // Example: - // - // message ListLogEntriesRequest { - // string parent = 1 [(google.api.resource_reference) = { - // child_type: "logging.googleapis.com/LogEntry" - // }; - // } - string child_type = 2; -} diff --git a/proto/google/cloud/security/privateca/v1/resources.proto b/proto/google/cloud/security/privateca/v1/resources.proto deleted file mode 100644 index 7e93abc..0000000 --- a/proto/google/cloud/security/privateca/v1/resources.proto +++ /dev/null @@ -1,1124 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.cloud.security.privateca.v1; - -import "google/api/annotations.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; -import "google/type/expr.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.Security.PrivateCA.V1"; -option go_package = "google.golang.org/genproto/googleapis/cloud/security/privateca/v1;privateca"; -option java_multiple_files = true; -option java_outer_classname = "PrivateCaResourcesProto"; -option java_package = "com.google.cloud.security.privateca.v1"; -option php_namespace = "Google\\Cloud\\Security\\PrivateCA\\V1"; -option ruby_package = "Google::Cloud::Security::PrivateCA::V1"; - -// A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] represents an individual Certificate Authority. -// A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] can be used to create [Certificates][google.cloud.security.privateca.v1.Certificate]. -message CertificateAuthority { - option (google.api.resource) = { - type: "privateca.googleapis.com/CertificateAuthority" - pattern: "projects/{project}/locations/{location}/caPools/{ca_pool}/certificateAuthorities/{certificate_authority}" - }; - - // The type of a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], indicating its issuing chain. - enum Type { - // Not specified. - TYPE_UNSPECIFIED = 0; - - // Self-signed CA. - SELF_SIGNED = 1; - - // Subordinate CA. Could be issued by a Private CA [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // or an unmanaged CA. - SUBORDINATE = 2; - } - - // The state of a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], indicating if it can be used. - enum State { - // Not specified. - STATE_UNSPECIFIED = 0; - - // Certificates can be issued from this CA. CRLs will be generated for this - // CA. The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - ENABLED = 1; - - // Certificates cannot be issued from this CA. CRLs will still be generated. - // The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, but will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - DISABLED = 2; - - // Certificates can be issued from this CA. CRLs will be generated for this - // CA. The CA will be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, but will not - // be used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - STAGED = 3; - - // Certificates cannot be issued from this CA. CRLs will not be generated. - // The CA will not be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - AWAITING_USER_ACTIVATION = 4; - - // Certificates cannot be issued from this CA. CRLs will not be generated. - // The CA may still be recovered by calling - // [CertificateAuthorityService.UndeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority] before - // [expire_time][google.cloud.security.privateca.v1.CertificateAuthority.expire_time]. - // The CA will not be part of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s trust anchor, and will not be - // used to issue certificates from the [CaPool][google.cloud.security.privateca.v1.CaPool]. - DELETED = 5; - } - - // URLs where a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will publish content. - message AccessUrls { - // The URL where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate is - // published. This will only be set for CAs that have been activated. - string ca_certificate_access_url = 1; - - // The URLs where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CRLs are published. This - // will only be set for CAs that have been activated. - repeated string crl_access_urls = 2; - } - - // A Cloud KMS key configuration that a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will use. - message KeyVersionSpec { - oneof KeyVersion { - // The resource name for an existing Cloud KMS CryptoKeyVersion in the - // format - // `projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`. - // This option enables full flexibility in the key's capabilities and - // properties. - string cloud_kms_key_version = 1; - - // The algorithm to use for creating a managed Cloud KMS key for a for a - // simplified experience. All managed keys will be have their - // [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] as `HSM`. - SignHashAlgorithm algorithm = 2; - } - } - - // The algorithm of a Cloud KMS CryptoKeyVersion of a - // [CryptoKey][google.cloud.kms.v1.CryptoKey] with the - // [CryptoKeyPurpose][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose] value - // `ASYMMETRIC_SIGN`. These values correspond to the - // [CryptoKeyVersionAlgorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm] - // values. For RSA signing algorithms, the PSS algorithms should be preferred, - // use PKCS1 algorithms if required for compatibility. For further - // recommendations, see - // https://cloud.google.com/kms/docs/algorithms#algorithm_recommendations. - enum SignHashAlgorithm { - // Not specified. - SIGN_HASH_ALGORITHM_UNSPECIFIED = 0; - - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_2048_SHA256 - RSA_PSS_2048_SHA256 = 1; - - // maps to CryptoKeyVersionAlgorithm. RSA_SIGN_PSS_3072_SHA256 - RSA_PSS_3072_SHA256 = 2; - - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_4096_SHA256 - RSA_PSS_4096_SHA256 = 3; - - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_2048_SHA256 - RSA_PKCS1_2048_SHA256 = 6; - - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_3072_SHA256 - RSA_PKCS1_3072_SHA256 = 7; - - // maps to CryptoKeyVersionAlgorithm.RSA_SIGN_PKCS1_4096_SHA256 - RSA_PKCS1_4096_SHA256 = 8; - - // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P256_SHA256 - EC_P256_SHA256 = 4; - - // maps to CryptoKeyVersionAlgorithm.EC_SIGN_P384_SHA384 - EC_P384_SHA384 = 5; - } - - // Output only. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Required. Immutable. The [Type][google.cloud.security.privateca.v1.CertificateAuthority.Type] of this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - Type type = 2 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Required. Immutable. The config used to create a self-signed X.509 certificate or CSR. - CertificateConfig config = 3 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Required. Immutable. The desired lifetime of the CA certificate. Used to create the - // "not_before_time" and "not_after_time" fields inside an X.509 - // certificate. - google.protobuf.Duration lifetime = 4 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Required. Immutable. Used when issuing certificates for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. If this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] is a self-signed CertificateAuthority, this key - // is also used to sign the self-signed CA certificate. Otherwise, it - // is used to sign a CSR. - KeyVersionSpec key_spec = 5 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Optional. If this is a subordinate [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], this field will be set - // with the subordinate configuration, which describes its issuers. This may - // be updated, but this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] must continue to validate. - SubordinateConfig subordinate_config = 6 [(google.api.field_behavior) = OPTIONAL]; - - // Output only. The [CaPool.Tier][google.cloud.security.privateca.v1.CaPool.Tier] of the [CaPool][google.cloud.security.privateca.v1.CaPool] that includes this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - CaPool.Tier tier = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The [State][google.cloud.security.privateca.v1.CertificateAuthority.State] for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - State state = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. This [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate chain, including the current - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate. Ordered such that the root issuer - // is the final element (consistent with RFC 5246). For a self-signed CA, this - // will only list the current [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s certificate. - repeated string pem_ca_certificates = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. A structured description of this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate - // and its issuers. Ordered as self-to-root. - repeated CertificateDescription ca_certificate_descriptions = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Immutable. The name of a Cloud Storage bucket where this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will - // publish content, such as the CA certificate and CRLs. This must be a bucket - // name, without any prefixes (such as `gs://`) or suffixes (such as - // `.googleapis.com`). For example, to use a bucket named `my-bucket`, you - // would simply specify `my-bucket`. If not specified, a managed bucket will - // be created. - string gcs_bucket = 11 [(google.api.field_behavior) = IMMUTABLE]; - - // Output only. URLs for accessing content published by this CA, such as the CA certificate - // and CRLs. - AccessUrls access_urls = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was created. - google.protobuf.Timestamp create_time = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was last updated. - google.protobuf.Timestamp update_time = 14 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] was soft deleted, if - // it is in the [DELETED][google.cloud.security.privateca.v1.CertificateAuthority.State.DELETED] state. - google.protobuf.Timestamp delete_time = 15 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will be permanently purged, - // if it is in the [DELETED][google.cloud.security.privateca.v1.CertificateAuthority.State.DELETED] state. - google.protobuf.Timestamp expire_time = 16 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Optional. Labels with user-defined metadata. - map labels = 17 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [CaPool][google.cloud.security.privateca.v1.CaPool] represents a group of -// [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] that form a trust anchor. A -// [CaPool][google.cloud.security.privateca.v1.CaPool] can be used to manage issuance policies for one or more -// [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] resources and to rotate CA certificates in and out -// of the trust anchor. -message CaPool { - option (google.api.resource) = { - type: "privateca.googleapis.com/CaPool" - pattern: "projects/{project}/locations/{location}/caPools/{ca_pool}" - }; - - // The tier of a [CaPool][google.cloud.security.privateca.v1.CaPool], indicating its supported functionality and/or - // billing SKU. - enum Tier { - // Not specified. - TIER_UNSPECIFIED = 0; - - // Enterprise tier. - ENTERPRISE = 1; - - // DevOps tier. - DEVOPS = 2; - } - - // Options relating to the publication of each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA - // certificate and CRLs and their inclusion as extensions in issued - // [Certificates][google.cloud.security.privateca.v1.Certificate]. The options set here apply to certificates - // issued by any [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the [CaPool][google.cloud.security.privateca.v1.CaPool]. - message PublishingOptions { - // Optional. When true, publishes each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CA certificate and - // includes its URL in the "Authority Information Access" X.509 extension - // in all issued [Certificates][google.cloud.security.privateca.v1.Certificate]. If this is false, the CA - // certificate will not be published and the corresponding X.509 extension - // will not be written in issued certificates. - bool publish_ca_cert = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. When true, publishes each [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]'s CRL and includes its - // URL in the "CRL Distribution Points" X.509 extension in all issued - // [Certificates][google.cloud.security.privateca.v1.Certificate]. If this is false, CRLs will not be published - // and the corresponding X.509 extension will not be written in issued - // certificates. - // CRLs will expire 7 days from their creation. However, we will rebuild - // daily. CRLs are also rebuilt shortly after a certificate is revoked. - bool publish_crl = 2 [(google.api.field_behavior) = OPTIONAL]; - } - - // Defines controls over all certificate issuance within a [CaPool][google.cloud.security.privateca.v1.CaPool]. - message IssuancePolicy { - // Describes a "type" of key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued - // from a [CaPool][google.cloud.security.privateca.v1.CaPool]. - // Note that a single [AllowedKeyType][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType] may refer to either a - // fully-qualified key algorithm, such as RSA 4096, or a family of key - // algorithms, such as any RSA key. - message AllowedKeyType { - // Describes an RSA key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued from - // a [CaPool][google.cloud.security.privateca.v1.CaPool]. - message RsaKeyType { - // Optional. The minimum allowed RSA modulus size (inclusive), in bits. If this is - // not set, or if set to zero, the service-level min RSA modulus size - // will continue to apply. - int64 min_modulus_size = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The maximum allowed RSA modulus size (inclusive), in bits. If this is - // not set, or if set to zero, the service will not enforce an explicit - // upper bound on RSA modulus sizes. - int64 max_modulus_size = 2 [(google.api.field_behavior) = OPTIONAL]; - } - - // Describes an Elliptic Curve key that may be used in a [Certificate][google.cloud.security.privateca.v1.Certificate] - // issued from a [CaPool][google.cloud.security.privateca.v1.CaPool]. - message EcKeyType { - // Describes an elliptic curve-based signature algorithm that may be - // used in a [Certificate][google.cloud.security.privateca.v1.Certificate] issued from a [CaPool][google.cloud.security.privateca.v1.CaPool]. - enum EcSignatureAlgorithm { - // Not specified. Signifies that any signature algorithm may be used. - EC_SIGNATURE_ALGORITHM_UNSPECIFIED = 0; - - // Refers to the Elliptic Curve Digital Signature Algorithm over the - // NIST P-256 curve. - ECDSA_P256 = 1; - - // Refers to the Elliptic Curve Digital Signature Algorithm over the - // NIST P-384 curve. - ECDSA_P384 = 2; - - // Refers to the Edwards-curve Digital Signature Algorithm over curve - // 25519, as described in RFC 8410. - EDDSA_25519 = 3; - } - - // Optional. A signature algorithm that must be used. If this is omitted, any - // EC-based signature algorithm will be allowed. - EcSignatureAlgorithm signature_algorithm = 1 [(google.api.field_behavior) = OPTIONAL]; - } - - oneof key_type { - // Represents an allowed RSA key type. - RsaKeyType rsa = 1; - - // Represents an allowed Elliptic Curve key type. - EcKeyType elliptic_curve = 2; - } - } - - // [IssuanceModes][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes] specifies the allowed ways in which - // [Certificates][google.cloud.security.privateca.v1.Certificate] may be requested from this - // [CaPool][google.cloud.security.privateca.v1.CaPool]. - message IssuanceModes { - // Optional. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1.Certificate] by - // specifying a CSR. - bool allow_csr_based_issuance = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. When true, allows callers to create [Certificates][google.cloud.security.privateca.v1.Certificate] by - // specifying a [CertificateConfig][google.cloud.security.privateca.v1.CertificateConfig]. - bool allow_config_based_issuance = 2 [(google.api.field_behavior) = OPTIONAL]; - } - - // Optional. If any [AllowedKeyType][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.AllowedKeyType] is specified, then the certificate request's - // public key must match one of the key types listed here. Otherwise, - // any key may be used. - repeated AllowedKeyType allowed_key_types = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The maximum lifetime allowed for issued [Certificates][google.cloud.security.privateca.v1.Certificate]. Note - // that if the issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] expires before a - // [Certificate][google.cloud.security.privateca.v1.Certificate]'s requested maximum_lifetime, the effective lifetime will - // be explicitly truncated to match it. - google.protobuf.Duration maximum_lifetime = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. If specified, then only methods allowed in the [IssuanceModes][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.IssuanceModes] may be - // used to issue [Certificates][google.cloud.security.privateca.v1.Certificate]. - IssuanceModes allowed_issuance_modes = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A set of X.509 values that will be applied to all certificates issued - // through this [CaPool][google.cloud.security.privateca.v1.CaPool]. If a certificate request includes conflicting - // values for the same properties, they will be overwritten by the values - // defined here. If a certificate request uses a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] - // that defines conflicting - // [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values] for the same - // properties, the certificate issuance request will fail. - X509Parameters baseline_values = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes constraints on identities that may appear in - // [Certificates][google.cloud.security.privateca.v1.Certificate] issued through this [CaPool][google.cloud.security.privateca.v1.CaPool]. - // If this is omitted, then this [CaPool][google.cloud.security.privateca.v1.CaPool] will not add restrictions on a - // certificate's identity. - CertificateIdentityConstraints identity_constraints = 5 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes the set of X.509 extensions that may appear in a - // [Certificate][google.cloud.security.privateca.v1.Certificate] issued through this [CaPool][google.cloud.security.privateca.v1.CaPool]. If a certificate request - // sets extensions that don't appear in the [passthrough_extensions][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.passthrough_extensions], - // those extensions will be dropped. If a certificate request uses a - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with - // [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values] that don't - // appear here, the certificate issuance request will fail. If this is - // omitted, then this [CaPool][google.cloud.security.privateca.v1.CaPool] will not add restrictions on a - // certificate's X.509 extensions. These constraints do not apply to X.509 - // extensions set in this [CaPool][google.cloud.security.privateca.v1.CaPool]'s [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values]. - CertificateExtensionConstraints passthrough_extensions = 6 [(google.api.field_behavior) = OPTIONAL]; - } - - // Output only. The resource name for this [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Required. Immutable. The [Tier][google.cloud.security.privateca.v1.CaPool.Tier] of this [CaPool][google.cloud.security.privateca.v1.CaPool]. - Tier tier = 2 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Optional. The [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] to control how [Certificates][google.cloud.security.privateca.v1.Certificate] - // will be issued from this [CaPool][google.cloud.security.privateca.v1.CaPool]. - IssuancePolicy issuance_policy = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The [PublishingOptions][google.cloud.security.privateca.v1.CaPool.PublishingOptions] to follow when issuing - // [Certificates][google.cloud.security.privateca.v1.Certificate] from any [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in this - // [CaPool][google.cloud.security.privateca.v1.CaPool]. - PublishingOptions publishing_options = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Labels with user-defined metadata. - map labels = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] corresponds to a signed X.509 certificate -// Revocation List (CRL). A CRL contains the serial numbers of certificates that -// should no longer be trusted. -message CertificateRevocationList { - option (google.api.resource) = { - type: "privateca.googleapis.com/CertificateRevocationList" - pattern: "projects/{project}/locations/{location}/caPools/{ca_pool}/certificateAuthorities/{certificate_authority}/certificateRevocationLists/{certificate_revocation_list}" - }; - - // Describes a revoked [Certificate][google.cloud.security.privateca.v1.Certificate]. - message RevokedCertificate { - // The resource name for the [Certificate][google.cloud.security.privateca.v1.Certificate] in the format - // `projects/*/locations/*/caPools/*/certificates/*`. - string certificate = 1 [(google.api.resource_reference) = { - type: "privateca.googleapis.com/Certificate" - }]; - - // The serial number of the [Certificate][google.cloud.security.privateca.v1.Certificate]. - string hex_serial_number = 2; - - // The reason the [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - RevocationReason revocation_reason = 3; - } - - // The state of a [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList], indicating if it is current. - enum State { - // Not specified. - STATE_UNSPECIFIED = 0; - - // The [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] is up to date. - ACTIVE = 1; - - // The [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] is no longer current. - SUPERSEDED = 2; - } - - // Output only. The resource name for this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] in - // the format - // `projects/*/locations/*/caPools/*certificateAuthorities/*/ - // certificateRevocationLists/*`. - string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The CRL sequence number that appears in pem_crl. - int64 sequence_number = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The revoked serial numbers that appear in pem_crl. - repeated RevokedCertificate revoked_certificates = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The PEM-encoded X.509 CRL. - string pem_crl = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The location where 'pem_crl' can be accessed. - string access_url = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The [State][google.cloud.security.privateca.v1.CertificateRevocationList.State] for this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. - State state = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] was created. - google.protobuf.Timestamp create_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] was updated. - google.protobuf.Timestamp update_time = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The revision ID of this [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. A new revision is - // committed whenever a new CRL is published. The format is an 8-character - // hexadecimal string. - string revision_id = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Optional. Labels with user-defined metadata. - map labels = 10 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [Certificate][google.cloud.security.privateca.v1.Certificate] corresponds to a signed X.509 certificate issued by a -// [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. -message Certificate { - option (google.api.resource) = { - type: "privateca.googleapis.com/Certificate" - pattern: "projects/{project}/locations/{location}/caPools/{ca_pool}/certificates/{certificate}" - }; - - // Describes fields that are relavent to the revocation of a [Certificate][google.cloud.security.privateca.v1.Certificate]. - message RevocationDetails { - // Indicates why a [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - RevocationReason revocation_state = 1; - - // The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was revoked. - google.protobuf.Timestamp revocation_time = 2; - } - - // Output only. The resource name for this [Certificate][google.cloud.security.privateca.v1.Certificate] in the format - // `projects/*/locations/*/caPools/*/certificates/*`. - string name = 1 [ - (google.api.field_behavior) = OUTPUT_ONLY, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/Certificate" - } - ]; - - // The config used to create a signed X.509 certificate. - oneof certificate_config { - // Immutable. A pem-encoded X.509 certificate signing request (CSR). - string pem_csr = 2 [(google.api.field_behavior) = IMMUTABLE]; - - // Immutable. A description of the certificate and key that does not require X.509 or - // ASN.1. - CertificateConfig config = 3 [(google.api.field_behavior) = IMMUTABLE]; - } - - // Output only. The resource name of the issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string issuer_certificate_authority = 4 [ - (google.api.field_behavior) = OUTPUT_ONLY, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Required. Immutable. The desired lifetime of a certificate. Used to create the - // "not_before_time" and "not_after_time" fields inside an X.509 - // certificate. Note that the lifetime may be truncated if it would extend - // past the life of any certificate authority in the issuing chain. - google.protobuf.Duration lifetime = 5 [ - (google.api.field_behavior) = REQUIRED, - (google.api.field_behavior) = IMMUTABLE - ]; - - // Immutable. The resource name for a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] used to issue this - // certificate, in the format - // `projects/*/locations/*/certificateTemplates/*`. - // If this is specified, the caller must have the necessary permission to - // use this template. If this is omitted, no template will be used. - // This template must be in the same location as the [Certificate][google.cloud.security.privateca.v1.Certificate]. - string certificate_template = 6 [ - (google.api.field_behavior) = IMMUTABLE, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateTemplate" - } - ]; - - // Immutable. Specifies how the [Certificate][google.cloud.security.privateca.v1.Certificate]'s identity fields are to be decided. - // If this is omitted, the `DEFAULT` subject mode will be used. - SubjectRequestMode subject_mode = 7 [(google.api.field_behavior) = IMMUTABLE]; - - // Output only. Details regarding the revocation of this [Certificate][google.cloud.security.privateca.v1.Certificate]. This - // [Certificate][google.cloud.security.privateca.v1.Certificate] is considered revoked if and only if this field is present. - RevocationDetails revocation_details = 8 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The pem-encoded, signed X.509 certificate. - string pem_certificate = 9 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. A structured description of the issued X.509 certificate. - CertificateDescription certificate_description = 10 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The chain that may be used to verify the X.509 certificate. Expected to be - // in issuer-to-root order according to RFC 5246. - repeated string pem_certificate_chain = 11 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was created. - google.protobuf.Timestamp create_time = 12 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [Certificate][google.cloud.security.privateca.v1.Certificate] was updated. - google.protobuf.Timestamp update_time = 13 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Optional. Labels with user-defined metadata. - map labels = 14 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] refers to a managed template for certificate -// issuance. -message CertificateTemplate { - option (google.api.resource) = { - type: "privateca.googleapis.com/CertificateTemplate" - pattern: "projects/{project}/locations/{location}/certificateTemplates/{certificate_template}" - }; - - // Output only. The resource name for this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] in the format - // `projects/*/locations/*/certificateTemplates/*`. - string name = 1 [ - (google.api.field_behavior) = OUTPUT_ONLY, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateTemplate" - } - ]; - - // Optional. A set of X.509 values that will be applied to all issued certificates that - // use this template. If the certificate request includes conflicting values - // for the same properties, they will be overwritten by the values defined - // here. If the issuing [CaPool][google.cloud.security.privateca.v1.CaPool]'s [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] - // defines conflicting - // [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values] for the same - // properties, the certificate issuance request will fail. - X509Parameters predefined_values = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes constraints on identities that may be appear in - // [Certificates][google.cloud.security.privateca.v1.Certificate] issued using this template. If this is omitted, - // then this template will not add restrictions on a certificate's identity. - CertificateIdentityConstraints identity_constraints = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes the set of X.509 extensions that may appear in a - // [Certificate][google.cloud.security.privateca.v1.Certificate] issued using this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]. If a certificate - // request sets extensions that don't appear in the - // [passthrough_extensions][google.cloud.security.privateca.v1.CertificateTemplate.passthrough_extensions], those extensions will be dropped. If the - // issuing [CaPool][google.cloud.security.privateca.v1.CaPool]'s [IssuancePolicy][google.cloud.security.privateca.v1.CaPool.IssuancePolicy] defines - // [baseline_values][google.cloud.security.privateca.v1.CaPool.IssuancePolicy.baseline_values] that don't appear - // here, the certificate issuance request will fail. If this is omitted, then - // this template will not add restrictions on a certificate's X.509 - // extensions. These constraints do not apply to X.509 extensions set in this - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]'s [predefined_values][google.cloud.security.privateca.v1.CertificateTemplate.predefined_values]. - CertificateExtensionConstraints passthrough_extensions = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A human-readable description of scenarios this template is intended for. - string description = 5 [(google.api.field_behavior) = OPTIONAL]; - - // Output only. The time at which this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] was created. - google.protobuf.Timestamp create_time = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time at which this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] was updated. - google.protobuf.Timestamp update_time = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Optional. Labels with user-defined metadata. - map labels = 8 [(google.api.field_behavior) = OPTIONAL]; -} - -// An [X509Parameters][google.cloud.security.privateca.v1.X509Parameters] is used to describe certain fields of an -// X.509 certificate, such as the key usage fields, fields specific to CA -// certificates, certificate policy extensions and custom extensions. -message X509Parameters { - // Describes values that are relevant in a CA certificate. - message CaOptions { - // Optional. Refers to the "CA" X.509 extension, which is a boolean value. When this - // value is missing, the extension will be omitted from the CA certificate. - optional bool is_ca = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Refers to the path length restriction X.509 extension. For a CA - // certificate, this value describes the depth of subordinate CA - // certificates that are allowed. - // If this value is less than 0, the request will fail. - // If this value is missing, the max path length will be omitted from the - // CA certificate. - optional int32 max_issuer_path_length = 2 [(google.api.field_behavior) = OPTIONAL]; - } - - // Optional. Indicates the intended use for keys that correspond to a certificate. - KeyUsage key_usage = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes options in this [X509Parameters][google.cloud.security.privateca.v1.X509Parameters] that are relevant in a CA - // certificate. - CaOptions ca_options = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes the X.509 certificate policy object identifiers, per - // https://tools.ietf.org/html/rfc5280#section-4.2.1.4. - repeated ObjectId policy_ids = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes Online Certificate Status Protocol (OCSP) endpoint addresses - // that appear in the "Authority Information Access" extension in the - // certificate. - repeated string aia_ocsp_servers = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Describes custom X.509 extensions. - repeated X509Extension additional_extensions = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Describes a subordinate CA's issuers. This is either a resource name to a -// known issuing [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], or a PEM issuer certificate chain. -message SubordinateConfig { - // This message describes a subordinate CA's issuer certificate chain. This - // wrapper exists for compatibility reasons. - message SubordinateConfigChain { - // Required. Expected to be in leaf-to-root order according to RFC 5246. - repeated string pem_certificates = 1 [(google.api.field_behavior) = REQUIRED]; - } - - oneof subordinate_config { - // Required. This can refer to a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that was used to create a - // subordinate [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. This field is used for information - // and usability purposes only. The resource name is in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string certificate_authority = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Required. Contains the PEM certificate chain for the issuers of this - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority], but not pem certificate for this CA itself. - SubordinateConfigChain pem_issuer_chain = 2 [(google.api.field_behavior) = REQUIRED]; - } -} - -// A [PublicKey][google.cloud.security.privateca.v1.PublicKey] describes a public key. -message PublicKey { - // Types of public keys formats that are supported. Currently, only `PEM` - // format is supported. - enum KeyFormat { - // Default unspecified value. - KEY_FORMAT_UNSPECIFIED = 0; - - // The key is PEM-encoded as defined in [RFC - // 7468](https://tools.ietf.org/html/rfc7468). It can be any of the - // following: a PEM-encoded PKCS#1/RFC 3447 RSAPublicKey - // structure, an RFC 5280 - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // or a PEM-encoded X.509 certificate signing request (CSR). If a - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // is specified, it can contain a A PEM-encoded PKCS#1/RFC 3447 RSAPublicKey - // or a NIST P-256/secp256r1/prime256v1 or P-384 key. If a CSR is specified, - // it will used solely for the purpose of extracting the public key. When - // generated by the service, it will always be an RFC 5280 - // [SubjectPublicKeyInfo](https://tools.ietf.org/html/rfc5280#section-4.1) - // structure containing an algorithm identifier and a key. - PEM = 1; - } - - // Required. A public key. The padding and encoding - // must match with the `KeyFormat` value specified for the `format` field. - bytes key = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. The format of the public key. - KeyFormat format = 2 [(google.api.field_behavior) = REQUIRED]; -} - -// A [CertificateConfig][google.cloud.security.privateca.v1.CertificateConfig] describes an X.509 certificate or CSR that is to be -// created, as an alternative to using ASN.1. -message CertificateConfig { - // These values are used to create the distinguished name and subject - // alternative name fields in an X.509 certificate. - message SubjectConfig { - // Required. Contains distinguished name fields such as the common name, location and - // organization. - Subject subject = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. The subject alternative name fields. - SubjectAltNames subject_alt_name = 2 [(google.api.field_behavior) = OPTIONAL]; - } - - // Required. Specifies some of the values in a certificate that are related to the - // subject. - SubjectConfig subject_config = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. Describes how some of the technical X.509 fields in a certificate should be - // populated. - X509Parameters x509_config = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. The public key that corresponds to this config. This is, for example, used - // when issuing [Certificates][google.cloud.security.privateca.v1.Certificate], but not when creating a - // self-signed [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] or [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] CSR. - PublicKey public_key = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [CertificateDescription][google.cloud.security.privateca.v1.CertificateDescription] describes an X.509 certificate or CSR that has -// been issued, as an alternative to using ASN.1 / X.509. -message CertificateDescription { - // These values describe fields in an issued X.509 certificate such as the - // distinguished name, subject alternative names, serial number, and lifetime. - message SubjectDescription { - // Contains distinguished name fields such as the common name, location and - // / organization. - Subject subject = 1; - - // The subject alternative name fields. - SubjectAltNames subject_alt_name = 2; - - // The serial number encoded in lowercase hexadecimal. - string hex_serial_number = 3; - - // For convenience, the actual lifetime of an issued certificate. - google.protobuf.Duration lifetime = 4; - - // The time at which the certificate becomes valid. - google.protobuf.Timestamp not_before_time = 5; - - // The time after which the certificate is expired. - // Per RFC 5280, the validity period for a certificate is the period of time - // from not_before_time through not_after_time, inclusive. - // Corresponds to 'not_before_time' + 'lifetime' - 1 second. - google.protobuf.Timestamp not_after_time = 6; - } - - // A KeyId identifies a specific public key, usually by hashing the public - // key. - message KeyId { - // Optional. The value of this KeyId encoded in lowercase hexadecimal. This is most - // likely the 160 bit SHA-1 hash of the public key. - string key_id = 1 [(google.api.field_behavior) = OPTIONAL]; - } - - // A group of fingerprints for the x509 certificate. - message CertificateFingerprint { - // The SHA 256 hash, encoded in hexadecimal, of the DER x509 certificate. - string sha256_hash = 1; - } - - // Describes some of the values in a certificate that are related to the - // subject and lifetime. - SubjectDescription subject_description = 1; - - // Describes some of the technical X.509 fields in a certificate. - X509Parameters x509_description = 2; - - // The public key that corresponds to an issued certificate. - PublicKey public_key = 3; - - // Provides a means of identifiying certificates that contain a particular - // public key, per https://tools.ietf.org/html/rfc5280#section-4.2.1.2. - KeyId subject_key_id = 4; - - // Identifies the subject_key_id of the parent certificate, per - // https://tools.ietf.org/html/rfc5280#section-4.2.1.1 - KeyId authority_key_id = 5; - - // Describes a list of locations to obtain CRL information, i.e. - // the DistributionPoint.fullName described by - // https://tools.ietf.org/html/rfc5280#section-4.2.1.13 - repeated string crl_distribution_points = 6; - - // Describes lists of issuer CA certificate URLs that appear in the - // "Authority Information Access" extension in the certificate. - repeated string aia_issuing_certificate_urls = 7; - - // The hash of the x.509 certificate. - CertificateFingerprint cert_fingerprint = 8; -} - -// An [ObjectId][google.cloud.security.privateca.v1.ObjectId] specifies an object identifier (OID). These provide context -// and describe types in ASN.1 messages. -message ObjectId { - // Required. The parts of an OID path. The most significant parts of the path come - // first. - repeated int32 object_id_path = 1 [(google.api.field_behavior) = REQUIRED]; -} - -// An [X509Extension][google.cloud.security.privateca.v1.X509Extension] specifies an X.509 extension, which may be used in -// different parts of X.509 objects like certificates, CSRs, and CRLs. -message X509Extension { - // Required. The OID for this X.509 extension. - ObjectId object_id = 1 [(google.api.field_behavior) = REQUIRED]; - - // Optional. Indicates whether or not this extension is critical (i.e., if the client - // does not know how to handle this extension, the client should consider this - // to be an error). - bool critical = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Required. The value of this X.509 extension. - bytes value = 3 [(google.api.field_behavior) = REQUIRED]; -} - -// A [KeyUsage][google.cloud.security.privateca.v1.KeyUsage] describes key usage values that may appear in an X.509 -// certificate. -message KeyUsage { - // [KeyUsage.KeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.KeyUsageOptions] corresponds to the key usage values - // described in https://tools.ietf.org/html/rfc5280#section-4.2.1.3. - message KeyUsageOptions { - // The key may be used for digital signatures. - bool digital_signature = 1; - - // The key may be used for cryptographic commitments. Note that this may - // also be referred to as "non-repudiation". - bool content_commitment = 2; - - // The key may be used to encipher other keys. - bool key_encipherment = 3; - - // The key may be used to encipher data. - bool data_encipherment = 4; - - // The key may be used in a key agreement protocol. - bool key_agreement = 5; - - // The key may be used to sign certificates. - bool cert_sign = 6; - - // The key may be used sign certificate revocation lists. - bool crl_sign = 7; - - // The key may be used to encipher only. - bool encipher_only = 8; - - // The key may be used to decipher only. - bool decipher_only = 9; - } - - // [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions] has fields that correspond to - // certain common OIDs that could be specified as an extended key usage value. - message ExtendedKeyUsageOptions { - // Corresponds to OID 1.3.6.1.5.5.7.3.1. Officially described as "TLS WWW - // server authentication", though regularly used for non-WWW TLS. - bool server_auth = 1; - - // Corresponds to OID 1.3.6.1.5.5.7.3.2. Officially described as "TLS WWW - // client authentication", though regularly used for non-WWW TLS. - bool client_auth = 2; - - // Corresponds to OID 1.3.6.1.5.5.7.3.3. Officially described as "Signing of - // downloadable executable code client authentication". - bool code_signing = 3; - - // Corresponds to OID 1.3.6.1.5.5.7.3.4. Officially described as "Email - // protection". - bool email_protection = 4; - - // Corresponds to OID 1.3.6.1.5.5.7.3.8. Officially described as "Binding - // the hash of an object to a time". - bool time_stamping = 5; - - // Corresponds to OID 1.3.6.1.5.5.7.3.9. Officially described as "Signing - // OCSP responses". - bool ocsp_signing = 6; - } - - // Describes high-level ways in which a key may be used. - KeyUsageOptions base_key_usage = 1; - - // Detailed scenarios in which a key may be used. - ExtendedKeyUsageOptions extended_key_usage = 2; - - // Used to describe extended key usages that are not listed in the - // [KeyUsage.ExtendedKeyUsageOptions][google.cloud.security.privateca.v1.KeyUsage.ExtendedKeyUsageOptions] message. - repeated ObjectId unknown_extended_key_usages = 3; -} - -// [Subject][google.cloud.security.privateca.v1.Subject] describes parts of a distinguished name that, in turn, -// describes the subject of the certificate. -message Subject { - // The "common name" of the subject. - string common_name = 1; - - // The country code of the subject. - string country_code = 2; - - // The organization of the subject. - string organization = 3; - - // The organizational_unit of the subject. - string organizational_unit = 4; - - // The locality or city of the subject. - string locality = 5; - - // The province, territory, or regional state of the subject. - string province = 6; - - // The street address of the subject. - string street_address = 7; - - // The postal code of the subject. - string postal_code = 8; -} - -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] corresponds to a more modern way of listing what -// the asserted identity is in a certificate (i.e., compared to the "common -// name" in the distinguished name). -message SubjectAltNames { - // Contains only valid, fully-qualified host names. - repeated string dns_names = 1; - - // Contains only valid RFC 3986 URIs. - repeated string uris = 2; - - // Contains only valid RFC 2822 E-mail addresses. - repeated string email_addresses = 3; - - // Contains only valid 32-bit IPv4 addresses or RFC 4291 IPv6 addresses. - repeated string ip_addresses = 4; - - // Contains additional subject alternative name values. - // For each custom_san, the `value` field must contain an ASN.1 encoded - // UTF8String. - repeated X509Extension custom_sans = 5; -} - -// Describes constraints on a [Certificate][google.cloud.security.privateca.v1.Certificate]'s [Subject][google.cloud.security.privateca.v1.Subject] and -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames]. -message CertificateIdentityConstraints { - // Optional. A CEL expression that may be used to validate the resolved X.509 Subject - // and/or Subject Alternative Name before a certificate is signed. - // To see the full allowed syntax and some examples, see - // https://cloud.google.com/certificate-authority-service/docs/using-cel - google.type.Expr cel_expression = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Required. If this is true, the [Subject][google.cloud.security.privateca.v1.Subject] field may be copied from a certificate - // request into the signed certificate. Otherwise, the requested [Subject][google.cloud.security.privateca.v1.Subject] - // will be discarded. - optional bool allow_subject_passthrough = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. If this is true, the [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] extension may be copied from a - // certificate request into the signed certificate. Otherwise, the requested - // [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] will be discarded. - optional bool allow_subject_alt_names_passthrough = 3 [(google.api.field_behavior) = REQUIRED]; -} - -// Describes a set of X.509 extensions that may be part of some certificate -// issuance controls. -message CertificateExtensionConstraints { - // Describes well-known X.509 extensions that can appear in a [Certificate][google.cloud.security.privateca.v1.Certificate], - // not including the [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] extension. - enum KnownCertificateExtension { - // Not specified. - KNOWN_CERTIFICATE_EXTENSION_UNSPECIFIED = 0; - - // Refers to a certificate's Key Usage extension, as described in [RFC 5280 - // section 4.2.1.3](https://tools.ietf.org/html/rfc5280#section-4.2.1.3). - // This corresponds to the [KeyUsage.base_key_usage][google.cloud.security.privateca.v1.KeyUsage.base_key_usage] field. - BASE_KEY_USAGE = 1; - - // Refers to a certificate's Extended Key Usage extension, as described in - // [RFC 5280 - // section 4.2.1.12](https://tools.ietf.org/html/rfc5280#section-4.2.1.12). - // This corresponds to the [KeyUsage.extended_key_usage][google.cloud.security.privateca.v1.KeyUsage.extended_key_usage] message. - EXTENDED_KEY_USAGE = 2; - - // Refers to a certificate's Basic Constraints extension, as described in - // [RFC 5280 - // section 4.2.1.9](https://tools.ietf.org/html/rfc5280#section-4.2.1.9). - // This corresponds to the [X509Parameters.ca_options][google.cloud.security.privateca.v1.X509Parameters.ca_options] field. - CA_OPTIONS = 3; - - // Refers to a certificate's Policy object identifiers, as described in - // [RFC 5280 - // section 4.2.1.4](https://tools.ietf.org/html/rfc5280#section-4.2.1.4). - // This corresponds to the [X509Parameters.policy_ids][google.cloud.security.privateca.v1.X509Parameters.policy_ids] field. - POLICY_IDS = 4; - - // Refers to OCSP servers in a certificate's Authority Information Access - // extension, as described in - // [RFC 5280 - // section 4.2.2.1](https://tools.ietf.org/html/rfc5280#section-4.2.2.1), - // This corresponds to the [X509Parameters.aia_ocsp_servers][google.cloud.security.privateca.v1.X509Parameters.aia_ocsp_servers] field. - AIA_OCSP_SERVERS = 5; - } - - // Optional. A set of named X.509 extensions. Will be combined with - // [additional_extensions][google.cloud.security.privateca.v1.CertificateExtensionConstraints.additional_extensions] to determine the full set of X.509 extensions. - repeated KnownCertificateExtension known_extensions = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A set of [ObjectIds][google.cloud.security.privateca.v1.ObjectId] identifying custom X.509 extensions. - // Will be combined with [known_extensions][google.cloud.security.privateca.v1.CertificateExtensionConstraints.known_extensions] to determine the full set of - // X.509 extensions. - repeated ObjectId additional_extensions = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// A [RevocationReason][google.cloud.security.privateca.v1.RevocationReason] indicates whether a [Certificate][google.cloud.security.privateca.v1.Certificate] has been revoked, -// and the reason for revocation. These correspond to standard revocation -// reasons from RFC 5280. Note that the enum labels and values in this -// definition are not the same ASN.1 values defined in RFC 5280. These values -// will be translated to the correct ASN.1 values when a CRL is created. -enum RevocationReason { - // Default unspecified value. This value does indicate that a [Certificate][google.cloud.security.privateca.v1.Certificate] - // has been revoked, but that a reason has not been recorded. - REVOCATION_REASON_UNSPECIFIED = 0; - - // Key material for this [Certificate][google.cloud.security.privateca.v1.Certificate] may have leaked. - KEY_COMPROMISE = 1; - - // The key material for a certificate authority in the issuing path may have - // leaked. - CERTIFICATE_AUTHORITY_COMPROMISE = 2; - - // The subject or other attributes in this [Certificate][google.cloud.security.privateca.v1.Certificate] have changed. - AFFILIATION_CHANGED = 3; - - // This [Certificate][google.cloud.security.privateca.v1.Certificate] has been superseded. - SUPERSEDED = 4; - - // This [Certificate][google.cloud.security.privateca.v1.Certificate] or entities in the issuing path have ceased to - // operate. - CESSATION_OF_OPERATION = 5; - - // This [Certificate][google.cloud.security.privateca.v1.Certificate] should not be considered valid, it is expected that it - // may become valid in the future. - CERTIFICATE_HOLD = 6; - - // This [Certificate][google.cloud.security.privateca.v1.Certificate] no longer has permission to assert the listed - // attributes. - PRIVILEGE_WITHDRAWN = 7; - - // The authority which determines appropriate attributes for a [Certificate][google.cloud.security.privateca.v1.Certificate] - // may have been compromised. - ATTRIBUTE_AUTHORITY_COMPROMISE = 8; -} - -// Describes the way in which a [Certificate][google.cloud.security.privateca.v1.Certificate]'s [Subject][google.cloud.security.privateca.v1.Subject] and/or -// [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] will be resolved. -enum SubjectRequestMode { - // Not specified. - SUBJECT_REQUEST_MODE_UNSPECIFIED = 0; - - // The default mode used in most cases. Indicates that the certificate's - // [Subject][google.cloud.security.privateca.v1.Subject] and/or [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] are specified in the certificate - // request. This mode requires the caller to have the - // `privateca.certificates.create` permission. - DEFAULT = 1; - - // A mode reserved for special cases. Indicates that the certificate should - // have one or more SPIFFE [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] set by the service based - // on the caller's identity. This mode will ignore any explicitly specified - // [Subject][google.cloud.security.privateca.v1.Subject] and/or [SubjectAltNames][google.cloud.security.privateca.v1.SubjectAltNames] in the certificate request. - // This mode requires the caller to have the - // `privateca.certificates.createForSelf` permission. - REFLECTED_SPIFFE = 2; -} diff --git a/proto/google/cloud/security/privateca/v1/service.proto b/proto/google/cloud/security/privateca/v1/service.proto deleted file mode 100644 index 4dcfc4f..0000000 --- a/proto/google/cloud/security/privateca/v1/service.proto +++ /dev/null @@ -1,1273 +0,0 @@ -// Copyright 2022 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.cloud.security.privateca.v1; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/api/field_behavior.proto"; -import "google/api/resource.proto"; -import "google/cloud/security/privateca/v1/resources.proto"; -import "google/longrunning/operations.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/field_mask.proto"; -import "google/protobuf/timestamp.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.Cloud.Security.PrivateCA.V1"; -option go_package = "google.golang.org/genproto/googleapis/cloud/security/privateca/v1;privateca"; -option java_multiple_files = true; -option java_outer_classname = "PrivateCaProto"; -option java_package = "com.google.cloud.security.privateca.v1"; -option php_namespace = "Google\\Cloud\\Security\\PrivateCA\\V1"; -option ruby_package = "Google::Cloud::Security::PrivateCA::V1"; - -// [Certificate Authority Service][google.cloud.security.privateca.v1.CertificateAuthorityService] manages private -// certificate authorities and issued certificates. -service CertificateAuthorityService { - option (google.api.default_host) = "privateca.googleapis.com"; - option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform"; - - // Create a new [Certificate][google.cloud.security.privateca.v1.Certificate] in a given Project, Location from a particular - // [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc CreateCertificate(CreateCertificateRequest) returns (Certificate) { - option (google.api.http) = { - post: "/v1/{parent=projects/*/locations/*/caPools/*}/certificates" - body: "certificate" - }; - option (google.api.method_signature) = "parent,certificate,certificate_id"; - } - - // Returns a [Certificate][google.cloud.security.privateca.v1.Certificate]. - rpc GetCertificate(GetCertificateRequest) returns (Certificate) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/caPools/*/certificates/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Lists [Certificates][google.cloud.security.privateca.v1.Certificate]. - rpc ListCertificates(ListCertificatesRequest) returns (ListCertificatesResponse) { - option (google.api.http) = { - get: "/v1/{parent=projects/*/locations/*/caPools/*}/certificates" - }; - option (google.api.method_signature) = "parent"; - } - - // Revoke a [Certificate][google.cloud.security.privateca.v1.Certificate]. - rpc RevokeCertificate(RevokeCertificateRequest) returns (Certificate) { - option (google.api.http) = { - post: "/v1/{name=projects/*/locations/*/caPools/*/certificates/*}:revoke" - body: "*" - }; - option (google.api.method_signature) = "name"; - } - - // Update a [Certificate][google.cloud.security.privateca.v1.Certificate]. Currently, the only field you can update is the - // [labels][google.cloud.security.privateca.v1.Certificate.labels] field. - rpc UpdateCertificate(UpdateCertificateRequest) returns (Certificate) { - option (google.api.http) = { - patch: "/v1/{certificate.name=projects/*/locations/*/caPools/*/certificates/*}" - body: "certificate" - }; - option (google.api.method_signature) = "certificate,update_mask"; - } - - // Activate a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that is in state - // [AWAITING_USER_ACTIVATION][google.cloud.security.privateca.v1.CertificateAuthority.State.AWAITING_USER_ACTIVATION] - // and is of type [SUBORDINATE][google.cloud.security.privateca.v1.CertificateAuthority.Type.SUBORDINATE]. After - // the parent Certificate Authority signs a certificate signing request from - // [FetchCertificateAuthorityCsr][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr], this method can complete the activation - // process. - rpc ActivateCertificateAuthority(ActivateCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}:activate" - body: "*" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Create a new [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in a given Project and Location. - rpc CreateCertificateAuthority(CreateCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{parent=projects/*/locations/*/caPools/*}/certificateAuthorities" - body: "certificate_authority" - }; - option (google.api.method_signature) = "parent,certificate_authority,certificate_authority_id"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Disable a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc DisableCertificateAuthority(DisableCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}:disable" - body: "*" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Enable a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc EnableCertificateAuthority(EnableCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}:enable" - body: "*" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Fetch a certificate signing request (CSR) from a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // that is in state - // [AWAITING_USER_ACTIVATION][google.cloud.security.privateca.v1.CertificateAuthority.State.AWAITING_USER_ACTIVATION] - // and is of type [SUBORDINATE][google.cloud.security.privateca.v1.CertificateAuthority.Type.SUBORDINATE]. The - // CSR must then be signed by the desired parent Certificate Authority, which - // could be another [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] resource, or could be an on-prem - // certificate authority. See also [ActivateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.ActivateCertificateAuthority]. - rpc FetchCertificateAuthorityCsr(FetchCertificateAuthorityCsrRequest) returns (FetchCertificateAuthorityCsrResponse) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}:fetch" - }; - option (google.api.method_signature) = "name"; - } - - // Returns a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc GetCertificateAuthority(GetCertificateAuthorityRequest) returns (CertificateAuthority) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Lists [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc ListCertificateAuthorities(ListCertificateAuthoritiesRequest) returns (ListCertificateAuthoritiesResponse) { - option (google.api.http) = { - get: "/v1/{parent=projects/*/locations/*/caPools/*}/certificateAuthorities" - }; - option (google.api.method_signature) = "parent"; - } - - // Undelete a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that has been deleted. - rpc UndeleteCertificateAuthority(UndeleteCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}:undelete" - body: "*" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Delete a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc DeleteCertificateAuthority(DeleteCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - delete: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*}" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Update a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority]. - rpc UpdateCertificateAuthority(UpdateCertificateAuthorityRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - patch: "/v1/{certificate_authority.name=projects/*/locations/*/caPools/*/certificateAuthorities/*}" - body: "certificate_authority" - }; - option (google.api.method_signature) = "certificate_authority,update_mask"; - option (google.longrunning.operation_info) = { - response_type: "CertificateAuthority" - metadata_type: "OperationMetadata" - }; - } - - // Create a [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc CreateCaPool(CreateCaPoolRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{parent=projects/*/locations/*}/caPools" - body: "ca_pool" - }; - option (google.api.method_signature) = "parent,ca_pool,ca_pool_id"; - option (google.longrunning.operation_info) = { - response_type: "CaPool" - metadata_type: "OperationMetadata" - }; - } - - // Update a [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc UpdateCaPool(UpdateCaPoolRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - patch: "/v1/{ca_pool.name=projects/*/locations/*/caPools/*}" - body: "ca_pool" - }; - option (google.api.method_signature) = "ca_pool,update_mask"; - option (google.longrunning.operation_info) = { - response_type: "CaPool" - metadata_type: "OperationMetadata" - }; - } - - // Returns a [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc GetCaPool(GetCaPoolRequest) returns (CaPool) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/caPools/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Lists [CaPools][google.cloud.security.privateca.v1.CaPool]. - rpc ListCaPools(ListCaPoolsRequest) returns (ListCaPoolsResponse) { - option (google.api.http) = { - get: "/v1/{parent=projects/*/locations/*}/caPools" - }; - option (google.api.method_signature) = "parent"; - } - - // Delete a [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc DeleteCaPool(DeleteCaPoolRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - delete: "/v1/{name=projects/*/locations/*/caPools/*}" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "google.protobuf.Empty" - metadata_type: "OperationMetadata" - }; - } - - // FetchCaCerts returns the current trust anchor for the [CaPool][google.cloud.security.privateca.v1.CaPool]. This will - // include CA certificate chains for all ACTIVE [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // resources in the [CaPool][google.cloud.security.privateca.v1.CaPool]. - rpc FetchCaCerts(FetchCaCertsRequest) returns (FetchCaCertsResponse) { - option (google.api.http) = { - post: "/v1/{ca_pool=projects/*/locations/*/caPools/*}:fetchCaCerts" - body: "*" - }; - option (google.api.method_signature) = "ca_pool"; - } - - // Returns a [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. - rpc GetCertificateRevocationList(GetCertificateRevocationListRequest) returns (CertificateRevocationList) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/caPools/*/certificateAuthorities/*/certificateRevocationLists/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Lists [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList]. - rpc ListCertificateRevocationLists(ListCertificateRevocationListsRequest) returns (ListCertificateRevocationListsResponse) { - option (google.api.http) = { - get: "/v1/{parent=projects/*/locations/*/caPools/*/certificateAuthorities/*}/certificateRevocationLists" - }; - option (google.api.method_signature) = "parent"; - } - - // Update a [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList]. - rpc UpdateCertificateRevocationList(UpdateCertificateRevocationListRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - patch: "/v1/{certificate_revocation_list.name=projects/*/locations/*/caPools/*/certificateAuthorities/*/certificateRevocationLists/*}" - body: "certificate_revocation_list" - }; - option (google.api.method_signature) = "certificate_revocation_list,update_mask"; - option (google.longrunning.operation_info) = { - response_type: "CertificateRevocationList" - metadata_type: "OperationMetadata" - }; - } - - // Create a new [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] in a given Project and Location. - rpc CreateCertificateTemplate(CreateCertificateTemplateRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - post: "/v1/{parent=projects/*/locations/*}/certificateTemplates" - body: "certificate_template" - }; - option (google.api.method_signature) = "parent,certificate_template,certificate_template_id"; - option (google.longrunning.operation_info) = { - response_type: "CertificateTemplate" - metadata_type: "OperationMetadata" - }; - } - - // DeleteCertificateTemplate deletes a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]. - rpc DeleteCertificateTemplate(DeleteCertificateTemplateRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - delete: "/v1/{name=projects/*/locations/*/certificateTemplates/*}" - }; - option (google.api.method_signature) = "name"; - option (google.longrunning.operation_info) = { - response_type: "google.protobuf.Empty" - metadata_type: "google.cloud.security.privateca.v1.OperationMetadata" - }; - } - - // Returns a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]. - rpc GetCertificateTemplate(GetCertificateTemplateRequest) returns (CertificateTemplate) { - option (google.api.http) = { - get: "/v1/{name=projects/*/locations/*/certificateTemplates/*}" - }; - option (google.api.method_signature) = "name"; - } - - // Lists [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate]. - rpc ListCertificateTemplates(ListCertificateTemplatesRequest) returns (ListCertificateTemplatesResponse) { - option (google.api.http) = { - get: "/v1/{parent=projects/*/locations/*}/certificateTemplates" - }; - option (google.api.method_signature) = "parent"; - } - - // Update a [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate]. - rpc UpdateCertificateTemplate(UpdateCertificateTemplateRequest) returns (google.longrunning.Operation) { - option (google.api.http) = { - patch: "/v1/{certificate_template.name=projects/*/locations/*/certificateTemplates/*}" - body: "certificate_template" - }; - option (google.api.method_signature) = "certificate_template,update_mask"; - option (google.longrunning.operation_info) = { - response_type: "CertificateTemplate" - metadata_type: "OperationMetadata" - }; - } -} - -// Request message for [CertificateAuthorityService.CreateCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificate]. -message CreateCertificateRequest { - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the [Certificate][google.cloud.security.privateca.v1.Certificate], - // in the format `projects/*/locations/*/caPools/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Optional. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}`. This field is required when using a - // [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the Enterprise [CertificateAuthority.Tier][], - // but is optional and its value is ignored otherwise. - string certificate_id = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Required. A [Certificate][google.cloud.security.privateca.v1.Certificate] with initial field values. - Certificate certificate = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and the - // request times out. If you make the request again with the same request ID, - // the server can check if original operation with the same request ID was - // received, and if so, will ignore the second request. This prevents clients - // from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. If this is true, no [Certificate][google.cloud.security.privateca.v1.Certificate] resource will be persisted regardless - // of the [CaPool][google.cloud.security.privateca.v1.CaPool]'s [tier][google.cloud.security.privateca.v1.CaPool.tier], and the returned [Certificate][google.cloud.security.privateca.v1.Certificate] - // will not contain the [pem_certificate][google.cloud.security.privateca.v1.Certificate.pem_certificate] field. - bool validate_only = 5 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. The resource ID of the [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] that should issue the - // certificate. This optional field will ignore the load-balancing scheme of - // the Pool and directly issue the certificate from the CA with the specified - // ID, contained in the same [CaPool][google.cloud.security.privateca.v1.CaPool] referenced by `parent`. Per-CA quota - // rules apply. If left empty, a [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] will be chosen from - // the [CaPool][google.cloud.security.privateca.v1.CaPool] by the service. For example, to issue a [Certificate][google.cloud.security.privateca.v1.Certificate] from - // a Certificate Authority with resource name - // "projects/my-project/locations/us-central1/caPools/my-pool/certificateAuthorities/my-ca", - // you can set the [parent][google.cloud.security.privateca.v1.CreateCertificateRequest.parent] to - // "projects/my-project/locations/us-central1/caPools/my-pool" and the - // [issuing_certificate_authority_id][google.cloud.security.privateca.v1.CreateCertificateRequest.issuing_certificate_authority_id] to "my-ca". - string issuing_certificate_authority_id = 6 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.GetCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificate]. -message GetCertificateRequest { - // Required. The [name][google.cloud.security.privateca.v1.Certificate.name] of the [Certificate][google.cloud.security.privateca.v1.Certificate] to get. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/Certificate" - } - ]; -} - -// Request message for [CertificateAuthorityService.ListCertificates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates]. -message ListCertificatesRequest { - // Required. The resource name of the location associated with the - // [Certificates][google.cloud.security.privateca.v1.Certificate], in the format - // `projects/*/locations/*/caPools/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Optional. Limit on the number of - // [Certificates][google.cloud.security.privateca.v1.Certificate] to include in the - // response. Further [Certificates][google.cloud.security.privateca.v1.Certificate] can subsequently be obtained - // by including the - // [ListCertificatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificatesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Pagination token, returned earlier via - // [ListCertificatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificatesResponse.next_page_token]. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Only include resources that match the filter in the response. For details - // on supported filters and syntax, see [Certificates Filtering - // documentation](https://cloud.google.com/certificate-authority-service/docs/sorting-filtering-certificates#filtering_support). - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Specify how the results should be sorted. For details on supported fields - // and syntax, see [Certificates Sorting - // documentation](https://cloud.google.com/certificate-authority-service/docs/sorting-filtering-certificates#sorting_support). - string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for [CertificateAuthorityService.ListCertificates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificates]. -message ListCertificatesResponse { - // The list of [Certificates][google.cloud.security.privateca.v1.Certificate]. - repeated Certificate certificates = 1; - - // A token to retrieve next page of results. Pass this value in - // [ListCertificatesRequest.next_page_token][] to retrieve the - // next page of results. - string next_page_token = 2; - - // A list of locations (e.g. "us-west1") that could not be reached. - repeated string unreachable = 3; -} - -// Request message for -// [CertificateAuthorityService.RevokeCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.RevokeCertificate]. -message RevokeCertificateRequest { - // Required. The resource name for this [Certificate][google.cloud.security.privateca.v1.Certificate] in the - // format - // `projects/*/locations/*/caPools/*/certificates/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/Certificate" - } - ]; - - // Required. The [RevocationReason][google.cloud.security.privateca.v1.RevocationReason] for revoking this certificate. - RevocationReason reason = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for [CertificateAuthorityService.UpdateCertificate][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificate]. -message UpdateCertificateRequest { - // Required. [Certificate][google.cloud.security.privateca.v1.Certificate] with updated values. - Certificate certificate = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. A list of fields to be updated in this request. - google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.ActivateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.ActivateCertificateAuthority]. -message ActivateCertificateAuthorityRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Required. The signed CA certificate issued from - // [FetchCertificateAuthorityCsrResponse.pem_csr][google.cloud.security.privateca.v1.FetchCertificateAuthorityCsrResponse.pem_csr]. - string pem_ca_certificate = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. Must include information about the issuer of 'pem_ca_certificate', and any - // further issuers until the self-signed CA. - SubordinateConfig subordinate_config = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.CreateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateAuthority]. -message CreateCertificateAuthorityRequest { - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the - // [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority], in the format - // `projects/*/locations/*/caPools/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - string certificate_authority_id = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. A [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] with initial field values. - CertificateAuthority certificate_authority = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.DisableCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.DisableCertificateAuthority]. -message DisableCertificateAuthorityRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.EnableCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.EnableCertificateAuthority]. -message EnableCertificateAuthorityRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.FetchCertificateAuthorityCsr][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr]. -message FetchCertificateAuthorityCsrRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; -} - -// Response message for -// [CertificateAuthorityService.FetchCertificateAuthorityCsr][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCertificateAuthorityCsr]. -message FetchCertificateAuthorityCsrResponse { - // Output only. The PEM-encoded signed certificate signing request (CSR). - string pem_csr = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; -} - -// Request message for [CertificateAuthorityService.GetCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateAuthority]. -message GetCertificateAuthorityRequest { - // Required. The [name][google.cloud.security.privateca.v1.CertificateAuthority.name] of the [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] to - // get. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; -} - -// Request message for -// [CertificateAuthorityService.ListCertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities]. -message ListCertificateAuthoritiesRequest { - // Required. The resource name of the [CaPool][google.cloud.security.privateca.v1.CaPool] associated with the - // [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority], in the format - // `projects/*/locations/*/caPools/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Optional. Limit on the number of [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] to - // include in the response. - // Further [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority] can subsequently be - // obtained by including the - // [ListCertificateAuthoritiesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Pagination token, returned earlier via - // [ListCertificateAuthoritiesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateAuthoritiesResponse.next_page_token]. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Only include resources that match the filter in the response. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Specify how the results should be sorted. - string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for -// [CertificateAuthorityService.ListCertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateAuthorities]. -message ListCertificateAuthoritiesResponse { - // The list of [CertificateAuthorities][google.cloud.security.privateca.v1.CertificateAuthority]. - repeated CertificateAuthority certificate_authorities = 1; - - // A token to retrieve next page of results. Pass this value in - // [ListCertificateAuthoritiesRequest.next_page_token][] to retrieve the next - // page of results. - string next_page_token = 2; - - // A list of locations (e.g. "us-west1") that could not be reached. - repeated string unreachable = 3; -} - -// Request message for -// [CertificateAuthorityService.UndeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UndeleteCertificateAuthority]. -message UndeleteCertificateAuthorityRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.DeleteCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateAuthority]. -message DeleteCertificateAuthorityRequest { - // Required. The resource name for this [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] in the - // format `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. This field allows the CA to be deleted even if the CA has - // active certs. Active certs include both unrevoked and unexpired certs. - bool ignore_active_certificates = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateAuthority]. -message UpdateCertificateAuthorityRequest { - // Required. [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] with updated values. - CertificateAuthority certificate_authority = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. A list of fields to be updated in this request. - google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.CreateCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCaPool]. -message CreateCaPoolRequest { - // Required. The resource name of the location associated with the - // [CaPool][google.cloud.security.privateca.v1.CaPool], in the format `projects/*/locations/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - string ca_pool_id = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. A [CaPool][google.cloud.security.privateca.v1.CaPool] with initial field values. - CaPool ca_pool = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.UpdateCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCaPool]. -message UpdateCaPoolRequest { - // Required. [CaPool][google.cloud.security.privateca.v1.CaPool] with updated values. - CaPool ca_pool = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. A list of fields to be updated in this request. - google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.DeleteCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCaPool]. -message DeleteCaPoolRequest { - // Required. The resource name for this [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.FetchCaCerts][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts]. -message FetchCaCertsRequest { - // Required. The resource name for the [CaPool][google.cloud.security.privateca.v1.CaPool] in the - // format `projects/*/locations/*/caPools/*`. - string ca_pool = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for -// [CertificateAuthorityService.FetchCaCerts][google.cloud.security.privateca.v1.CertificateAuthorityService.FetchCaCerts]. -message FetchCaCertsResponse { - message CertChain { - // The certificates that form the CA chain, from leaf to root order. - repeated string certificates = 1; - } - - // The PEM encoded CA certificate chains of all - // [ACTIVE][CertificateAuthority.State.ACTIVE] [CertificateAuthority][google.cloud.security.privateca.v1.CertificateAuthority] - // resources in this [CaPool][google.cloud.security.privateca.v1.CaPool]. - repeated CertChain ca_certs = 1; -} - -// Request message for [CertificateAuthorityService.GetCaPool][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCaPool]. -message GetCaPoolRequest { - // Required. The [name][google.cloud.security.privateca.v1.CaPool.name] of the [CaPool][google.cloud.security.privateca.v1.CaPool] to get. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CaPool" - } - ]; -} - -// Request message for -// [CertificateAuthorityService.ListCaPools][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools]. -message ListCaPoolsRequest { - // Required. The resource name of the location associated with the - // [CaPools][google.cloud.security.privateca.v1.CaPool], in the format - // `projects/*/locations/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. Limit on the number of [CaPools][google.cloud.security.privateca.v1.CaPool] to - // include in the response. - // Further [CaPools][google.cloud.security.privateca.v1.CaPool] can subsequently be - // obtained by including the - // [ListCaPoolsResponse.next_page_token][google.cloud.security.privateca.v1.ListCaPoolsResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Pagination token, returned earlier via - // [ListCaPoolsResponse.next_page_token][google.cloud.security.privateca.v1.ListCaPoolsResponse.next_page_token]. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Only include resources that match the filter in the response. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Specify how the results should be sorted. - string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for -// [CertificateAuthorityService.ListCaPools][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCaPools]. -message ListCaPoolsResponse { - // The list of [CaPools][google.cloud.security.privateca.v1.CaPool]. - repeated CaPool ca_pools = 1; - - // A token to retrieve next page of results. Pass this value in - // [ListCertificateAuthoritiesRequest.next_page_token][] to retrieve the next - // page of results. - string next_page_token = 2; - - // A list of locations (e.g. "us-west1") that could not be reached. - repeated string unreachable = 3; -} - -// Request message for -// [CertificateAuthorityService.GetCertificateRevocationList][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateRevocationList]. -message GetCertificateRevocationListRequest { - // Required. The [name][google.cloud.security.privateca.v1.CertificateRevocationList.name] of the - // [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] to get. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateRevocationList" - } - ]; -} - -// Request message for -// [CertificateAuthorityService.ListCertificateRevocationLists][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists]. -message ListCertificateRevocationListsRequest { - // Required. The resource name of the location associated with the - // [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList], in the format - // `projects/*/locations/*/caPools/*/certificateAuthorities/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateAuthority" - } - ]; - - // Optional. Limit on the number of - // [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList] to include in the - // response. Further [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList] - // can subsequently be obtained by including the - // [ListCertificateRevocationListsResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Pagination token, returned earlier via - // [ListCertificateRevocationListsResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateRevocationListsResponse.next_page_token]. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Only include resources that match the filter in the response. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Specify how the results should be sorted. - string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for -// [CertificateAuthorityService.ListCertificateRevocationLists][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateRevocationLists]. -message ListCertificateRevocationListsResponse { - // The list of [CertificateRevocationLists][google.cloud.security.privateca.v1.CertificateRevocationList]. - repeated CertificateRevocationList certificate_revocation_lists = 1; - - // A token to retrieve next page of results. Pass this value in - // [ListCertificateRevocationListsRequest.next_page_token][] to retrieve the - // next page of results. - string next_page_token = 2; - - // A list of locations (e.g. "us-west1") that could not be reached. - repeated string unreachable = 3; -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateRevocationList][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateRevocationList]. -message UpdateCertificateRevocationListRequest { - // Required. [CertificateRevocationList][google.cloud.security.privateca.v1.CertificateRevocationList] with updated values. - CertificateRevocationList certificate_revocation_list = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. A list of fields to be updated in this request. - google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.CreateCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.CreateCertificateTemplate]. -message CreateCertificateTemplateRequest { - // Required. The resource name of the location associated with the - // [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate], in the format - // `projects/*/locations/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Required. It must be unique within a location and match the regular - // expression `[a-zA-Z0-9_-]{1,63}` - string certificate_template_id = 2 [(google.api.field_behavior) = REQUIRED]; - - // Required. A [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with initial field values. - CertificateTemplate certificate_template = 3 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.DeleteCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.DeleteCertificateTemplate]. -message DeleteCertificateTemplateRequest { - // Required. The resource name for this [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] in the format - // `projects/*/locations/*/certificateTemplates/*`. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateTemplate" - } - ]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 2 [(google.api.field_behavior) = OPTIONAL]; -} - -// Request message for -// [CertificateAuthorityService.GetCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.GetCertificateTemplate]. -message GetCertificateTemplateRequest { - // Required. The [name][google.cloud.security.privateca.v1.CertificateTemplate.name] of the [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] to - // get. - string name = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "privateca.googleapis.com/CertificateTemplate" - } - ]; -} - -// Request message for -// [CertificateAuthorityService.ListCertificateTemplates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates]. -message ListCertificateTemplatesRequest { - // Required. The resource name of the location associated with the - // [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate], in the format - // `projects/*/locations/*`. - string parent = 1 [ - (google.api.field_behavior) = REQUIRED, - (google.api.resource_reference) = { - type: "locations.googleapis.com/Location" - } - ]; - - // Optional. Limit on the number of - // [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate] to include in the response. - // Further [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate] can subsequently be - // obtained by including the - // [ListCertificateTemplatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateTemplatesResponse.next_page_token] in a subsequent - // request. If unspecified, the server will pick an appropriate default. - int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Pagination token, returned earlier via - // [ListCertificateTemplatesResponse.next_page_token][google.cloud.security.privateca.v1.ListCertificateTemplatesResponse.next_page_token]. - string page_token = 3 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Only include resources that match the filter in the response. - string filter = 4 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Specify how the results should be sorted. - string order_by = 5 [(google.api.field_behavior) = OPTIONAL]; -} - -// Response message for -// [CertificateAuthorityService.ListCertificateTemplates][google.cloud.security.privateca.v1.CertificateAuthorityService.ListCertificateTemplates]. -message ListCertificateTemplatesResponse { - // The list of [CertificateTemplates][google.cloud.security.privateca.v1.CertificateTemplate]. - repeated CertificateTemplate certificate_templates = 1; - - // A token to retrieve next page of results. Pass this value in - // [ListCertificateTemplatesRequest.next_page_token][] to retrieve - // the next page of results. - string next_page_token = 2; - - // A list of locations (e.g. "us-west1") that could not be reached. - repeated string unreachable = 3; -} - -// Request message for -// [CertificateAuthorityService.UpdateCertificateTemplate][google.cloud.security.privateca.v1.CertificateAuthorityService.UpdateCertificateTemplate]. -message UpdateCertificateTemplateRequest { - // Required. [CertificateTemplate][google.cloud.security.privateca.v1.CertificateTemplate] with updated values. - CertificateTemplate certificate_template = 1 [(google.api.field_behavior) = REQUIRED]; - - // Required. A list of fields to be updated in this request. - google.protobuf.FieldMask update_mask = 2 [(google.api.field_behavior) = REQUIRED]; - - // Optional. An ID to identify requests. Specify a unique request ID so that if you must - // retry your request, the server will know to ignore the request if it has - // already been completed. The server will guarantee that for at least 60 - // minutes since the first request. - // - // For example, consider a situation where you make an initial request and t - // he request times out. If you make the request again with the same request - // ID, the server can check if original operation with the same request ID - // was received, and if so, will ignore the second request. This prevents - // clients from accidentally creating duplicate commitments. - // - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 3 [(google.api.field_behavior) = OPTIONAL]; -} - -// Represents the metadata of the long-running operation. -message OperationMetadata { - // Output only. The time the operation was created. - google.protobuf.Timestamp create_time = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. The time the operation finished running. - google.protobuf.Timestamp end_time = 2 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. Server-defined resource path for the target of the operation. - string target = 3 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. Name of the verb executed by the operation. - string verb = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. Human-readable status of the operation, if any. - string status_message = 5 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. Identifies whether the user has requested cancellation - // of the operation. Operations that have successfully been cancelled - // have [Operation.error][] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, - // corresponding to `Code.CANCELLED`. - bool requested_cancellation = 6 [(google.api.field_behavior) = OUTPUT_ONLY]; - - // Output only. API version used to start the operation. - string api_version = 7 [(google.api.field_behavior) = OUTPUT_ONLY]; -} diff --git a/proto/google/longrunning/operations.proto b/proto/google/longrunning/operations.proto deleted file mode 100644 index c1fdc6f..0000000 --- a/proto/google/longrunning/operations.proto +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.longrunning; - -import "google/api/annotations.proto"; -import "google/api/client.proto"; -import "google/protobuf/any.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/empty.proto"; -import "google/rpc/status.proto"; -import "google/protobuf/descriptor.proto"; - -option cc_enable_arenas = true; -option csharp_namespace = "Google.LongRunning"; -option go_package = "google.golang.org/genproto/googleapis/longrunning;longrunning"; -option java_multiple_files = true; -option java_outer_classname = "OperationsProto"; -option java_package = "com.google.longrunning"; -option php_namespace = "Google\\LongRunning"; - -extend google.protobuf.MethodOptions { - // Additional information regarding long-running operations. - // In particular, this specifies the types that are returned from - // long-running operations. - // - // Required for methods that return `google.longrunning.Operation`; invalid - // otherwise. - google.longrunning.OperationInfo operation_info = 1049; -} - -// Manages long-running operations with an API service. -// -// When an API method normally takes long time to complete, it can be designed -// to return [Operation][google.longrunning.Operation] to the client, and the client can use this -// interface to receive the real response asynchronously by polling the -// operation resource, or pass the operation resource to another API (such as -// Google Cloud Pub/Sub API) to receive the response. Any API service that -// returns long-running operations should implement the `Operations` interface -// so developers can have a consistent client experience. -service Operations { - option (google.api.default_host) = "longrunning.googleapis.com"; - - // Lists operations that match the specified filter in the request. If the - // server doesn't support this method, it returns `UNIMPLEMENTED`. - // - // NOTE: the `name` binding allows API services to override the binding - // to use different resource name schemes, such as `users/*/operations`. To - // override the binding, API services can add a binding such as - // `"/v1/{name=users/*}/operations"` to their service configuration. - // For backwards compatibility, the default name includes the operations - // collection id, however overriding users must ensure the name binding - // is the parent resource, without the operations collection id. - rpc ListOperations(ListOperationsRequest) returns (ListOperationsResponse) { - option (google.api.http) = { - get: "/v1/{name=operations}" - }; - option (google.api.method_signature) = "name,filter"; - } - - // Gets the latest state of a long-running operation. Clients can use this - // method to poll the operation result at intervals as recommended by the API - // service. - rpc GetOperation(GetOperationRequest) returns (Operation) { - option (google.api.http) = { - get: "/v1/{name=operations/**}" - }; - option (google.api.method_signature) = "name"; - } - - // Deletes a long-running operation. This method indicates that the client is - // no longer interested in the operation result. It does not cancel the - // operation. If the server doesn't support this method, it returns - // `google.rpc.Code.UNIMPLEMENTED`. - rpc DeleteOperation(DeleteOperationRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - delete: "/v1/{name=operations/**}" - }; - option (google.api.method_signature) = "name"; - } - - // Starts asynchronous cancellation on a long-running operation. The server - // makes a best effort to cancel the operation, but success is not - // guaranteed. If the server doesn't support this method, it returns - // `google.rpc.Code.UNIMPLEMENTED`. Clients can use - // [Operations.GetOperation][google.longrunning.Operations.GetOperation] or - // other methods to check whether the cancellation succeeded or whether the - // operation completed despite cancellation. On successful cancellation, - // the operation is not deleted; instead, it becomes an operation with - // an [Operation.error][google.longrunning.Operation.error] value with a [google.rpc.Status.code][google.rpc.Status.code] of 1, - // corresponding to `Code.CANCELLED`. - rpc CancelOperation(CancelOperationRequest) returns (google.protobuf.Empty) { - option (google.api.http) = { - post: "/v1/{name=operations/**}:cancel" - body: "*" - }; - option (google.api.method_signature) = "name"; - } - - // Waits until the specified long-running operation is done or reaches at most - // a specified timeout, returning the latest state. If the operation is - // already done, the latest state is immediately returned. If the timeout - // specified is greater than the default HTTP/RPC timeout, the HTTP/RPC - // timeout is used. If the server does not support this method, it returns - // `google.rpc.Code.UNIMPLEMENTED`. - // Note that this method is on a best-effort basis. It may return the latest - // state before the specified timeout (including immediately), meaning even an - // immediate response is no guarantee that the operation is done. - rpc WaitOperation(WaitOperationRequest) returns (Operation) { - } -} - -// This resource represents a long-running operation that is the result of a -// network API call. -message Operation { - // The server-assigned name, which is only unique within the same service that - // originally returns it. If you use the default HTTP mapping, the - // `name` should be a resource name ending with `operations/{unique_id}`. - string name = 1; - - // Service-specific metadata associated with the operation. It typically - // contains progress information and common metadata such as create time. - // Some services might not provide such metadata. Any method that returns a - // long-running operation should document the metadata type, if any. - google.protobuf.Any metadata = 2; - - // If the value is `false`, it means the operation is still in progress. - // If `true`, the operation is completed, and either `error` or `response` is - // available. - bool done = 3; - - // The operation result, which can be either an `error` or a valid `response`. - // If `done` == `false`, neither `error` nor `response` is set. - // If `done` == `true`, exactly one of `error` or `response` is set. - oneof result { - // The error result of the operation in case of failure or cancellation. - google.rpc.Status error = 4; - - // The normal response of the operation in case of success. If the original - // method returns no data on success, such as `Delete`, the response is - // `google.protobuf.Empty`. If the original method is standard - // `Get`/`Create`/`Update`, the response should be the resource. For other - // methods, the response should have the type `XxxResponse`, where `Xxx` - // is the original method name. For example, if the original method name - // is `TakeSnapshot()`, the inferred response type is - // `TakeSnapshotResponse`. - google.protobuf.Any response = 5; - } -} - -// The request message for [Operations.GetOperation][google.longrunning.Operations.GetOperation]. -message GetOperationRequest { - // The name of the operation resource. - string name = 1; -} - -// The request message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. -message ListOperationsRequest { - // The name of the operation's parent resource. - string name = 4; - - // The standard list filter. - string filter = 1; - - // The standard list page size. - int32 page_size = 2; - - // The standard list page token. - string page_token = 3; -} - -// The response message for [Operations.ListOperations][google.longrunning.Operations.ListOperations]. -message ListOperationsResponse { - // A list of operations that matches the specified filter in the request. - repeated Operation operations = 1; - - // The standard List next-page token. - string next_page_token = 2; -} - -// The request message for [Operations.CancelOperation][google.longrunning.Operations.CancelOperation]. -message CancelOperationRequest { - // The name of the operation resource to be cancelled. - string name = 1; -} - -// The request message for [Operations.DeleteOperation][google.longrunning.Operations.DeleteOperation]. -message DeleteOperationRequest { - // The name of the operation resource to be deleted. - string name = 1; -} - -// The request message for [Operations.WaitOperation][google.longrunning.Operations.WaitOperation]. -message WaitOperationRequest { - // The name of the operation resource to wait on. - string name = 1; - - // The maximum duration to wait before timing out. If left blank, the wait - // will be at most the time permitted by the underlying HTTP/RPC protocol. - // If RPC context deadline is also specified, the shorter one will be used. - google.protobuf.Duration timeout = 2; -} - -// A message representing the message types used by a long-running operation. -// -// Example: -// -// rpc LongRunningRecognize(LongRunningRecognizeRequest) -// returns (google.longrunning.Operation) { -// option (google.longrunning.operation_info) = { -// response_type: "LongRunningRecognizeResponse" -// metadata_type: "LongRunningRecognizeMetadata" -// }; -// } -message OperationInfo { - // Required. The message name of the primary return type for this - // long-running operation. - // This type will be used to deserialize the LRO's response. - // - // If the response is in a different package from the rpc, a fully-qualified - // message name must be used (e.g. `google.protobuf.Struct`). - // - // Note: Altering this value constitutes a breaking change. - string response_type = 1; - - // Required. The message name of the metadata type for this long-running - // operation. - // - // If the response is in a different package from the rpc, a fully-qualified - // message name must be used (e.g. `google.protobuf.Struct`). - // - // Note: Altering this value constitutes a breaking change. - string metadata_type = 2; -} diff --git a/proto/google/rpc/code.proto b/proto/google/rpc/code.proto deleted file mode 100644 index 98ae0ac..0000000 --- a/proto/google/rpc/code.proto +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -option go_package = "google.golang.org/genproto/googleapis/rpc/code;code"; -option java_multiple_files = true; -option java_outer_classname = "CodeProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - -// The canonical error codes for gRPC APIs. -// -// -// Sometimes multiple error codes may apply. Services should return -// the most specific error code that applies. For example, prefer -// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply. -// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`. -enum Code { - // Not an error; returned on success - // - // HTTP Mapping: 200 OK - OK = 0; - - // The operation was cancelled, typically by the caller. - // - // HTTP Mapping: 499 Client Closed Request - CANCELLED = 1; - - // Unknown error. For example, this error may be returned when - // a `Status` value received from another address space belongs to - // an error space that is not known in this address space. Also - // errors raised by APIs that do not return enough error information - // may be converted to this error. - // - // HTTP Mapping: 500 Internal Server Error - UNKNOWN = 2; - - // The client specified an invalid argument. Note that this differs - // from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments - // that are problematic regardless of the state of the system - // (e.g., a malformed file name). - // - // HTTP Mapping: 400 Bad Request - INVALID_ARGUMENT = 3; - - // The deadline expired before the operation could complete. For operations - // that change the state of the system, this error may be returned - // even if the operation has completed successfully. For example, a - // successful response from a server could have been delayed long - // enough for the deadline to expire. - // - // HTTP Mapping: 504 Gateway Timeout - DEADLINE_EXCEEDED = 4; - - // Some requested entity (e.g., file or directory) was not found. - // - // Note to server developers: if a request is denied for an entire class - // of users, such as gradual feature rollout or undocumented whitelist, - // `NOT_FOUND` may be used. If a request is denied for some users within - // a class of users, such as user-based access control, `PERMISSION_DENIED` - // must be used. - // - // HTTP Mapping: 404 Not Found - NOT_FOUND = 5; - - // The entity that a client attempted to create (e.g., file or directory) - // already exists. - // - // HTTP Mapping: 409 Conflict - ALREADY_EXISTS = 6; - - // The caller does not have permission to execute the specified - // operation. `PERMISSION_DENIED` must not be used for rejections - // caused by exhausting some resource (use `RESOURCE_EXHAUSTED` - // instead for those errors). `PERMISSION_DENIED` must not be - // used if the caller can not be identified (use `UNAUTHENTICATED` - // instead for those errors). This error code does not imply the - // request is valid or the requested entity exists or satisfies - // other pre-conditions. - // - // HTTP Mapping: 403 Forbidden - PERMISSION_DENIED = 7; - - // The request does not have valid authentication credentials for the - // operation. - // - // HTTP Mapping: 401 Unauthorized - UNAUTHENTICATED = 16; - - // Some resource has been exhausted, perhaps a per-user quota, or - // perhaps the entire file system is out of space. - // - // HTTP Mapping: 429 Too Many Requests - RESOURCE_EXHAUSTED = 8; - - // The operation was rejected because the system is not in a state - // required for the operation's execution. For example, the directory - // to be deleted is non-empty, an rmdir operation is applied to - // a non-directory, etc. - // - // Service implementors can use the following guidelines to decide - // between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`: - // (a) Use `UNAVAILABLE` if the client can retry just the failing call. - // (b) Use `ABORTED` if the client should retry at a higher level - // (e.g., when a client-specified test-and-set fails, indicating the - // client should restart a read-modify-write sequence). - // (c) Use `FAILED_PRECONDITION` if the client should not retry until - // the system state has been explicitly fixed. E.g., if an "rmdir" - // fails because the directory is non-empty, `FAILED_PRECONDITION` - // should be returned since the client should not retry unless - // the files are deleted from the directory. - // - // HTTP Mapping: 400 Bad Request - FAILED_PRECONDITION = 9; - - // The operation was aborted, typically due to a concurrency issue such as - // a sequencer check failure or transaction abort. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 409 Conflict - ABORTED = 10; - - // The operation was attempted past the valid range. E.g., seeking or - // reading past end-of-file. - // - // Unlike `INVALID_ARGUMENT`, this error indicates a problem that may - // be fixed if the system state changes. For example, a 32-bit file - // system will generate `INVALID_ARGUMENT` if asked to read at an - // offset that is not in the range [0,2^32-1], but it will generate - // `OUT_OF_RANGE` if asked to read from an offset past the current - // file size. - // - // There is a fair bit of overlap between `FAILED_PRECONDITION` and - // `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific - // error) when it applies so that callers who are iterating through - // a space can easily look for an `OUT_OF_RANGE` error to detect when - // they are done. - // - // HTTP Mapping: 400 Bad Request - OUT_OF_RANGE = 11; - - // The operation is not implemented or is not supported/enabled in this - // service. - // - // HTTP Mapping: 501 Not Implemented - UNIMPLEMENTED = 12; - - // Internal errors. This means that some invariants expected by the - // underlying system have been broken. This error code is reserved - // for serious errors. - // - // HTTP Mapping: 500 Internal Server Error - INTERNAL = 13; - - // The service is currently unavailable. This is most likely a - // transient condition, which can be corrected by retrying with - // a backoff. Note that it is not always safe to retry - // non-idempotent operations. - // - // See the guidelines above for deciding between `FAILED_PRECONDITION`, - // `ABORTED`, and `UNAVAILABLE`. - // - // HTTP Mapping: 503 Service Unavailable - UNAVAILABLE = 14; - - // Unrecoverable data loss or corruption. - // - // HTTP Mapping: 500 Internal Server Error - DATA_LOSS = 15; -} diff --git a/proto/google/rpc/status.proto b/proto/google/rpc/status.proto deleted file mode 100644 index 3b1f7a9..0000000 --- a/proto/google/rpc/status.proto +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2020 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.rpc; - -import "google/protobuf/any.proto"; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/rpc/status;status"; -option java_multiple_files = true; -option java_outer_classname = "StatusProto"; -option java_package = "com.google.rpc"; -option objc_class_prefix = "RPC"; - -// The `Status` type defines a logical error model that is suitable for -// different programming environments, including REST APIs and RPC APIs. It is -// used by [gRPC](https://github.com/grpc). Each `Status` message contains -// three pieces of data: error code, error message, and error details. -// -// You can find out more about this error model and how to work with it in the -// [API Design Guide](https://cloud.google.com/apis/design/errors). -message Status { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - int32 code = 1; - - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - string message = 2; - - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - repeated google.protobuf.Any details = 3; -} diff --git a/proto/google/security/meshca/v1/meshca.proto b/proto/google/security/meshca/v1/meshca.proto deleted file mode 100644 index b0bd140..0000000 --- a/proto/google/security/meshca/v1/meshca.proto +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2019 Istio Authors. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.security.meshca.v1; - -import "google/protobuf/duration.proto"; - -option java_multiple_files = true; -option java_outer_classname = "MeshCaProto"; -option java_package = "com.google.security.meshca.v1"; -option go_package = "github.com/costinm/grpc-mesh/gen/google_ca"; - -// Certificate request message. -message MeshCertificateRequest { - // The request ID must be a valid UUID with the exception that zero UUID is - // not supported (00000000-0000-0000-0000-000000000000). - string request_id = 1; - // PEM-encoded certificate request. - string csr = 2; - // Optional: requested certificate validity period. - google.protobuf.Duration validity = 3; - // Reserved 4 -} - -// Certificate response message. -message MeshCertificateResponse { - // PEM-encoded certificate chain. - // Leaf cert is element '0'. Root cert is element 'n'. - repeated string cert_chain = 1; -} - -// Service for managing certificates issued by the CSM CA. -service MeshCertificateService { - // Using provided CSR, returns a signed certificate that represents a GCP - // service account identity. - rpc CreateCertificate(MeshCertificateRequest) - returns (MeshCertificateResponse) { - } -} diff --git a/proto/google/type/expr.proto b/proto/google/type/expr.proto deleted file mode 100644 index af0778c..0000000 --- a/proto/google/type/expr.proto +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.type; - -option go_package = "google.golang.org/genproto/googleapis/type/expr;expr"; -option java_multiple_files = true; -option java_outer_classname = "ExprProto"; -option java_package = "com.google.type"; -option objc_class_prefix = "GTP"; - -// Represents a textual expression in the Common Expression Language (CEL) -// syntax. CEL is a C-like expression language. The syntax and semantics of CEL -// are documented at https://github.com/google/cel-spec. -// -// Example (Comparison): -// -// title: "Summary size limit" -// description: "Determines if a summary is less than 100 chars" -// expression: "document.summary.size() < 100" -// -// Example (Equality): -// -// title: "Requestor is owner" -// description: "Determines if requestor is the document owner" -// expression: "document.owner == request.auth.claims.email" -// -// Example (Logic): -// -// title: "Public documents" -// description: "Determine whether the document should be publicly visible" -// expression: "document.type != 'private' && document.type != 'internal'" -// -// Example (Data Manipulation): -// -// title: "Notification string" -// description: "Create a notification string with a timestamp." -// expression: "'New message received at ' + string(document.create_time)" -// -// The exact variables and functions that may be referenced within an expression -// are determined by the service that evaluates it. See the service -// documentation for additional information. -message Expr { - // Textual representation of an expression in Common Expression Language - // syntax. - string expression = 1; - - // Optional. Title for the expression, i.e. a short string describing - // its purpose. This can be used e.g. in UIs which allow to enter the - // expression. - string title = 2; - - // Optional. Description of the expression. This is a longer text which - // describes the expression, e.g. when hovered over it in a UI. - string description = 3; - - // Optional. String indicating the location of the expression for error - // reporting, e.g. a file name and a position in the file. - string location = 4; -} diff --git a/proto/grpc/binlog/v1/binarylog.proto b/proto/grpc/binlog/v1/binarylog.proto deleted file mode 100644 index 9ed1733..0000000 --- a/proto/grpc/binlog/v1/binarylog.proto +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright 2018 The gRPC Authors -// All rights reserved. -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/binlog/v1/binarylog.proto - -syntax = "proto3"; - -package grpc.binarylog.v1; - -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; - -option go_package = "google.golang.org/grpc/binarylog/grpc_binarylog_v1"; -option java_multiple_files = true; -option java_package = "io.grpc.binarylog.v1"; -option java_outer_classname = "BinaryLogProto"; - -// Log entry we store in binary logs -message GrpcLogEntry { - // Enumerates the type of event - // Note the terminology is different from the RPC semantics - // definition, but the same meaning is expressed here. - enum EventType { - EVENT_TYPE_UNKNOWN = 0; - // Header sent from client to server - EVENT_TYPE_CLIENT_HEADER = 1; - // Header sent from server to client - EVENT_TYPE_SERVER_HEADER = 2; - // Message sent from client to server - EVENT_TYPE_CLIENT_MESSAGE = 3; - // Message sent from server to client - EVENT_TYPE_SERVER_MESSAGE = 4; - // A signal that client is done sending - EVENT_TYPE_CLIENT_HALF_CLOSE = 5; - // Trailer indicates the end of the RPC. - // On client side, this event means a trailer was either received - // from the network or the gRPC library locally generated a status - // to inform the application about a failure. - // On server side, this event means the server application requested - // to send a trailer. Note: EVENT_TYPE_CANCEL may still arrive after - // this due to races on server side. - EVENT_TYPE_SERVER_TRAILER = 6; - // A signal that the RPC is cancelled. On client side, this - // indicates the client application requests a cancellation. - // On server side, this indicates that cancellation was detected. - // Note: This marks the end of the RPC. Events may arrive after - // this due to races. For example, on client side a trailer - // may arrive even though the application requested to cancel the RPC. - EVENT_TYPE_CANCEL = 7; - } - - // Enumerates the entity that generates the log entry - enum Logger { - LOGGER_UNKNOWN = 0; - LOGGER_CLIENT = 1; - LOGGER_SERVER = 2; - } - - // The timestamp of the binary log message - google.protobuf.Timestamp timestamp = 1; - - // Uniquely identifies a call. The value must not be 0 in order to disambiguate - // from an unset value. - // Each call may have several log entries, they will all have the same call_id. - // Nothing is guaranteed about their value other than they are unique across - // different RPCs in the same gRPC process. - uint64 call_id = 2; - - // The entry sequence id for this call. The first GrpcLogEntry has a - // value of 1, to disambiguate from an unset value. The purpose of - // this field is to detect missing entries in environments where - // durability or ordering is not guaranteed. - uint64 sequence_id_within_call = 3; - - EventType type = 4; - Logger logger = 5; // One of the above Logger enum - - // The logger uses one of the following fields to record the payload, - // according to the type of the log entry. - oneof payload { - ClientHeader client_header = 6; - ServerHeader server_header = 7; - // Used by EVENT_TYPE_CLIENT_MESSAGE, EVENT_TYPE_SERVER_MESSAGE - Message message = 8; - Trailer trailer = 9; - } - - // true if payload does not represent the full message or metadata. - bool payload_truncated = 10; - - // Peer address information, will only be recorded on the first - // incoming event. On client side, peer is logged on - // EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in - // the case of trailers-only. On server side, peer is always - // logged on EVENT_TYPE_CLIENT_HEADER. - Address peer = 11; -}; - -message ClientHeader { - // This contains only the metadata from the application. - Metadata metadata = 1; - - // The name of the RPC method, which looks something like: - // // - // Note the leading "/" character. - string method_name = 2; - - // A single process may be used to run multiple virtual - // servers with different identities. - // The authority is the name of such a server identitiy. - // It is typically a portion of the URI in the form of - // or : . - string authority = 3; - - // the RPC timeout - google.protobuf.Duration timeout = 4; -} - -message ServerHeader { - // This contains only the metadata from the application. - Metadata metadata = 1; -} - -message Trailer { - // This contains only the metadata from the application. - Metadata metadata = 1; - - // The gRPC status code. - uint32 status_code = 2; - - // An original status message before any transport specific - // encoding. - string status_message = 3; - - // The value of the 'grpc-status-details-bin' metadata key. If - // present, this is always an encoded 'google.rpc.Status' message. - bytes status_details = 4; -} - -// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE -message Message { - // Length of the message. It may not be the same as the length of the - // data field, as the logging payload can be truncated or omitted. - uint32 length = 1; - // May be truncated or omitted. - bytes data = 2; -} - -// A list of metadata pairs, used in the payload of client header, -// server header, and server trailer. -// Implementations may omit some entries to honor the header limits -// of GRPC_BINARY_LOG_CONFIG. -// -// Header keys added by gRPC are omitted. To be more specific, -// implementations will not log the following entries, and this is -// not to be treated as a truncation: -// - entries handled by grpc that are not user visible, such as those -// that begin with 'grpc-' (with exception of grpc-trace-bin) -// or keys like 'lb-token' -// - transport specific entries, including but not limited to: -// ':path', ':authority', 'content-encoding', 'user-agent', 'te', etc -// - entries added for call credentials -// -// Implementations must always log grpc-trace-bin if it is present. -// Practically speaking it will only be visible on server side because -// grpc-trace-bin is managed by low level client side mechanisms -// inaccessible from the application level. On server side, the -// header is just a normal metadata key. -// The pair will not count towards the size limit. -message Metadata { - repeated MetadataEntry entry = 1; -} - -// A metadata key value pair -message MetadataEntry { - string key = 1; - bytes value = 2; -} - -// Address information -message Address { - enum Type { - TYPE_UNKNOWN = 0; - // address is in 1.2.3.4 form - TYPE_IPV4 = 1; - // address is in IPv6 canonical form (RFC5952 section 4) - // The scope is NOT included in the address string. - TYPE_IPV6 = 2; - // address is UDS string - TYPE_UNIX = 3; - }; - Type type = 1; - string address = 2; - // only for TYPE_IPV4 and TYPE_IPV6 - uint32 ip_port = 3; -} diff --git a/proto/grpc/channelz/v1/channelz.proto b/proto/grpc/channelz/v1/channelz.proto deleted file mode 100644 index d078109..0000000 --- a/proto/grpc/channelz/v1/channelz.proto +++ /dev/null @@ -1,564 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// This file defines an interface for exporting monitoring information -// out of gRPC servers. See the full design at -// https://github.com/grpc/proposal/blob/master/A14-channelz.md -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/channelz/v1/channelz.proto - -syntax = "proto3"; - -package grpc.channelz.v1; - -import "google/protobuf/any.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; -import "google/protobuf/wrappers.proto"; - -option go_package = "google.golang.org/grpc/channelz/grpc_channelz_v1"; -option java_multiple_files = true; -option java_package = "io.grpc.channelz.v1"; -option java_outer_classname = "ChannelzProto"; - -// Channel is a logical grouping of channels, subchannels, and sockets. -message Channel { - // The identifier for this channel. This should be set. - ChannelRef ref = 1; - // Data specific to this channel. - ChannelData data = 2; - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - - // There are no ordering guarantees on the order of channel refs. - // There may not be cycles in the ref graph. - // A channel ref may be present in more than one channel or subchannel. - repeated ChannelRef channel_ref = 3; - - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of subchannel refs. - // There may not be cycles in the ref graph. - // A sub channel ref may be present in more than one channel or subchannel. - repeated SubchannelRef subchannel_ref = 4; - - // There are no ordering guarantees on the order of sockets. - repeated SocketRef socket_ref = 5; -} - -// Subchannel is a logical grouping of channels, subchannels, and sockets. -// A subchannel is load balanced over by it's ancestor -message Subchannel { - // The identifier for this channel. - SubchannelRef ref = 1; - // Data specific to this channel. - ChannelData data = 2; - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - - // There are no ordering guarantees on the order of channel refs. - // There may not be cycles in the ref graph. - // A channel ref may be present in more than one channel or subchannel. - repeated ChannelRef channel_ref = 3; - - // At most one of 'channel_ref+subchannel_ref' and 'socket' is set. - // There are no ordering guarantees on the order of subchannel refs. - // There may not be cycles in the ref graph. - // A sub channel ref may be present in more than one channel or subchannel. - repeated SubchannelRef subchannel_ref = 4; - - // There are no ordering guarantees on the order of sockets. - repeated SocketRef socket_ref = 5; -} - -// These come from the specified states in this document: -// https://github.com/grpc/grpc/blob/master/doc/connectivity-semantics-and-api.md -message ChannelConnectivityState { - enum State { - UNKNOWN = 0; - IDLE = 1; - CONNECTING = 2; - READY = 3; - TRANSIENT_FAILURE = 4; - SHUTDOWN = 5; - } - State state = 1; -} - -// Channel data is data related to a specific Channel or Subchannel. -message ChannelData { - // The connectivity state of the channel or subchannel. Implementations - // should always set this. - ChannelConnectivityState state = 1; - - // The target this channel originally tried to connect to. May be absent - string target = 2; - - // A trace of recent events on the channel. May be absent. - ChannelTrace trace = 3; - - // The number of calls started on the channel - int64 calls_started = 4; - // The number of calls that have completed with an OK status - int64 calls_succeeded = 5; - // The number of calls that have completed with a non-OK status - int64 calls_failed = 6; - - // The last time a call was started on the channel. - google.protobuf.Timestamp last_call_started_timestamp = 7; -} - -// A trace event is an interesting thing that happened to a channel or -// subchannel, such as creation, address resolution, subchannel creation, etc. -message ChannelTraceEvent { - // High level description of the event. - string description = 1; - // The supported severity levels of trace events. - enum Severity { - CT_UNKNOWN = 0; - CT_INFO = 1; - CT_WARNING = 2; - CT_ERROR = 3; - } - // the severity of the trace event - Severity severity = 2; - // When this event occurred. - google.protobuf.Timestamp timestamp = 3; - // ref of referenced channel or subchannel. - // Optional, only present if this event refers to a child object. For example, - // this field would be filled if this trace event was for a subchannel being - // created. - oneof child_ref { - ChannelRef channel_ref = 4; - SubchannelRef subchannel_ref = 5; - } -} - -// ChannelTrace represents the recent events that have occurred on the channel. -message ChannelTrace { - // Number of events ever logged in this tracing object. This can differ from - // events.size() because events can be overwritten or garbage collected by - // implementations. - int64 num_events_logged = 1; - // Time that this channel was created. - google.protobuf.Timestamp creation_timestamp = 2; - // List of events that have occurred on this channel. - repeated ChannelTraceEvent events = 3; -} - -// ChannelRef is a reference to a Channel. -message ChannelRef { - // The globally unique id for this channel. Must be a positive number. - int64 channel_id = 1; - // An optional name associated with the channel. - string name = 2; - // Intentionally don't use field numbers from other refs. - reserved 3, 4, 5, 6, 7, 8; -} - -// SubchannelRef is a reference to a Subchannel. -message SubchannelRef { - // The globally unique id for this subchannel. Must be a positive number. - int64 subchannel_id = 7; - // An optional name associated with the subchannel. - string name = 8; - // Intentionally don't use field numbers from other refs. - reserved 1, 2, 3, 4, 5, 6; -} - -// SocketRef is a reference to a Socket. -message SocketRef { - // The globally unique id for this socket. Must be a positive number. - int64 socket_id = 3; - // An optional name associated with the socket. - string name = 4; - // Intentionally don't use field numbers from other refs. - reserved 1, 2, 5, 6, 7, 8; -} - -// ServerRef is a reference to a Server. -message ServerRef { - // A globally unique identifier for this server. Must be a positive number. - int64 server_id = 5; - // An optional name associated with the server. - string name = 6; - // Intentionally don't use field numbers from other refs. - reserved 1, 2, 3, 4, 7, 8; -} - -// Server represents a single server. There may be multiple servers in a single -// program. -message Server { - // The identifier for a Server. This should be set. - ServerRef ref = 1; - // The associated data of the Server. - ServerData data = 2; - - // The sockets that the server is listening on. There are no ordering - // guarantees. This may be absent. - repeated SocketRef listen_socket = 3; -} - -// ServerData is data for a specific Server. -message ServerData { - // A trace of recent events on the server. May be absent. - ChannelTrace trace = 1; - - // The number of incoming calls started on the server - int64 calls_started = 2; - // The number of incoming calls that have completed with an OK status - int64 calls_succeeded = 3; - // The number of incoming calls that have a completed with a non-OK status - int64 calls_failed = 4; - - // The last time a call was started on the server. - google.protobuf.Timestamp last_call_started_timestamp = 5; -} - -// Information about an actual connection. Pronounced "sock-ay". -message Socket { - // The identifier for the Socket. - SocketRef ref = 1; - - // Data specific to this Socket. - SocketData data = 2; - // The locally bound address. - Address local = 3; - // The remote bound address. May be absent. - Address remote = 4; - // Security details for this socket. May be absent if not available, or - // there is no security on the socket. - Security security = 5; - - // Optional, represents the name of the remote endpoint, if different than - // the original target name. - string remote_name = 6; -} - -// SocketData is data associated for a specific Socket. The fields present -// are specific to the implementation, so there may be minor differences in -// the semantics. (e.g. flow control windows) -message SocketData { - // The number of streams that have been started. - int64 streams_started = 1; - // The number of streams that have ended successfully: - // On client side, received frame with eos bit set; - // On server side, sent frame with eos bit set. - int64 streams_succeeded = 2; - // The number of streams that have ended unsuccessfully: - // On client side, ended without receiving frame with eos bit set; - // On server side, ended without sending frame with eos bit set. - int64 streams_failed = 3; - // The number of grpc messages successfully sent on this socket. - int64 messages_sent = 4; - // The number of grpc messages received on this socket. - int64 messages_received = 5; - - // The number of keep alives sent. This is typically implemented with HTTP/2 - // ping messages. - int64 keep_alives_sent = 6; - - // The last time a stream was created by this endpoint. Usually unset for - // servers. - google.protobuf.Timestamp last_local_stream_created_timestamp = 7; - // The last time a stream was created by the remote endpoint. Usually unset - // for clients. - google.protobuf.Timestamp last_remote_stream_created_timestamp = 8; - - // The last time a message was sent by this endpoint. - google.protobuf.Timestamp last_message_sent_timestamp = 9; - // The last time a message was received by this endpoint. - google.protobuf.Timestamp last_message_received_timestamp = 10; - - // The amount of window, granted to the local endpoint by the remote endpoint. - // This may be slightly out of date due to network latency. This does NOT - // include stream level or TCP level flow control info. - google.protobuf.Int64Value local_flow_control_window = 11; - - // The amount of window, granted to the remote endpoint by the local endpoint. - // This may be slightly out of date due to network latency. This does NOT - // include stream level or TCP level flow control info. - google.protobuf.Int64Value remote_flow_control_window = 12; - - // Socket options set on this socket. May be absent if 'summary' is set - // on GetSocketRequest. - repeated SocketOption option = 13; -} - -// Address represents the address used to create the socket. -message Address { - message TcpIpAddress { - // Either the IPv4 or IPv6 address in bytes. Will be either 4 bytes or 16 - // bytes in length. - bytes ip_address = 1; - // 0-64k, or -1 if not appropriate. - int32 port = 2; - } - // A Unix Domain Socket address. - message UdsAddress { - string filename = 1; - } - // An address type not included above. - message OtherAddress { - // The human readable version of the value. This value should be set. - string name = 1; - // The actual address message. - google.protobuf.Any value = 2; - } - - oneof address { - TcpIpAddress tcpip_address = 1; - UdsAddress uds_address = 2; - OtherAddress other_address = 3; - } -} - -// Security represents details about how secure the socket is. -message Security { - message Tls { - oneof cipher_suite { - // The cipher suite name in the RFC 4346 format: - // https://tools.ietf.org/html/rfc4346#appendix-C - string standard_name = 1; - // Some other way to describe the cipher suite if - // the RFC 4346 name is not available. - string other_name = 2; - } - // the certificate used by this endpoint. - bytes local_certificate = 3; - // the certificate used by the remote endpoint. - bytes remote_certificate = 4; - } - message OtherSecurity { - // The human readable version of the value. - string name = 1; - // The actual security details message. - google.protobuf.Any value = 2; - } - oneof model { - Tls tls = 1; - OtherSecurity other = 2; - } -} - -// SocketOption represents socket options for a socket. Specifically, these -// are the options returned by getsockopt(). -message SocketOption { - // The full name of the socket option. Typically this will be the upper case - // name, such as "SO_REUSEPORT". - string name = 1; - // The human readable value of this socket option. At least one of value or - // additional will be set. - string value = 2; - // Additional data associated with the socket option. At least one of value - // or additional will be set. - google.protobuf.Any additional = 3; -} - -// For use with SocketOption's additional field. This is primarily used for -// SO_RCVTIMEO and SO_SNDTIMEO -message SocketOptionTimeout { - google.protobuf.Duration duration = 1; -} - -// For use with SocketOption's additional field. This is primarily used for -// SO_LINGER. -message SocketOptionLinger { - // active maps to `struct linger.l_onoff` - bool active = 1; - // duration maps to `struct linger.l_linger` - google.protobuf.Duration duration = 2; -} - -// For use with SocketOption's additional field. Tcp info for -// SOL_TCP and TCP_INFO. -message SocketOptionTcpInfo { - uint32 tcpi_state = 1; - - uint32 tcpi_ca_state = 2; - uint32 tcpi_retransmits = 3; - uint32 tcpi_probes = 4; - uint32 tcpi_backoff = 5; - uint32 tcpi_options = 6; - uint32 tcpi_snd_wscale = 7; - uint32 tcpi_rcv_wscale = 8; - - uint32 tcpi_rto = 9; - uint32 tcpi_ato = 10; - uint32 tcpi_snd_mss = 11; - uint32 tcpi_rcv_mss = 12; - - uint32 tcpi_unacked = 13; - uint32 tcpi_sacked = 14; - uint32 tcpi_lost = 15; - uint32 tcpi_retrans = 16; - uint32 tcpi_fackets = 17; - - uint32 tcpi_last_data_sent = 18; - uint32 tcpi_last_ack_sent = 19; - uint32 tcpi_last_data_recv = 20; - uint32 tcpi_last_ack_recv = 21; - - uint32 tcpi_pmtu = 22; - uint32 tcpi_rcv_ssthresh = 23; - uint32 tcpi_rtt = 24; - uint32 tcpi_rttvar = 25; - uint32 tcpi_snd_ssthresh = 26; - uint32 tcpi_snd_cwnd = 27; - uint32 tcpi_advmss = 28; - uint32 tcpi_reordering = 29; -} - -// Channelz is a service exposed by gRPC servers that provides detailed debug -// information. -service Channelz { - // Gets all root channels (i.e. channels the application has directly - // created). This does not include subchannels nor non-top level channels. - rpc GetTopChannels(GetTopChannelsRequest) returns (GetTopChannelsResponse); - // Gets all servers that exist in the process. - rpc GetServers(GetServersRequest) returns (GetServersResponse); - // Returns a single Server, or else a NOT_FOUND code. - rpc GetServer(GetServerRequest) returns (GetServerResponse); - // Gets all server sockets that exist in the process. - rpc GetServerSockets(GetServerSocketsRequest) returns (GetServerSocketsResponse); - // Returns a single Channel, or else a NOT_FOUND code. - rpc GetChannel(GetChannelRequest) returns (GetChannelResponse); - // Returns a single Subchannel, or else a NOT_FOUND code. - rpc GetSubchannel(GetSubchannelRequest) returns (GetSubchannelResponse); - // Returns a single Socket or else a NOT_FOUND code. - rpc GetSocket(GetSocketRequest) returns (GetSocketResponse); -} - -message GetTopChannelsRequest { - // start_channel_id indicates that only channels at or above this id should be - // included in the results. - // To request the first page, this should be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result ID. - int64 start_channel_id = 1; - - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - int64 max_results = 2; -} - -message GetTopChannelsResponse { - // list of channels that the connection detail service knows about. Sorted in - // ascending channel_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - repeated Channel channel = 1; - // If set, indicates that the list of channels is the final list. Requesting - // more channels can only return more if they are created after this RPC - // completes. - bool end = 2; -} - -message GetServersRequest { - // start_server_id indicates that only servers at or above this id should be - // included in the results. - // To request the first page, this must be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result ID. - int64 start_server_id = 1; - - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - int64 max_results = 2; -} - -message GetServersResponse { - // list of servers that the connection detail service knows about. Sorted in - // ascending server_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - repeated Server server = 1; - // If set, indicates that the list of servers is the final list. Requesting - // more servers will only return more if they are created after this RPC - // completes. - bool end = 2; -} - -message GetServerRequest { - // server_id is the identifier of the specific server to get. - int64 server_id = 1; -} - -message GetServerResponse { - // The Server that corresponds to the requested server_id. This field - // should be set. - Server server = 1; -} - -message GetServerSocketsRequest { - int64 server_id = 1; - // start_socket_id indicates that only sockets at or above this id should be - // included in the results. - // To request the first page, this must be set to 0. To request - // subsequent pages, the client generates this value by adding 1 to - // the highest seen result ID. - int64 start_socket_id = 2; - - // If non-zero, the server will return a page of results containing - // at most this many items. If zero, the server will choose a - // reasonable page size. Must never be negative. - int64 max_results = 3; -} - -message GetServerSocketsResponse { - // list of socket refs that the connection detail service knows about. Sorted in - // ascending socket_id order. - // Must contain at least 1 result, otherwise 'end' must be true. - repeated SocketRef socket_ref = 1; - // If set, indicates that the list of sockets is the final list. Requesting - // more sockets will only return more if they are created after this RPC - // completes. - bool end = 2; -} - -message GetChannelRequest { - // channel_id is the identifier of the specific channel to get. - int64 channel_id = 1; -} - -message GetChannelResponse { - // The Channel that corresponds to the requested channel_id. This field - // should be set. - Channel channel = 1; -} - -message GetSubchannelRequest { - // subchannel_id is the identifier of the specific subchannel to get. - int64 subchannel_id = 1; -} - -message GetSubchannelResponse { - // The Subchannel that corresponds to the requested subchannel_id. This - // field should be set. - Subchannel subchannel = 1; -} - -message GetSocketRequest { - // socket_id is the identifier of the specific socket to get. - int64 socket_id = 1; - - // If true, the response will contain only high level information - // that is inexpensive to obtain. Fields thay may be omitted are - // documented. - bool summary = 2; -} - -message GetSocketResponse { - // The Socket that corresponds to the requested socket_id. This field - // should be set. - Socket socket = 1; -} diff --git a/proto/grpc/core/stats.proto b/proto/grpc/core/stats.proto deleted file mode 100644 index c663227..0000000 --- a/proto/grpc/core/stats.proto +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2017 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.core; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/core"; - -message Bucket { - double start = 1; - uint64 count = 2; -} - -message Histogram { - repeated Bucket buckets = 1; -} - -message Metric { - string name = 1; - oneof value { - uint64 count = 10; - Histogram histogram = 11; - } -} - -message Stats { - repeated Metric metrics = 1; -} diff --git a/proto/grpc/gcp/altscontext.proto b/proto/grpc/gcp/altscontext.proto deleted file mode 100644 index a6cceb1..0000000 --- a/proto/grpc/gcp/altscontext.proto +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/altscontext.proto - -syntax = "proto3"; - -package grpc.gcp; - -import "grpc/gcp/transport_security_common.proto"; - -option go_package = "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp"; -option java_multiple_files = true; -option java_outer_classname = "AltsContextProto"; -option java_package = "io.grpc.alts.internal"; - -message AltsContext { - // The application protocol negotiated for this connection. - string application_protocol = 1; - - // The record protocol negotiated for this connection. - string record_protocol = 2; - - // The security level of the created secure channel. - SecurityLevel security_level = 3; - - // The peer service account. - string peer_service_account = 4; - - // The local service account. - string local_service_account = 5; - - // The RPC protocol versions supported by the peer. - RpcProtocolVersions peer_rpc_versions = 6; - - // Additional attributes of the peer. - map peer_attributes = 7; -} diff --git a/proto/grpc/gcp/handshaker.proto b/proto/grpc/gcp/handshaker.proto deleted file mode 100644 index 02764ba..0000000 --- a/proto/grpc/gcp/handshaker.proto +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/handshaker.proto - -syntax = "proto3"; - -package grpc.gcp; - -import "grpc/gcp/transport_security_common.proto"; - -option go_package = "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp"; -option java_multiple_files = true; -option java_outer_classname = "HandshakerProto"; -option java_package = "io.grpc.alts.internal"; - - -enum HandshakeProtocol { - // Default value. - HANDSHAKE_PROTOCOL_UNSPECIFIED = 0; - - // TLS handshake protocol. - TLS = 1; - - // Application Layer Transport Security handshake protocol. - ALTS = 2; -} - -enum NetworkProtocol { - NETWORK_PROTOCOL_UNSPECIFIED = 0; - TCP = 1; - UDP = 2; -} - -message Endpoint { - // IP address. It should contain an IPv4 or IPv6 string literal, e.g. - // "192.168.0.1" or "2001:db8::1". - string ip_address = 1; - - // Port number. - int32 port = 2; - - // Network protocol (e.g., TCP, UDP) associated with this endpoint. - NetworkProtocol protocol = 3; -} - -message Identity { - oneof identity_oneof { - // Service account of a connection endpoint. - string service_account = 1; - - // Hostname of a connection endpoint. - string hostname = 2; - } - - // Additional attributes of the identity. - map attributes = 3; -} - -message StartClientHandshakeReq { - // Handshake security protocol requested by the client. - HandshakeProtocol handshake_security_protocol = 1; - - // The application protocols supported by the client, e.g., "h2" (for http2), - // "grpc". - repeated string application_protocols = 2; - - // The record protocols supported by the client, e.g., - // "ALTSRP_GCM_AES128". - repeated string record_protocols = 3; - - // (Optional) Describes which server identities are acceptable by the client. - // If target identities are provided and none of them matches the peer - // identity of the server, handshake will fail. - repeated Identity target_identities = 4; - - // (Optional) Application may specify a local identity. Otherwise, the - // handshaker chooses a default local identity. - Identity local_identity = 5; - - // (Optional) Local endpoint information of the connection to the server, - // such as local IP address, port number, and network protocol. - Endpoint local_endpoint = 6; - - // (Optional) Endpoint information of the remote server, such as IP address, - // port number, and network protocol. - Endpoint remote_endpoint = 7; - - // (Optional) If target name is provided, a secure naming check is performed - // to verify that the peer authenticated identity is indeed authorized to run - // the target name. - string target_name = 8; - - // (Optional) RPC protocol versions supported by the client. - RpcProtocolVersions rpc_versions = 9; - - // (Optional) Maximum frame size supported by the client. - uint32 max_frame_size = 10; -} - -message ServerHandshakeParameters { - // The record protocols supported by the server, e.g., - // "ALTSRP_GCM_AES128". - repeated string record_protocols = 1; - - // (Optional) A list of local identities supported by the server, if - // specified. Otherwise, the handshaker chooses a default local identity. - repeated Identity local_identities = 2; -} - -message StartServerHandshakeReq { - // The application protocols supported by the server, e.g., "h2" (for http2), - // "grpc". - repeated string application_protocols = 1; - - // Handshake parameters (record protocols and local identities supported by - // the server) mapped by the handshake protocol. Each handshake security - // protocol (e.g., TLS or ALTS) has its own set of record protocols and local - // identities. Since protobuf does not support enum as key to the map, the key - // to handshake_parameters is the integer value of HandshakeProtocol enum. - map handshake_parameters = 2; - - // Bytes in out_frames returned from the peer's HandshakerResp. It is possible - // that the peer's out_frames are split into multiple HandshakReq messages. - bytes in_bytes = 3; - - // (Optional) Local endpoint information of the connection to the client, - // such as local IP address, port number, and network protocol. - Endpoint local_endpoint = 4; - - // (Optional) Endpoint information of the remote client, such as IP address, - // port number, and network protocol. - Endpoint remote_endpoint = 5; - - // (Optional) RPC protocol versions supported by the server. - RpcProtocolVersions rpc_versions = 6; - - // (Optional) Maximum frame size supported by the server. - uint32 max_frame_size = 7; -} - -message NextHandshakeMessageReq { - // Bytes in out_frames returned from the peer's HandshakerResp. It is possible - // that the peer's out_frames are split into multiple NextHandshakerMessageReq - // messages. - bytes in_bytes = 1; -} - -message HandshakerReq { - oneof req_oneof { - // The start client handshake request message. - StartClientHandshakeReq client_start = 1; - - // The start server handshake request message. - StartServerHandshakeReq server_start = 2; - - // The next handshake request message. - NextHandshakeMessageReq next = 3; - } -} - -message HandshakerResult { - // The application protocol negotiated for this connection. - string application_protocol = 1; - - // The record protocol negotiated for this connection. - string record_protocol = 2; - - // Cryptographic key data. The key data may be more than the key length - // required for the record protocol, thus the client of the handshaker - // service needs to truncate the key data into the right key length. - bytes key_data = 3; - - // The authenticated identity of the peer. - Identity peer_identity = 4; - - // The local identity used in the handshake. - Identity local_identity = 5; - - // Indicate whether the handshaker service client should keep the channel - // between the handshaker service open, e.g., in order to handle - // post-handshake messages in the future. - bool keep_channel_open = 6; - - // The RPC protocol versions supported by the peer. - RpcProtocolVersions peer_rpc_versions = 7; - - // The maximum frame size of the peer. - uint32 max_frame_size = 8; -} - -message HandshakerStatus { - // The status code. This could be the gRPC status code. - uint32 code = 1; - - // The status details. - string details = 2; -} - -message HandshakerResp { - // Frames to be given to the peer for the NextHandshakeMessageReq. May be - // empty if no out_frames have to be sent to the peer or if in_bytes in the - // HandshakerReq are incomplete. All the non-empty out frames must be sent to - // the peer even if the handshaker status is not OK as these frames may - // contain the alert frames. - bytes out_frames = 1; - - // Number of bytes in the in_bytes consumed by the handshaker. It is possible - // that part of in_bytes in HandshakerReq was unrelated to the handshake - // process. - uint32 bytes_consumed = 2; - - // This is set iff the handshake was successful. out_frames may still be set - // to frames that needs to be forwarded to the peer. - HandshakerResult result = 3; - - // Status of the handshaker. - HandshakerStatus status = 4; -} - -service HandshakerService { - // Handshaker service accepts a stream of handshaker request, returning a - // stream of handshaker response. Client is expected to send exactly one - // message with either client_start or server_start followed by one or more - // messages with next. Each time client sends a request, the handshaker - // service expects to respond. Client does not have to wait for service's - // response before sending next request. - rpc DoHandshake(stream HandshakerReq) - returns (stream HandshakerResp) { - } -} diff --git a/proto/grpc/gcp/transport_security_common.proto b/proto/grpc/gcp/transport_security_common.proto deleted file mode 100644 index 8f01be7..0000000 --- a/proto/grpc/gcp/transport_security_common.proto +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2018 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/gcp/transport_security_common.proto - -syntax = "proto3"; - -package grpc.gcp; - -option go_package = "google.golang.org/grpc/credentials/alts/internal/proto/grpc_gcp"; -option java_multiple_files = true; -option java_outer_classname = "TransportSecurityCommonProto"; -option java_package = "io.grpc.alts.internal"; - -// The security level of the created channel. The list is sorted in increasing -// level of security. This order must always be maintained. -enum SecurityLevel { - SECURITY_NONE = 0; - INTEGRITY_ONLY = 1; - INTEGRITY_AND_PRIVACY = 2; -} - -// Max and min supported RPC protocol versions. -message RpcProtocolVersions { - // RPC version contains a major version and a minor version. - message Version { - uint32 major = 1; - uint32 minor = 2; - } - // Maximum supported RPC version. - Version max_rpc_version = 1; - // Minimum supported RPC version. - Version min_rpc_version = 2; -} diff --git a/proto/grpc/health/v1/health.proto b/proto/grpc/health/v1/health.proto deleted file mode 100644 index 38843ff..0000000 --- a/proto/grpc/health/v1/health.proto +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2015 The gRPC Authors -// -// 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. - -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto - -syntax = "proto3"; - -package grpc.health.v1; - -option csharp_namespace = "Grpc.Health.V1"; -option go_package = "google.golang.org/grpc/health/grpc_health_v1"; -option java_multiple_files = true; -option java_outer_classname = "HealthProto"; -option java_package = "io.grpc.health.v1"; - -message HealthCheckRequest { - string service = 1; -} - -message HealthCheckResponse { - enum ServingStatus { - UNKNOWN = 0; - SERVING = 1; - NOT_SERVING = 2; - SERVICE_UNKNOWN = 3; // Used only by the Watch method. - } - ServingStatus status = 1; -} - -service Health { - // If the requested service is unknown, the call will fail with status - // NOT_FOUND. - rpc Check(HealthCheckRequest) returns (HealthCheckResponse); - - // Performs a watch for the serving status of the requested service. - // The server will immediately send back a message indicating the current - // serving status. It will then subsequently send a new message whenever - // the service's serving status changes. - // - // If the requested service is unknown when the call is received, the - // server will send a message setting the serving status to - // SERVICE_UNKNOWN but will *not* terminate the call. If at some - // future point, the serving status of the service becomes known, the - // server will send a new message with the service's serving status. - // - // If the call terminates with status UNIMPLEMENTED, then clients - // should assume this method is not supported and should not retry the - // call. If the call terminates with any other status (including OK), - // clients should retry the call with appropriate exponential backoff. - rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse); -} diff --git a/proto/grpc/lb/v1/load_balancer.proto b/proto/grpc/lb/v1/load_balancer.proto deleted file mode 100644 index 00fc709..0000000 --- a/proto/grpc/lb/v1/load_balancer.proto +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2015 The gRPC Authors -// -// 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. - -// This file defines the GRPCLB LoadBalancing protocol. -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/lb/v1/load_balancer.proto -syntax = "proto3"; - -package grpc.lb.v1; - -import "google/protobuf/duration.proto"; -import "google/protobuf/timestamp.proto"; - -option go_package = "google.golang.org/grpc/balancer/grpclb/grpc_lb_v1"; -option java_multiple_files = true; -option java_outer_classname = "LoadBalancerProto"; -option java_package = "io.grpc.lb.v1"; - -service LoadBalancer { - // Bidirectional rpc to get a list of servers. - rpc BalanceLoad(stream LoadBalanceRequest) returns (stream LoadBalanceResponse); -} - -message LoadBalanceRequest { - oneof load_balance_request_type { - // This message should be sent on the first request to the load balancer. - InitialLoadBalanceRequest initial_request = 1; - - // The client stats should be periodically reported to the load balancer - // based on the duration defined in the InitialLoadBalanceResponse. - ClientStats client_stats = 2; - } -} - -message InitialLoadBalanceRequest { - // The name of the load balanced service (e.g., service.googleapis.com). Its - // length should be less than 256 bytes. - // The name might include a port number. How to handle the port number is up - // to the balancer. - string name = 1; -} - -// Contains the number of calls finished for a particular load balance token. -message ClientStatsPerToken { - // See Server.load_balance_token. - string load_balance_token = 1; - - // The total number of RPCs that finished associated with the token. - int64 num_calls = 2; -} - -// Contains client level statistics that are useful to load balancing. Each -// count except the timestamp should be reset to zero after reporting the stats. -message ClientStats { - // The timestamp of generating the report. - google.protobuf.Timestamp timestamp = 1; - - // The total number of RPCs that started. - int64 num_calls_started = 2; - - // The total number of RPCs that finished. - int64 num_calls_finished = 3; - - // The total number of RPCs that failed to reach a server except dropped RPCs. - int64 num_calls_finished_with_client_failed_to_send = 6; - - // The total number of RPCs that finished and are known to have been received - // by a server. - int64 num_calls_finished_known_received = 7; - - // The list of dropped calls. - repeated ClientStatsPerToken calls_finished_with_drop = 8; - - reserved 4, 5; -} - -message LoadBalanceResponse { - oneof load_balance_response_type { - // This message should be sent on the first response to the client. - InitialLoadBalanceResponse initial_response = 1; - - // Contains the list of servers selected by the load balancer. The client - // should send requests to these servers in the specified order. - ServerList server_list = 2; - - // If this field is set, then the client should eagerly enter fallback - // mode (even if there are existing, healthy connections to backends). - FallbackResponse fallback_response = 3; - } -} - -message FallbackResponse {} - -message InitialLoadBalanceResponse { - reserved 1; // never-used load_balancer_delegate - - // This interval defines how often the client should send the client stats - // to the load balancer. Stats should only be reported when the duration is - // positive. - google.protobuf.Duration client_stats_report_interval = 2; -} - -message ServerList { - // Contains a list of servers selected by the load balancer. The list will - // be updated when server resolutions change or as needed to balance load - // across more servers. The client should consume the server list in order - // unless instructed otherwise via the client_config. - repeated Server servers = 1; - - // Was google.protobuf.Duration expiration_interval. - reserved 3; -} - -// Contains server information. When the drop field is not true, use the other -// fields. -message Server { - // A resolved address for the server, serialized in network-byte-order. It may - // either be an IPv4 or IPv6 address. - bytes ip_address = 1; - - // A resolved port number for the server. - int32 port = 2; - - // An opaque but printable token for load reporting. The client must include - // the token of the picked server into the initial metadata when it starts a - // call to that server. The token is used by the server to verify the request - // and to allow the server to report load to the gRPC LB system. The token is - // also used in client stats for reporting dropped calls. - // - // Its length can be variable but must be less than 50 bytes. - string load_balance_token = 3; - - // Indicates whether this particular request should be dropped by the client. - // If the request is dropped, there will be a corresponding entry in - // ClientStats.calls_finished_with_drop. - bool drop = 4; - - reserved 5; -} diff --git a/proto/grpc/lb/v1/load_reporter.proto b/proto/grpc/lb/v1/load_reporter.proto deleted file mode 100644 index 6484e01..0000000 --- a/proto/grpc/lb/v1/load_reporter.proto +++ /dev/null @@ -1,185 +0,0 @@ -// Copyright 2018 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.lb.v1; - -import "google/protobuf/duration.proto"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/lb"; - -// The LoadReporter service. -service LoadReporter { - // Report load from server to lb. - rpc ReportLoad(stream LoadReportRequest) - returns (stream LoadReportResponse) { - }; -} - -message LoadReportRequest { - // This message should be sent on the first request to the gRPC server. - InitialLoadReportRequest initial_request = 1; -} - -message InitialLoadReportRequest { - // The hostname this load reporter client is requesting load for. - string load_balanced_hostname = 1; - - // Additional information to disambiguate orphaned load: load that should have - // gone to this load reporter client, but was not able to be sent since the - // load reporter client has disconnected. load_key is sent in orphaned load - // reports; see Load.load_key. - bytes load_key = 2; - - // This interval defines how often the server should send load reports to - // the load balancer. - google.protobuf.Duration load_report_interval = 3; -} - -message LoadReportResponse { - // This message should be sent on the first response to the load balancer. - InitialLoadReportResponse initial_response = 1; - - // Reports server-wide statistics for load balancing. - // This should be reported with every response. - LoadBalancingFeedback load_balancing_feedback = 2; - - // A load report for each tuple. This could be considered to be - // a multimap indexed by . It is not strictly necessary to - // aggregate all entries into one entry per tuple, although it - // is preferred to do so. - repeated Load load = 3; -} - -message InitialLoadReportResponse { - // Initial response returns the Load balancer ID. This must be plain text - // (printable ASCII). - string load_balancer_id = 1; - - enum ImplementationIdentifier { - IMPL_UNSPECIFIED = 0; - CPP = 1; // Standard Google C++ implementation. - JAVA = 2; // Standard Google Java implementation. - GO = 3; // Standard Google Go implementation. - } - // Optional identifier of this implementation of the load reporting server. - ImplementationIdentifier implementation_id = 2; - - // Optional server_version should be a value that is modified (and - // monotonically increased) when changes are made to the server - // implementation. - int64 server_version = 3; -} - -message LoadBalancingFeedback { - // Reports the current utilization of the server (typical range [0.0 - 1.0]). - float server_utilization = 1; - - // The total rate of calls handled by this server (including errors). - float calls_per_second = 2; - - // The total rate of error responses sent by this server. - float errors_per_second = 3; -} - -message Load { - // The (plain text) tag used by the calls covered by this load report. The - // tag is that part of the load balancer token after removing the load - // balancer id. Empty is equivalent to non-existent tag. - string load_balance_tag = 1; - - // The user identity authenticated by the calls covered by this load - // report. Empty is equivalent to no known user_id. - string user_id = 3; - - // IP address of the client that sent these requests, serialized in - // network-byte-order. It may either be an IPv4 or IPv6 address. - bytes client_ip_address = 15; - - // The number of calls started (since the last report) with the given tag and - // user_id. - int64 num_calls_started = 4; - - // Indicates whether this load report is an in-progress load report in which - // num_calls_in_progress is the only valid entry. If in_progress_report is not - // set, num_calls_in_progress will be ignored. If in_progress_report is set, - // fields other than num_calls_in_progress and orphaned_load will be ignored. - // TODO(juanlishen): A Load is either an in_progress_report or not. We should - // make this explicit in hierarchy. From the log, I see in_progress_report_ - // has a random num_calls_in_progress_ when not set, which might lead to bug - // when the balancer process the load report. - oneof in_progress_report { - // The number of calls in progress (instantaneously) per load balancer id. - int64 num_calls_in_progress = 5; - } - - // The following values are counts or totals of call statistics that finished - // with the given tag and user_id. - int64 num_calls_finished_without_error = 6; // Calls with status OK. - int64 num_calls_finished_with_error = 7; // Calls with status non-OK. - // Calls that finished with a status that maps to HTTP 5XX (see - // googleapis/google/rpc/code.proto). Note that this is a subset of - // num_calls_finished_with_error. - int64 num_calls_finished_with_server_error = 16; - - // Totals are from calls that with _and_ without error. - int64 total_bytes_sent = 8; - int64 total_bytes_received = 9; - google.protobuf.Duration total_latency = 10; - - // Optional metrics reported for the call(s). Requires that metric_name is - // unique. - repeated CallMetricData metric_data = 11; - - // The following two fields are used for reporting orphaned load: load that - // could not be reported to the originating balancer either since the balancer - // is no longer connected or because the frontend sent an invalid token. These - // fields must not be set with normal (unorphaned) load reports. - oneof orphaned_load { - // Load_key is the load_key from the initial_request from the originating - // balancer. - bytes load_key = 12 [deprecated=true]; - - // If true then this load report is for calls that had an invalid token; the - // user is probably abusing the gRPC protocol. - // TODO(yankaiz): Rename load_key_unknown. - bool load_key_unknown = 13; - - // load_key and balancer_id are included in order to identify orphaned load - // from different origins. - OrphanedLoadIdentifier orphaned_load_identifier = 14; - } - - reserved 2; -} - -message CallMetricData { - // Name of the metric; may be empty. - string metric_name = 1; - - // Number of calls that finished and included this metric. - int64 num_calls_finished_with_metric = 2; - - // Sum of metric values across all calls that finished with this metric. - double total_metric_value = 3; -} - -message OrphanedLoadIdentifier { - // The load_key from the initial_request from the originating balancer. - bytes load_key = 1; - - // The unique ID generated by LoadReporter to identify balancers. Here it - // distinguishes orphaned load with a same load_key. - string load_balancer_id = 2; -} diff --git a/proto/grpc/lookup/v1/rls.proto b/proto/grpc/lookup/v1/rls.proto deleted file mode 100644 index 7d17352..0000000 --- a/proto/grpc/lookup/v1/rls.proto +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2020 The gRPC Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.lookup.v1; - -option go_package = "google.golang.org/grpc/lookup/grpc_lookup_v1"; -option java_multiple_files = true; -option java_package = "io.grpc.lookup.v1"; -option java_outer_classname = "RlsProto"; - -message RouteLookupRequest { - // Target type allows the client to specify what kind of target format it - // would like from RLS to allow it to find the regional server, e.g. "grpc". - string target_type = 3; - // Possible reasons for making a request. - enum Reason { - REASON_UNKNOWN = 0; // Unused - REASON_MISS = 1; // No data available in local cache - REASON_STALE = 2; // Data in local cache is stale - } - // Reason for making this request. - Reason reason = 5; - // For REASON_STALE, the header_data from the stale response, if any. - string stale_header_data = 6; - // Map of key values extracted via key builders for the gRPC or HTTP request. - map key_map = 4; - - reserved 1, 2; - reserved "server", "path"; -} - -message RouteLookupResponse { - // Prioritized list (best one first) of addressable entities to use - // for routing, using syntax requested by the request target_type. - // The targets will be tried in order until a healthy one is found. - repeated string targets = 3; - // Optional header value to pass along to AFE in the X-Google-RLS-Data header. - // Cached with "target" and sent with all requests that match the request key. - // Allows the RLS to pass its work product to the eventual target. - string header_data = 2; - - reserved 1; - reserved "target"; -} - -service RouteLookupService { - // Lookup returns a target for a single key. - rpc RouteLookup(RouteLookupRequest) returns (RouteLookupResponse) {} -} diff --git a/proto/grpc/lookup/v1/rls_config.proto b/proto/grpc/lookup/v1/rls_config.proto deleted file mode 100644 index 9d2b6c5..0000000 --- a/proto/grpc/lookup/v1/rls_config.proto +++ /dev/null @@ -1,225 +0,0 @@ -// Copyright 2020 The gRPC Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.lookup.v1; - -import "google/protobuf/duration.proto"; - -option go_package = "google.golang.org/grpc/lookup/grpc_lookup_v1"; -option java_multiple_files = true; -option java_package = "io.grpc.lookup.v1"; -option java_outer_classname = "RlsConfigProto"; - -// Extract a key based on a given name (e.g. header name or query parameter -// name). The name must match one of the names listed in the "name" field. If -// the "required_match" field is true, one of the specified names must be -// present for the keybuilder to match. -message NameMatcher { - // The name that will be used in the RLS key_map to refer to this value. - // If required_match is true, you may omit this field or set it to an empty - // string, in which case the matcher will require a match, but won't update - // the key_map. - string key = 1; - - // Ordered list of names (headers or query parameter names) that can supply - // this value; the first one with a non-empty value is used. - repeated string names = 2; - - // If true, make this extraction required; the key builder will not match - // if no value is found. - bool required_match = 3; -} - -// A GrpcKeyBuilder applies to a given gRPC service, name, and headers. -message GrpcKeyBuilder { - // To match, one of the given Name fields must match; the service and method - // fields are specified as fixed strings. The service name is required and - // includes the proto package name. The method name may be omitted, in - // which case any method on the given service is matched. - message Name { - string service = 1; - string method = 2; - } - repeated Name names = 1; - - // If you wish to include the host, service, or method names as keys in the - // generated RouteLookupRequest, specify key names to use in the extra_keys - // submessage. If a key name is empty, no key will be set for that value. - // If this submessage is specified, the normal host/path fields will be left - // unset in the RouteLookupRequest. We are deprecating host/path in the - // RouteLookupRequest, so services should migrate to the ExtraKeys approach. - message ExtraKeys { - string host = 1; - string service = 2; - string method = 3; - } - ExtraKeys extra_keys = 3; - - // Extract keys from all listed headers. - // For gRPC, it is an error to specify "required_match" on the NameMatcher - // protos. - repeated NameMatcher headers = 2; - - // You can optionally set one or more specific key/value pairs to be added to - // the key_map. This can be useful to identify which builder built the key, - // for example if you are suppressing the actual method, but need to - // separately cache and request all the matched methods. - map constant_keys = 4; -} - -// An HttpKeyBuilder applies to a given HTTP URL and headers. -// -// Path and host patterns use the matching syntax from gRPC transcoding to -// extract named key/value pairs from the path and host components of the URL: -// https://github.com/googleapis/googleapis/blob/master/google/api/http.proto -// -// It is invalid to specify the same key name in multiple places in a pattern. -// -// For a service where the project id can be expressed either as a subdomain or -// in the path, separate HttpKeyBuilders must be used: -// host_pattern: 'example.com' path_pattern: '/{id}/{object}/**' -// host_pattern: '{id}.example.com' path_pattern: '/{object}/**' -// If the host is exactly 'example.com', the first path segment will be used as -// the id and the second segment as the object. If the host has a subdomain, the -// subdomain will be used as the id and the first segment as the object. If -// neither pattern matches, no keys will be extracted. -message HttpKeyBuilder { - // host_pattern is an ordered list of host template patterns for the desired - // value. If any host_pattern values are specified, then at least one must - // match, and the last one wins and sets any specified variables. A host - // consists of labels separated by dots. Each label is matched against the - // label in the pattern as follows: - // - "*": Matches any single label. - // - "**": Matches zero or more labels (first or last part of host only). - // - "{=...}": One or more label capture, where "..." can be any - // template that does not include a capture. - // - "{}": A single label capture. Identical to {=*}. - // - // Examples: - // - "example.com": Only applies to the exact host example.com. - // - "*.example.com": Matches subdomains of example.com. - // - "**.example.com": matches example.com, and all levels of subdomains. - // - "{project}.example.com": Extracts the third level subdomain. - // - "{project=**}.example.com": Extracts the third level+ subdomains. - // - "{project=**}": Extracts the entire host. - repeated string host_patterns = 1; - - // path_pattern is an ordered list of path template patterns for the desired - // value. If any path_pattern values are specified, then at least one must - // match, and the last one wins and sets any specified variables. A path - // consists of segments separated by slashes. Each segment is matched against - // the segment in the pattern as follows: - // - "*": Matches any single segment. - // - "**": Matches zero or more segments (first or last part of path only). - // - "{=...}": One or more segment capture, where "..." can be any - // template that does not include a capture. - // - "{}": A single segment capture. Identical to {=*}. - // A custom method may also be specified by appending ":" and the custom - // method name or "*" to indicate any custom method (including no custom - // method). For example, "/*/projects/{project_id}/**:*" extracts - // `{project_id}` for any version, resource and custom method that includes - // it. By default, any custom method will be matched. - // - // Examples: - // - "/v1/{name=messages/*}": extracts a name like "messages/12345". - // - "/v1/messages/{message_id}": extracts a message_id like "12345". - // - "/v1/users/{user_id}/messages/{message_id}": extracts two key values. - repeated string path_patterns = 2; - - // List of query parameter names to try to match. - // For example: ["parent", "name", "resource.name"] - // We extract all the specified query_parameters (case-sensitively). If any - // are marked as "required_match" and are not present, this keybuilder fails - // to match. If a given parameter appears multiple times (?foo=a&foo=b) we - // will report it as a comma-separated string (foo=a,b). - repeated NameMatcher query_parameters = 3; - - // List of headers to try to match. - // We extract all the specified header values (case-insensitively). If any - // are marked as "required_match" and are not present, this keybuilder fails - // to match. If a given header appears multiple times in the request we will - // report it as a comma-separated string, in standard HTTP fashion. - repeated NameMatcher headers = 4; - - // You can optionally set one or more specific key/value pairs to be added to - // the key_map. This can be useful to identify which builder built the key, - // for example if you are suppressing a lot of information from the URL, but - // need to separately cache and request URLs with that content. - map constant_keys = 5; -} - -message RouteLookupConfig { - // Ordered specifications for constructing keys for HTTP requests. Last - // match wins. If no HttpKeyBuilder matches, an empty key_map will be sent to - // the lookup service; it should likely reply with a global default route - // and raise an alert. - repeated HttpKeyBuilder http_keybuilders = 1; - - // Unordered specifications for constructing keys for gRPC requests. All - // GrpcKeyBuilders on this list must have unique "name" fields so that the - // client is free to prebuild a hash map keyed by name. If no GrpcKeyBuilder - // matches, an empty key_map will be sent to the lookup service; it should - // likely reply with a global default route and raise an alert. - repeated GrpcKeyBuilder grpc_keybuilders = 2; - - // The name of the lookup service as a gRPC URI. Typically, this will be - // a subdomain of the target, such as "lookup.datastore.googleapis.com". - string lookup_service = 3; - - // Configure a timeout value for lookup service requests. - // Defaults to 10 seconds if not specified. - google.protobuf.Duration lookup_service_timeout = 4; - - // How long are responses valid for (like HTTP Cache-Control). - // If omitted or zero, the longest valid cache time is used. - // This value is clamped to 5 minutes to avoid unflushable bad responses. - google.protobuf.Duration max_age = 5; - - // After a response has been in the client cache for this amount of time - // and is re-requested, start an asynchronous RPC to re-validate it. - // This value should be less than max_age by at least the length of a - // typical RTT to the Route Lookup Service to fully mask the RTT latency. - // If omitted, keys are only re-requested after they have expired. - google.protobuf.Duration stale_age = 6; - - // Rough indicator of amount of memory to use for the client cache. Some of - // the data structure overhead is not accounted for, so actual memory consumed - // will be somewhat greater than this value. If this field is omitted or set - // to zero, a client default will be used. The value may be capped to a lower - // amount based on client configuration. - int64 cache_size_bytes = 7; - - // This is a list of all the possible targets that can be returned by the - // lookup service. If a target not on this list is returned, it will be - // treated the same as an unhealthy target. - repeated string valid_targets = 8; - - // This value provides a default target to use if needed. If set, it will be - // used if RLS returns an error, times out, or returns an invalid response. - // Note that requests can be routed only to a subdomain of the original - // target, e.g. "us_east_1.cloudbigtable.googleapis.com". - string default_target = 9; - - reserved 10; - reserved "request_processing_strategy"; -} - -// RouteLookupClusterSpecifier is used in xDS to represent a cluster specifier -// plugin for RLS. -message RouteLookupClusterSpecifier { - // The RLS config for this cluster specifier plugin instance. - RouteLookupConfig route_lookup_config = 1; -} diff --git a/proto/grpc/reflection/v1/reflection.proto b/proto/grpc/reflection/v1/reflection.proto deleted file mode 100644 index 1a2ceed..0000000 --- a/proto/grpc/reflection/v1/reflection.proto +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2016 The gRPC Authors -// -// 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. - -// Service exported by server reflection. A more complete description of how -// server reflection works can be found at -// https://github.com/grpc/grpc/blob/master/doc/server-reflection.md -// -// The canonical version of this proto can be found at -// https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto - -syntax = "proto3"; - -package grpc.reflection.v1; - -option go_package = "google.golang.org/grpc/reflection/grpc_reflection_v1"; -option java_multiple_files = true; -option java_package = "io.grpc.reflection.v1"; -option java_outer_classname = "ServerReflectionProto"; - -service ServerReflection { - // The reflection service is structured as a bidirectional stream, ensuring - // all related requests go to a single server. - rpc ServerReflectionInfo(stream ServerReflectionRequest) - returns (stream ServerReflectionResponse); -} - -// The message sent by the client when calling ServerReflectionInfo method. -message ServerReflectionRequest { - string host = 1; - // To use reflection service, the client should set one of the following - // fields in message_request. The server distinguishes requests by their - // defined field and then handles them using corresponding methods. - oneof message_request { - // Find a proto file by the file name. - string file_by_filename = 3; - - // Find the proto file that declares the given fully-qualified symbol name. - // This field should be a fully-qualified symbol name - // (e.g. .[.] or .). - string file_containing_symbol = 4; - - // Find the proto file which defines an extension extending the given - // message type with the given field number. - ExtensionRequest file_containing_extension = 5; - - // Finds the tag numbers used by all known extensions of the given message - // type, and appends them to ExtensionNumberResponse in an undefined order. - // Its corresponding method is best-effort: it's not guaranteed that the - // reflection service will implement this method, and it's not guaranteed - // that this method will provide all extensions. Returns - // StatusCode::UNIMPLEMENTED if it's not implemented. - // This field should be a fully-qualified type name. The format is - // . - string all_extension_numbers_of_type = 6; - - // List the full names of registered services. The content will not be - // checked. - string list_services = 7; - } -} - -// The type name and extension number sent by the client when requesting -// file_containing_extension. -message ExtensionRequest { - // Fully-qualified type name. The format should be . - string containing_type = 1; - int32 extension_number = 2; -} - -// The message sent by the server to answer ServerReflectionInfo method. -message ServerReflectionResponse { - string valid_host = 1; - ServerReflectionRequest original_request = 2; - // The server sets one of the following fields according to the message_request - // in the request. - oneof message_response { - // This message is used to answer file_by_filename, file_containing_symbol, - // file_containing_extension requests with transitive dependencies. - // As the repeated label is not allowed in oneof fields, we use a - // FileDescriptorResponse message to encapsulate the repeated fields. - // The reflection service is allowed to avoid sending FileDescriptorProtos - // that were previously sent in response to earlier requests in the stream. - FileDescriptorResponse file_descriptor_response = 4; - - // This message is used to answer all_extension_numbers_of_type requests. - ExtensionNumberResponse all_extension_numbers_response = 5; - - // This message is used to answer list_services requests. - ListServiceResponse list_services_response = 6; - - // This message is used when an error occurs. - ErrorResponse error_response = 7; - } -} - -// Serialized FileDescriptorProto messages sent by the server answering -// a file_by_filename, file_containing_symbol, or file_containing_extension -// request. -message FileDescriptorResponse { - // Serialized FileDescriptorProto messages. We avoid taking a dependency on - // descriptor.proto, which uses proto2 only features, by making them opaque - // bytes instead. - repeated bytes file_descriptor_proto = 1; -} - -// A list of extension numbers sent by the server answering -// all_extension_numbers_of_type request. -message ExtensionNumberResponse { - // Full name of the base type, including the package name. The format - // is . - string base_type_name = 1; - repeated int32 extension_number = 2; -} - -// A list of ServiceResponse sent by the server answering list_services request. -message ListServiceResponse { - // The information of each service may be expanded in the future, so we use - // ServiceResponse message to encapsulate it. - repeated ServiceResponse service = 1; -} - -// The information of a single service used by ListServiceResponse to answer -// list_services request. -message ServiceResponse { - // Full name of a registered service, including its package name. The format - // is . - string name = 1; -} - -// The error code and error message sent by the server when an error occurs. -message ErrorResponse { - // This field uses the error codes defined in grpc::StatusCode. - int32 error_code = 1; - string error_message = 2; -} - diff --git a/proto/grpc/service_config/service_config.proto b/proto/grpc/service_config/service_config.proto deleted file mode 100644 index 5fdd78e..0000000 --- a/proto/grpc/service_config/service_config.proto +++ /dev/null @@ -1,692 +0,0 @@ -// Copyright 2016 The gRPC Authors -// -// 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. - -// A ServiceConfig is supplied when a service is deployed. It mostly contains -// parameters for how clients that connect to the service should behave (for -// example, the load balancing policy to use to pick between service replicas). -// -// The configuration options provided here act as overrides to automatically -// chosen option values. Service owners should be conservative in specifying -// options as the system is likely to choose better values for these options in -// the vast majority of cases. In other words, please specify a configuration -// option only if you really have to, and avoid copy-paste inclusion of configs. -// -// Note that gRPC uses the service config in JSON form, not in protobuf -// form. This proto definition is intended to help document the schema but -// will not actually be used directly by gRPC. - -syntax = "proto3"; - -package grpc.service_config; - -import "google/protobuf/duration.proto"; -import "google/protobuf/struct.proto"; -import "google/protobuf/wrappers.proto"; -import "google/rpc/code.proto"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -option java_package = "io.grpc.serviceconfig"; -option java_multiple_files = true; -option java_outer_classname = "ServiceConfigProto"; - -// Configuration for a method. -message MethodConfig { - // The names of the methods to which this configuration applies. - // - MethodConfig without names (empty list) will be skipped. - // - Each name entry must be unique across the entire ServiceConfig. - // - If the 'method' field is empty, this MethodConfig specifies the defaults - // for all methods for the specified service. - // - If the 'service' field is empty, the 'method' field must be empty, and - // this MethodConfig specifies the default for all methods (it's the default - // config). - // - // When determining which MethodConfig to use for a given RPC, the most - // specific match wins. For example, let's say that the service config - // contains the following MethodConfig entries: - // - // method_config { name { } ... } - // method_config { name { service: "MyService" } ... } - // method_config { name { service: "MyService" method: "Foo" } ... } - // - // MyService/Foo will use the third entry, because it exactly matches the - // service and method name. MyService/Bar will use the second entry, because - // it provides the default for all methods of MyService. AnotherService/Baz - // will use the first entry, because it doesn't match the other two. - // - // In JSON representation, value "", value `null`, and not present are the - // same. The following are the same Name: - // - { "service": "s" } - // - { "service": "s", "method": null } - // - { "service": "s", "method": "" } - message Name { - string service = 1; // Required. Includes proto package name. - string method = 2; - } - repeated Name name = 1; - - // Whether RPCs sent to this method should wait until the connection is - // ready by default. If false, the RPC will abort immediately if there is - // a transient failure connecting to the server. Otherwise, gRPC will - // attempt to connect until the deadline is exceeded. - // - // The value specified via the gRPC client API will override the value - // set here. However, note that setting the value in the client API will - // also affect transient errors encountered during name resolution, which - // cannot be caught by the value here, since the service config is - // obtained by the gRPC client via name resolution. - google.protobuf.BoolValue wait_for_ready = 2; - - // The default timeout in seconds for RPCs sent to this method. This can be - // overridden in code. If no reply is received in the specified amount of - // time, the request is aborted and a DEADLINE_EXCEEDED error status - // is returned to the caller. - // - // The actual deadline used will be the minimum of the value specified here - // and the value set by the application via the gRPC client API. If either - // one is not set, then the other will be used. If neither is set, then the - // request has no deadline. - google.protobuf.Duration timeout = 3; - - // The maximum allowed payload size for an individual request or object in a - // stream (client->server) in bytes. The size which is measured is the - // serialized payload after per-message compression (but before stream - // compression) in bytes. This applies both to streaming and non-streaming - // requests. - // - // The actual value used is the minimum of the value specified here and the - // value set by the application via the gRPC client API. If either one is - // not set, then the other will be used. If neither is set, then the - // built-in default is used. - // - // If a client attempts to send an object larger than this value, it will not - // be sent and the client will see a ClientError. - // Note that 0 is a valid value, meaning that the request message - // must be empty. - google.protobuf.UInt32Value max_request_message_bytes = 4; - - // The maximum allowed payload size for an individual response or object in a - // stream (server->client) in bytes. The size which is measured is the - // serialized payload after per-message compression (but before stream - // compression) in bytes. This applies both to streaming and non-streaming - // requests. - // - // The actual value used is the minimum of the value specified here and the - // value set by the application via the gRPC client API. If either one is - // not set, then the other will be used. If neither is set, then the - // built-in default is used. - // - // If a server attempts to send an object larger than this value, it will not - // be sent, and a ServerError will be sent to the client instead. - // Note that 0 is a valid value, meaning that the response message - // must be empty. - google.protobuf.UInt32Value max_response_message_bytes = 5; - - // The retry policy for outgoing RPCs. - message RetryPolicy { - // The maximum number of RPC attempts, including the original attempt. - // - // This field is required and must be greater than 1. - // Any value greater than 5 will be treated as if it were 5. - uint32 max_attempts = 1; - - // Exponential backoff parameters. The initial retry attempt will occur at - // random(0, initial_backoff). In general, the nth attempt will occur at - // random(0, - // min(initial_backoff*backoff_multiplier**(n-1), max_backoff)). - // Required. Must be greater than zero. - google.protobuf.Duration initial_backoff = 2; - // Required. Must be greater than zero. - google.protobuf.Duration max_backoff = 3; - float backoff_multiplier = 4; // Required. Must be greater than zero. - - // The set of status codes which may be retried. - // - // This field is required and must be non-empty. - repeated google.rpc.Code retryable_status_codes = 5; - } - - // The hedging policy for outgoing RPCs. Hedged RPCs may execute more than - // once on the server, so only idempotent methods should specify a hedging - // policy. - message HedgingPolicy { - // The hedging policy will send up to max_requests RPCs. - // This number represents the total number of all attempts, including - // the original attempt. - // - // This field is required and must be greater than 1. - // Any value greater than 5 will be treated as if it were 5. - uint32 max_attempts = 1; - - // The first RPC will be sent immediately, but the max_requests-1 subsequent - // hedged RPCs will be sent at intervals of every hedging_delay. Set this - // to 0 to immediately send all max_requests RPCs. - google.protobuf.Duration hedging_delay = 2; - - // The set of status codes which indicate other hedged RPCs may still - // succeed. If a non-fatal status code is returned by the server, hedged - // RPCs will continue. Otherwise, outstanding requests will be canceled and - // the error returned to the client application layer. - // - // This field is optional. - repeated google.rpc.Code non_fatal_status_codes = 3; - } - - // Only one of retry_policy or hedging_policy may be set. If neither is set, - // RPCs will not be retried or hedged. - oneof retry_or_hedging_policy { - RetryPolicy retry_policy = 6; - HedgingPolicy hedging_policy = 7; - } -} - -// Configuration for pick_first LB policy. -message PickFirstConfig {} - -// Configuration for round_robin LB policy. -message RoundRobinConfig {} - -// Configuration for outlier_detection LB policy -message OutlierDetectionLoadBalancingConfig { - // The time interval between ejection analysis sweeps. This can result in - // both new ejections as well as addresses being returned to service. Defaults - // to 10000ms or 10s. - google.protobuf.Duration interval = 1; - - // The base time that as address is ejected for. The real time is equal to the - // base time multiplied by the number of times the address has been ejected. - // Defaults to 30000ms or 30s. - google.protobuf.Duration base_ejection_time = 2; - - // The maximum time that an address is ejected for. If not specified, the default value (300000ms or 300s) or - // the base_ejection_time value is applied, whatever is larger. - google.protobuf.Duration max_ejection_time = 3; - - // The maximum % of an address list that can be ejected due to outlier - // detection. Defaults to 10% but will eject at least one address regardless of the value. - google.protobuf.UInt32Value max_ejection_percent = 4; - - // Parameters for the success rate ejection algorithm. - // This algorithm monitors the request success rate for all endpoints and - // ejects individual endpoints whose success rates are statistical outliers. - message SuccessRateEjection { - // 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. - google.protobuf.UInt32Value stdev_factor = 1; - - // The % chance that an address 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. - google.protobuf.UInt32Value enforcement_percentage = 2; - - // The number of addresses that must have enough request volume to - // detect success rate outliers. If the number of addresses is less than this - // setting, outlier detection via success rate statistics is not performed - // for any addresses. Defaults to 5. - google.protobuf.UInt32Value minimum_hosts = 3; - - // The minimum number of total requests that must be collected in one - // interval (as defined by the interval duration above) to include this address - // 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 address. Defaults to 100. - google.protobuf.UInt32Value request_volume = 4; - } - - // Parameters for the failure percentage algorithm. - // This algorithm ejects individual endpoints whose failure rate is greater than - // some threshold, independently of any other endpoint. - message FailurePercentageEjection { - // The failure percentage to use when determining failure percentage-based outlier detection. If - // the failure percentage of a given address is greater than or equal to this value, it will be - // ejected. Defaults to 85. - google.protobuf.UInt32Value threshold = 1; - - // The % chance that an address 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 100. - google.protobuf.UInt32Value enforcement_percentage = 2; - - // The minimum number of addresses in order to perform failure percentage-based ejection. - // If the total number of addresses is less than this value, failure percentage-based - // ejection will not be performed. Defaults to 5. - google.protobuf.UInt32Value minimum_hosts = 3; - - // 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 address. If the - // volume is lower than this setting, failure percentage-based ejection will not be performed for - // this host. Defaults to 50. - google.protobuf.UInt32Value request_volume = 4; - } - - // If set, success rate ejections will be performed - SuccessRateEjection success_rate_ejection = 5; - - // If set, failure rate ejections will be performed - FailurePercentageEjection failure_percentage_ejection = 6; - - // The config for the child policy - repeated LoadBalancingConfig child_policy = 13; -} - -// Configuration for grpclb LB policy. -message GrpcLbConfig { - // Optional. What LB policy to use for routing between the backend - // addresses. If unset, defaults to round_robin. - // Currently, the only supported values are round_robin and pick_first. - // Note that this will be used both in balancer mode and in fallback mode. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - repeated LoadBalancingConfig child_policy = 1; - // Optional. If specified, overrides the name of the service to be sent to - // the balancer. - string service_name = 2; - // Optional. The timeout in seconds for receiving the server list from the LB - // server. Defaults to 10s. - google.protobuf.Duration initial_fallback_timeout = 3; -} - -// Configuration for priority LB policy. -message PriorityLoadBalancingPolicyConfig { - // A map of name to child policy configuration. - // The names are used to allow the priority policy to update - // existing child policies instead of creating new ones every - // time it receives a config update. - message Child { - repeated LoadBalancingConfig config = 1; - - // If true, will ignore reresolution requests from this child. - bool ignore_reresolution_requests = 2; - } - map children = 1; - - // A list of child names in decreasing priority order - // (i.e., first element is the highest priority). - repeated string priorities = 2; -} - -// Configuration for weighted_target LB policy. -message WeightedTargetLoadBalancingPolicyConfig { - message Target { - uint32 weight = 1; - repeated LoadBalancingConfig child_policy = 2; - } - map targets = 1; -} - -// Configuration for xds_cluster_manager_experimental LB policy. -message XdsClusterManagerLoadBalancingPolicyConfig { - message Child { - repeated LoadBalancingConfig child_policy = 1; - } - map children = 1; -} - -// Configuration for the cds LB policy. -message CdsConfig { - string cluster = 1; // Required. -} - -// Represents an xDS server. -message XdsServer { - string server_uri = 1 [json_name = "server_uri"]; // Required. - - message ChannelCredentials { - string type = 1; // Required. - google.protobuf.Struct config = 2; // Optional JSON config. - } - // A list of channel creds to use. The first supported type will be used. - repeated ChannelCredentials channel_creds = 2 [json_name = "channel_creds"]; - - // A repeated list of server features. - repeated google.protobuf.Value server_features = 3 - [json_name = "server_features"]; -} - -// Configuration for xds_cluster_resolver LB policy. -message XdsClusterResolverLoadBalancingPolicyConfig { - // Describes a discovery mechanism instance. - // For EDS or LOGICAL_DNS clusters, there will be exactly one - // DiscoveryMechanism, which will describe the cluster of the parent - // CDS policy. - // For aggregate clusters, there will be one DiscoveryMechanism for each - // underlying cluster. - message DiscoveryMechanism { - // Cluster name. - string cluster = 1; - - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // If set to the empty string, load reporting will be sent to the same - // server that we obtained CDS data from. - // DEPRECATED: Use new lrs_load_reporting_server field instead. - google.protobuf.StringValue lrs_load_reporting_server_name = 2 - [deprecated=true]; - - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // Supercedes lrs_load_reporting_server_name field. - XdsServer lrs_load_reporting_server = 7; - - // Maximum number of outstanding requests can be made to the upstream - // cluster. Default is 1024. - google.protobuf.UInt32Value max_concurrent_requests = 3; - - enum Type { - UNKNOWN = 0; - EDS = 1; - LOGICAL_DNS = 2; - }; - Type type = 4; - - // For type EDS only. - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - string eds_service_name = 5; - - // For type LOGICAL_DNS only. - // DNS name to resolve in "host:port" form. - string dns_hostname = 6; - - // The configuration for outlier_detection child policies - // Within this message, the child_policy field will be ignored - OutlierDetectionLoadBalancingConfig outlier_detection = 8; - } - - // Ordered list of discovery mechanisms. - // Must have at least one element. - // Results from each discovery mechanism are concatenated together in - // successive priorities. - repeated DiscoveryMechanism discovery_mechanisms = 1; - - // xDS LB policy. - // This represents the xDS LB policy, which does not necessarily map - // one-to-one to a gRPC LB policy. Currently, the following policies - // are supported: - // - "ROUND_ROBIN" (config is empty) - // - "RING_HASH" (config is a RingHashLoadBalancingConfig) - repeated LoadBalancingConfig xds_lb_policy = 2; -} - -// Configuration for xds_cluster_impl LB policy. -message XdsClusterImplLoadBalancingPolicyConfig { - // Cluster name. Required. - string cluster = 1; - - // EDS service name. - // Not set if cluster is not an EDS cluster or if it does not - // specify an EDS service name. - string eds_service_name = 2; - - // Server to send load reports to. - // If unset, no load reporting is done. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - // DEPRECATED: Use new lrs_load_reporting_server field instead. - google.protobuf.StringValue lrs_load_reporting_server_name = 3 - [deprecated=true]; - - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // Supercedes lrs_load_reporting_server_name field. - XdsServer lrs_load_reporting_server = 7; - - // Maximum number of outstanding requests can be made to the upstream cluster. - // Default is 1024. - google.protobuf.UInt32Value max_concurrent_requests = 4; - - // Drop configuration. - message DropCategory { - string category = 1; - uint32 requests_per_million = 2; - } - repeated DropCategory drop_categories = 5; - - // Child policy. - repeated LoadBalancingConfig child_policy = 6; -} - -// Configuration for eds LB policy. -message EdsLoadBalancingPolicyConfig { - // Cluster name. Required. - string cluster = 1; - - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - string eds_service_name = 2; - - // Server to send load reports to. - // If unset, no load reporting is done. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - google.protobuf.StringValue lrs_load_reporting_server_name = 3; - - // Locality-picking policy. - // This policy's config is expected to be in the format used - // by the weighted_target policy. Note that the config should include - // an empty value for the "targets" field; that empty value will be - // replaced by one that is dynamically generated based on the EDS data. - // Optional; defaults to "weighted_target". - repeated LoadBalancingConfig locality_picking_policy = 4; - - // Endpoint-picking policy. - // This will be configured as the policy for each child in the - // locality-policy's config. - // Optional; defaults to "round_robin". - repeated LoadBalancingConfig endpoint_picking_policy = 5; -} - -// Configuration for ring_hash LB policy. -message RingHashLoadBalancingConfig { - uint64 min_ring_size = 1; - uint64 max_ring_size = 2; -} - -// Configuration for lrs LB policy. -message LrsLoadBalancingPolicyConfig { - // Cluster name. Required. - string cluster_name = 1; - - // EDS service name, as returned in CDS. - // May be unset if not specified in CDS. - string eds_service_name = 2; - - // Server to send load reports to. Required. - // If set to empty string, load reporting will be sent to the same - // server as we are getting xds data from. - string lrs_load_reporting_server_name = 3; - - // The locality for which this policy will report load. Required. - message Locality { - string region = 1; - string zone = 2; - string subzone = 3; - } - Locality locality = 4; - - // Endpoint-picking policy. - repeated LoadBalancingConfig child_policy = 5; -} - -// Configuration for xds LB policy. -message XdsConfig { - // Name of balancer to connect to. - string balancer_name = 1 [deprecated = true]; - // Optional. What LB policy to use for intra-locality routing. - // If unset, will use whatever algorithm is specified by the balancer. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - repeated LoadBalancingConfig child_policy = 2; - // Optional. What LB policy to use in fallback mode. If not - // specified, defaults to round_robin. - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. - repeated LoadBalancingConfig fallback_policy = 3; - // Optional. Name to use in EDS query. If not present, defaults to - // the server name from the target URI. - string eds_service_name = 4; - // LRS server to send load reports to. - // If not present, load reporting will be disabled. - // If set to the empty string, load reporting will be sent to the same - // server that we obtained CDS data from. - google.protobuf.StringValue lrs_load_reporting_server_name = 5; -} - -// Selects LB policy and provides corresponding configuration. -// -// In general, all instances of this field should be repeated. Clients will -// iterate through the list in order and stop at the first policy that they -// support. This allows the service config to specify custom policies that may -// not be known to all clients. -// -// - If the config for the first supported policy is invalid, the whole service -// config is invalid. -// - If the list doesn't contain any supported policy, the whole service config -// is invalid. -message LoadBalancingConfig { - // Exactly one LB policy may be configured. - oneof policy { - // For each new LB policy supported by gRPC, a new field must be added - // here. The field's name must be the LB policy name and its type is a - // message that provides whatever configuration parameters are needed - // by the LB policy. The configuration message will be passed to the - // LB policy when it is instantiated on the client. - // - // If the LB policy does not require any configuration parameters, the - // message for that LB policy may be empty. - // - // Note that if an LB policy contains another nested LB policy - // (e.g., a gslb policy picks the cluster and then delegates to - // a round_robin policy to pick the backend within that cluster), its - // configuration message may include a nested instance of the - // LoadBalancingConfig message to configure the nested LB policy. - - PickFirstConfig pick_first = 4 [json_name = "pick_first"]; - - RoundRobinConfig round_robin = 1 [json_name = "round_robin"]; - - OutlierDetectionLoadBalancingConfig outlier_detection = 15 [json_name = "outlier_detection"]; - - // gRPC lookaside load balancing. - // This will eventually be deprecated by the new xDS-based local - // balancing policy. - GrpcLbConfig grpclb = 3; - - // REMAINING POLICIES ARE EXPERIMENTAL -- DO NOT USE - - PriorityLoadBalancingPolicyConfig priority_experimental = 9 - [json_name = "priority_experimental"]; - WeightedTargetLoadBalancingPolicyConfig weighted_target_experimental = 10 - [json_name = "weighted_target_experimental"]; - - // xDS-based load balancing. - XdsClusterManagerLoadBalancingPolicyConfig xds_cluster_manager_experimental - = 14 [json_name = "xds_cluster_manager_experimental"]; - CdsConfig cds_experimental = 6 [json_name = "cds_experimental"]; - XdsClusterResolverLoadBalancingPolicyConfig - xds_cluster_resolver_experimental = 11 - [json_name = "xds_cluster_resolver_experimental"]; - XdsClusterImplLoadBalancingPolicyConfig xds_cluster_impl_experimental = 12 - [json_name = "xds_cluster_impl_experimental"]; - RingHashLoadBalancingConfig ring_hash_experimental = 13 - [json_name = "ring_hash_experimental"]; - - // Deprecated xDS-related policies. - LrsLoadBalancingPolicyConfig lrs_experimental = 8 - [json_name = "lrs_experimental", deprecated = true]; - EdsLoadBalancingPolicyConfig eds_experimental = 7 - [json_name = "eds_experimental", deprecated = true]; - XdsConfig xds = 2 [deprecated = true]; - XdsConfig xds_experimental = 5 [json_name = "xds_experimental", - deprecated = true]; - - // Next available ID: 16 - } -} - -// A ServiceConfig represents information about a service but is not specific to -// any name resolver. -message ServiceConfig { - // Load balancing policy. - // - // Note that load_balancing_policy is deprecated in favor of - // load_balancing_config; the former will be used only if the latter - // is unset. - // - // If no LB policy is configured here, then the default is pick_first. - // If the policy name is set via the client API, that value overrides - // the value specified here. - // - // If the deprecated load_balancing_policy field is used, note that if the - // resolver returns at least one balancer address (as opposed to backend - // addresses), gRPC will use grpclb (see - // https://github.com/grpc/grpc/blob/master/doc/load-balancing.md), - // regardless of what policy is configured here. However, if the resolver - // returns at least one backend address in addition to the balancer - // address(es), the client may fall back to the requested policy if it - // is unable to reach any of the grpclb load balancers. - enum LoadBalancingPolicy { - UNSPECIFIED = 0; - ROUND_ROBIN = 1; - } - LoadBalancingPolicy load_balancing_policy = 1 [deprecated = true]; - // Multiple LB policies can be specified; clients will iterate through - // the list in order and stop at the first policy that they support. If none - // are supported, the service config is considered invalid. - repeated LoadBalancingConfig load_balancing_config = 4; - - // Per-method configuration. - repeated MethodConfig method_config = 2; - - // If a RetryThrottlingPolicy is provided, gRPC will automatically throttle - // retry attempts and hedged RPCs when the client's ratio of failures to - // successes exceeds a threshold. - // - // For each server name, the gRPC client will maintain a token_count which is - // initially set to max_tokens. Every outgoing RPC (regardless of service or - // method invoked) will change token_count as follows: - // - // - Every failed RPC will decrement the token_count by 1. - // - Every successful RPC will increment the token_count by token_ratio. - // - // If token_count is less than or equal to max_tokens / 2, then RPCs will not - // be retried and hedged RPCs will not be sent. - message RetryThrottlingPolicy { - // The number of tokens starts at max_tokens. The token_count will always be - // between 0 and max_tokens. - // - // This field is required and must be greater than zero. - uint32 max_tokens = 1; - - // The amount of tokens to add on each successful RPC. Typically this will - // be some number between 0 and 1, e.g., 0.1. - // - // This field is required and must be greater than zero. Up to 3 decimal - // places are supported. - float token_ratio = 2; - } - RetryThrottlingPolicy retry_throttling = 3; - - message HealthCheckConfig { - // Service name to use in the health-checking request. - google.protobuf.StringValue service_name = 1; - } - HealthCheckConfig health_check_config = 5; - - // next available tag: 6 -} diff --git a/proto/grpc/testing/benchmark_service.proto b/proto/grpc/testing/benchmark_service.proto deleted file mode 100644 index cf9601e..0000000 --- a/proto/grpc/testing/benchmark_service.proto +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. -syntax = "proto3"; - -import "grpc/testing/messages.proto"; - -package grpc.testing; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "BenchmarkServiceProto"; - -service BenchmarkService { - // One request followed by one response. - // The server returns the client payload as-is. - rpc UnaryCall(SimpleRequest) returns (SimpleResponse); - - // Repeated sequence of one request followed by one response. - // Should be called streaming ping-pong - // The server returns the client payload as-is on each response - rpc StreamingCall(stream SimpleRequest) returns (stream SimpleResponse); - - // Single-sided unbounded streaming from client to server - // The server returns the client payload as-is once the client does WritesDone - rpc StreamingFromClient(stream SimpleRequest) returns (SimpleResponse); - - // Single-sided unbounded streaming from server to client - // The server repeatedly returns the client payload as-is - rpc StreamingFromServer(SimpleRequest) returns (stream SimpleResponse); - - // Two-sided unbounded streaming between server to client - // Both sides send the content of their own choice to the other - rpc StreamingBothWays(stream SimpleRequest) returns (stream SimpleResponse); -} diff --git a/proto/grpc/testing/control.proto b/proto/grpc/testing/control.proto deleted file mode 100644 index 2373839..0000000 --- a/proto/grpc/testing/control.proto +++ /dev/null @@ -1,294 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "grpc/testing/payloads.proto"; -import "grpc/testing/stats.proto"; - -package grpc.testing; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "ControlProto"; - -enum ClientType { - // Many languages support a basic distinction between using - // sync or async client, and this allows the specification - SYNC_CLIENT = 0; - ASYNC_CLIENT = 1; - OTHER_CLIENT = 2; // used for some language-specific variants - CALLBACK_CLIENT = 3; -} - -enum ServerType { - SYNC_SERVER = 0; - ASYNC_SERVER = 1; - ASYNC_GENERIC_SERVER = 2; - OTHER_SERVER = 3; // used for some language-specific variants - CALLBACK_SERVER = 4; -} - -enum RpcType { - UNARY = 0; - STREAMING = 1; - STREAMING_FROM_CLIENT = 2; - STREAMING_FROM_SERVER = 3; - STREAMING_BOTH_WAYS = 4; -} - -// Parameters of poisson process distribution, which is a good representation -// of activity coming in from independent identical stationary sources. -message PoissonParams { - // The rate of arrivals (a.k.a. lambda parameter of the exp distribution). - double offered_load = 1; -} - -// Once an RPC finishes, immediately start a new one. -// No configuration parameters needed. -message ClosedLoopParams {} - -message LoadParams { - oneof load { - ClosedLoopParams closed_loop = 1; - PoissonParams poisson = 2; - }; -} - -// presence of SecurityParams implies use of TLS -message SecurityParams { - bool use_test_ca = 1; - string server_host_override = 2; - string cred_type = 3; -} - -message ChannelArg { - string name = 1; - oneof value { - string str_value = 2; - int32 int_value = 3; - } -} - -message ClientConfig { - // List of targets to connect to. At least one target needs to be specified. - repeated string server_targets = 1; - ClientType client_type = 2; - SecurityParams security_params = 3; - // How many concurrent RPCs to start for each channel. - // For synchronous client, use a separate thread for each outstanding RPC. - int32 outstanding_rpcs_per_channel = 4; - // Number of independent client channels to create. - // i-th channel will connect to server_target[i % server_targets.size()] - int32 client_channels = 5; - // Only for async client. Number of threads to use to start/manage RPCs. - int32 async_client_threads = 7; - RpcType rpc_type = 8; - // The requested load for the entire client (aggregated over all the threads). - LoadParams load_params = 10; - PayloadConfig payload_config = 11; - HistogramParams histogram_params = 12; - - // Specify the cores we should run the client on, if desired - repeated int32 core_list = 13; - int32 core_limit = 14; - - // If we use an OTHER_CLIENT client_type, this string gives more detail - string other_client_api = 15; - - repeated ChannelArg channel_args = 16; - - // Number of threads that share each completion queue - int32 threads_per_cq = 17; - - // Number of messages on a stream before it gets finished/restarted - int32 messages_per_stream = 18; - - // Use coalescing API when possible. - bool use_coalesce_api = 19; - - // If 0, disabled. Else, specifies the period between gathering latency - // medians in milliseconds. - int32 median_latency_collection_interval_millis = 20; - - // Number of client processes. 0 indicates no restriction. - int32 client_processes = 21; -} - -message ClientStatus { ClientStats stats = 1; } - -// Request current stats -message Mark { - // if true, the stats will be reset after taking their snapshot. - bool reset = 1; -} - -message ClientArgs { - oneof argtype { - ClientConfig setup = 1; - Mark mark = 2; - } -} - -message ServerConfig { - ServerType server_type = 1; - SecurityParams security_params = 2; - // Port on which to listen. Zero means pick unused port. - int32 port = 4; - // Only for async server. Number of threads used to serve the requests. - int32 async_server_threads = 7; - // Specify the number of cores to limit server to, if desired - int32 core_limit = 8; - // payload config, used in generic server. - // Note this must NOT be used in proto (non-generic) servers. For proto servers, - // 'response sizes' must be configured from the 'response_size' field of the - // 'SimpleRequest' objects in RPC requests. - PayloadConfig payload_config = 9; - - // Specify the cores we should run the server on, if desired - repeated int32 core_list = 10; - - // If we use an OTHER_SERVER client_type, this string gives more detail - string other_server_api = 11; - - // Number of threads that share each completion queue - int32 threads_per_cq = 12; - - // c++-only options (for now) -------------------------------- - - // Buffer pool size (no buffer pool specified if unset) - int32 resource_quota_size = 1001; - repeated ChannelArg channel_args = 1002; - - // Number of server processes. 0 indicates no restriction. - int32 server_processes = 21; -} - -message ServerArgs { - oneof argtype { - ServerConfig setup = 1; - Mark mark = 2; - } -} - -message ServerStatus { - ServerStats stats = 1; - // the port bound by the server - int32 port = 2; - // Number of cores available to the server - int32 cores = 3; -} - -message CoreRequest { -} - -message CoreResponse { - // Number of cores available on the server - int32 cores = 1; -} - -message Void { -} - -// A single performance scenario: input to qps_json_driver -message Scenario { - // Human readable name for this scenario - string name = 1; - // Client configuration - ClientConfig client_config = 2; - // Number of clients to start for the test - int32 num_clients = 3; - // Server configuration - ServerConfig server_config = 4; - // Number of servers to start for the test - int32 num_servers = 5; - // Warmup period, in seconds - int32 warmup_seconds = 6; - // Benchmark time, in seconds - int32 benchmark_seconds = 7; - // Number of workers to spawn locally (usually zero) - int32 spawn_local_worker_count = 8; -} - -// A set of scenarios to be run with qps_json_driver -message Scenarios { - repeated Scenario scenarios = 1; -} - -// Basic summary that can be computed from ClientStats and ServerStats -// once the scenario has finished. -message ScenarioResultSummary -{ - // Total number of operations per second over all clients. What is counted as 1 'operation' depends on the benchmark scenarios: - // For unary benchmarks, an operation is processing of a single unary RPC. - // For streaming benchmarks, an operation is processing of a single ping pong of request and response. - double qps = 1; - // QPS per server core. - double qps_per_server_core = 2; - // The total server cpu load based on system time across all server processes, expressed as percentage of a single cpu core. - // For example, 85 implies 85% of a cpu core, 125 implies 125% of a cpu core. Since we are accumulating the cpu load across all the server - // processes, the value could > 100 when there are multiple servers or a single server using multiple threads and cores. - // Same explanation for the total client cpu load below. - double server_system_time = 3; - // The total server cpu load based on user time across all server processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - double server_user_time = 4; - // The total client cpu load based on system time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - double client_system_time = 5; - // The total client cpu load based on user time across all client processes, expressed as percentage of a single cpu core. (85 => 85%, 125 => 125%) - double client_user_time = 6; - - // X% latency percentiles (in nanoseconds) - double latency_50 = 7; - double latency_90 = 8; - double latency_95 = 9; - double latency_99 = 10; - double latency_999 = 11; - - // server cpu usage percentage - double server_cpu_usage = 12; - - // Number of requests that succeeded/failed - double successful_requests_per_second = 13; - double failed_requests_per_second = 14; - - // Number of polls called inside completion queue per request - double client_polls_per_request = 15; - double server_polls_per_request = 16; - - // Queries per CPU-sec over all servers or clients - double server_queries_per_cpu_sec = 17; - double client_queries_per_cpu_sec = 18; -} - -// Results of a single benchmark scenario. -message ScenarioResult { - // Inputs used to run the scenario. - Scenario scenario = 1; - // Histograms from all clients merged into one histogram. - HistogramData latencies = 2; - // Client stats for each client - repeated ClientStats client_stats = 3; - // Server stats for each server - repeated ServerStats server_stats = 4; - // Number of cores available to each server - repeated int32 server_cores = 5; - // An after-the-fact computed summary - ScenarioResultSummary summary = 6; - // Information on success or failure of each worker - repeated bool client_success = 7; - repeated bool server_success = 8; - // Number of failed requests (one row per status code seen) - repeated RequestResultCount request_results = 9; -} diff --git a/proto/grpc/testing/empty.proto b/proto/grpc/testing/empty.proto deleted file mode 100644 index 4feecd5..0000000 --- a/proto/grpc/testing/empty.proto +++ /dev/null @@ -1,32 +0,0 @@ - -// Copyright 2015 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.testing; - -option java_package = "io.grpc.testing.integration"; -option java_outer_classname = "EmptyProtos"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -// An empty message that you can re-use to avoid defining duplicated empty -// messages in your project. A typical example is to use it as argument or the -// return value of a service API. For instance: -// -// service Foo { -// rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { }; -// }; -// -message Empty {} diff --git a/proto/grpc/testing/messages.proto b/proto/grpc/testing/messages.proto deleted file mode 100644 index 0590b0a..0000000 --- a/proto/grpc/testing/messages.proto +++ /dev/null @@ -1,273 +0,0 @@ - -// Copyright 2015-2016 gRPC authors. -// -// 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. - -// Message definitions to be used by integration test service definitions. - -syntax = "proto3"; - -package grpc.testing; - -option java_package = "io.grpc.testing.integration"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -// TODO(dgq): Go back to using well-known types once -// https://github.com/grpc/grpc/issues/6980 has been fixed. -// import "google/protobuf/wrappers.proto"; -message BoolValue { - // The bool value. - bool value = 1; -} - -// The type of payload that should be returned. -enum PayloadType { - // Compressable text format. - COMPRESSABLE = 0; -} - -// A block of data, to simply increase gRPC message size. -message Payload { - // The type of data in body. - PayloadType type = 1; - // Primary contents of payload. - bytes body = 2; -} - -// A protobuf representation for grpc status. This is used by test -// clients to specify a status that the server should attempt to return. -message EchoStatus { - int32 code = 1; - string message = 2; -} - -// The type of route that a client took to reach a server w.r.t. gRPCLB. -// The server must fill in "fallback" if it detects that the RPC reached -// the server via the "gRPCLB fallback" path, and "backend" if it detects -// that the RPC reached the server via "gRPCLB backend" path (i.e. if it got -// the address of this server from the gRPCLB server BalanceLoad RPC). Exactly -// how this detection is done is context and server dependent. -enum GrpclbRouteType { - // Server didn't detect the route that a client took to reach it. - GRPCLB_ROUTE_TYPE_UNKNOWN = 0; - // Indicates that a client reached a server via gRPCLB fallback. - GRPCLB_ROUTE_TYPE_FALLBACK = 1; - // Indicates that a client reached a server as a gRPCLB-given backend. - GRPCLB_ROUTE_TYPE_BACKEND = 2; -} - -// Unary request. -message SimpleRequest { - // Desired payload type in the response from the server. - // If response_type is RANDOM, server randomly chooses one from other formats. - PayloadType response_type = 1; - - // Desired payload size in the response from the server. - int32 response_size = 2; - - // Optional input payload sent along with the request. - Payload payload = 3; - - // Whether SimpleResponse should include username. - bool fill_username = 4; - - // Whether SimpleResponse should include OAuth scope. - bool fill_oauth_scope = 5; - - // Whether to request the server to compress the response. This field is - // "nullable" in order to interoperate seamlessly with clients not able to - // implement the full compression tests by introspecting the call to verify - // the response's compression status. - BoolValue response_compressed = 6; - - // Whether server should return a given status - EchoStatus response_status = 7; - - // Whether the server should expect this request to be compressed. - BoolValue expect_compressed = 8; - - // Whether SimpleResponse should include server_id. - bool fill_server_id = 9; - - // Whether SimpleResponse should include grpclb_route_type. - bool fill_grpclb_route_type = 10; -} - -// Unary response, as configured by the request. -message SimpleResponse { - // Payload to increase message size. - Payload payload = 1; - // The user the request came from, for verifying authentication was - // successful when the client expected it. - string username = 2; - // OAuth scope. - string oauth_scope = 3; - - // Server ID. This must be unique among different server instances, - // but the same across all RPC's made to a particular server instance. - string server_id = 4; - // gRPCLB Path. - GrpclbRouteType grpclb_route_type = 5; - - // Server hostname. - string hostname = 6; -} - -// Client-streaming request. -message StreamingInputCallRequest { - // Optional input payload sent along with the request. - Payload payload = 1; - - // Whether the server should expect this request to be compressed. This field - // is "nullable" in order to interoperate seamlessly with servers not able to - // implement the full compression tests by introspecting the call to verify - // the request's compression status. - BoolValue expect_compressed = 2; - - // Not expecting any payload from the response. -} - -// Client-streaming response. -message StreamingInputCallResponse { - // Aggregated size of payloads received from the client. - int32 aggregated_payload_size = 1; -} - -// Configuration for a particular response. -message ResponseParameters { - // Desired payload sizes in responses from the server. - int32 size = 1; - - // Desired interval between consecutive responses in the response stream in - // microseconds. - int32 interval_us = 2; - - // Whether to request the server to compress the response. This field is - // "nullable" in order to interoperate seamlessly with clients not able to - // implement the full compression tests by introspecting the call to verify - // the response's compression status. - BoolValue compressed = 3; -} - -// Server-streaming request. -message StreamingOutputCallRequest { - // Desired payload type in the response from the server. - // If response_type is RANDOM, the payload from each response in the stream - // might be of different types. This is to simulate a mixed type of payload - // stream. - PayloadType response_type = 1; - - // Configuration for each expected response message. - repeated ResponseParameters response_parameters = 2; - - // Optional input payload sent along with the request. - Payload payload = 3; - - // Whether server should return a given status - EchoStatus response_status = 7; -} - -// Server-streaming response, as configured by the request and parameters. -message StreamingOutputCallResponse { - // Payload to increase response size. - Payload payload = 1; -} - -// For reconnect interop test only. -// Client tells server what reconnection parameters it used. -message ReconnectParams { - int32 max_reconnect_backoff_ms = 1; -} - -// For reconnect interop test only. -// Server tells client whether its reconnects are following the spec and the -// reconnect backoffs it saw. -message ReconnectInfo { - bool passed = 1; - repeated int32 backoff_ms = 2; -} - -message LoadBalancerStatsRequest { - // Request stats for the next num_rpcs sent by client. - int32 num_rpcs = 1; - // If num_rpcs have not completed within timeout_sec, return partial results. - int32 timeout_sec = 2; -} - -message LoadBalancerStatsResponse { - message RpcsByPeer { - // The number of completed RPCs for each peer. - map rpcs_by_peer = 1; - } - // The number of completed RPCs for each peer. - map rpcs_by_peer = 1; - // The number of RPCs that failed to record a remote peer. - int32 num_failures = 2; - map rpcs_by_method = 3; -} - -// Request for retrieving a test client's accumulated stats. -message LoadBalancerAccumulatedStatsRequest {} - -// Accumulated stats for RPCs sent by a test client. -message LoadBalancerAccumulatedStatsResponse { - // The total number of RPCs have ever issued for each type. - // Deprecated: use stats_per_method.rpcs_started instead. - map num_rpcs_started_by_method = 1 [deprecated = true]; - // The total number of RPCs have ever completed successfully for each type. - // Deprecated: use stats_per_method.result instead. - map num_rpcs_succeeded_by_method = 2 [deprecated = true]; - // The total number of RPCs have ever failed for each type. - // Deprecated: use stats_per_method.result instead. - map num_rpcs_failed_by_method = 3 [deprecated = true]; - - message MethodStats { - // The number of RPCs that were started for this method. - int32 rpcs_started = 1; - - // The number of RPCs that completed with each status for this method. The - // key is the integral value of a google.rpc.Code; the value is the count. - map result = 2; - } - - // Per-method RPC statistics. The key is the RpcType in string form; e.g. - // 'EMPTY_CALL' or 'UNARY_CALL' - map stats_per_method = 4; -} - -// Configurations for a test client. -message ClientConfigureRequest { - // Type of RPCs to send. - enum RpcType { - EMPTY_CALL = 0; - UNARY_CALL = 1; - } - - // Metadata to be attached for the given type of RPCs. - message Metadata { - RpcType type = 1; - string key = 2; - string value = 3; - } - - // The types of RPCs the client sends. - repeated RpcType types = 1; - // The collection of custom metadata to be attached to RPCs sent by the client. - repeated Metadata metadata = 2; - // The deadline to use, in seconds, for all RPCs. If unset or zero, the - // client will use the default from the command-line. - int32 timeout_sec = 3; -} - -// Response for updating a test client's configuration. -message ClientConfigureResponse {} diff --git a/proto/grpc/testing/payloads.proto b/proto/grpc/testing/payloads.proto deleted file mode 100644 index 6ac9b2d..0000000 --- a/proto/grpc/testing/payloads.proto +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.testing; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "PayloadsProto"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -message ByteBufferParams { - int32 req_size = 1; - int32 resp_size = 2; -} - -message SimpleProtoParams { - int32 req_size = 1; - int32 resp_size = 2; -} - -message ComplexProtoParams { - // TODO (vpai): Fill this in once the details of complex, representative - // protos are decided -} - -message PayloadConfig { - oneof payload { - ByteBufferParams bytebuf_params = 1; - SimpleProtoParams simple_params = 2; - ComplexProtoParams complex_params = 3; - } -} diff --git a/proto/grpc/testing/report_qps_scenario_service.proto b/proto/grpc/testing/report_qps_scenario_service.proto deleted file mode 100644 index 564d273..0000000 --- a/proto/grpc/testing/report_qps_scenario_service.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. -syntax = "proto3"; - -import "grpc/testing/control.proto"; - -package grpc.testing; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "ReportQpsScenarioServiceProto"; - -service ReportQpsScenarioService { - // Report results of a QPS test benchmark scenario. - rpc ReportScenario(ScenarioResult) returns (Void); -} diff --git a/proto/grpc/testing/stats.proto b/proto/grpc/testing/stats.proto deleted file mode 100644 index bbab8fb..0000000 --- a/proto/grpc/testing/stats.proto +++ /dev/null @@ -1,88 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package grpc.testing; - -import "grpc/core/stats.proto"; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "StatsProto"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -message ServerStats { - // wall clock time change in seconds since last reset - double time_elapsed = 1; - - // change in user time (in seconds) used by the server since last reset - double time_user = 2; - - // change in server time (in seconds) used by the server process and all - // threads since last reset - double time_system = 3; - - // change in total cpu time of the server (data from proc/stat) - uint64 total_cpu_time = 4; - - // change in idle time of the server (data from proc/stat) - uint64 idle_cpu_time = 5; - - // Number of polls called inside completion queue - uint64 cq_poll_count = 6; - - // Core library stats - grpc.core.Stats core_stats = 7; -} - -// Histogram params based on grpc/support/histogram.c -message HistogramParams { - double resolution = 1; // first bucket is [0, 1 + resolution) - double max_possible = 2; // use enough buckets to allow this value -} - -// Histogram data based on grpc/support/histogram.c -message HistogramData { - repeated uint32 bucket = 1; - double min_seen = 2; - double max_seen = 3; - double sum = 4; - double sum_of_squares = 5; - double count = 6; -} - -message RequestResultCount { - int32 status_code = 1; - int64 count = 2; -} - -message ClientStats { - // Latency histogram. Data points are in nanoseconds. - HistogramData latencies = 1; - - // See ServerStats for details. - double time_elapsed = 2; - double time_user = 3; - double time_system = 4; - - // Number of failed requests (one row per status code seen) - repeated RequestResultCount request_results = 5; - - // Number of polls called inside completion queue - uint64 cq_poll_count = 6; - - // Core library stats - grpc.core.Stats core_stats = 7; -} diff --git a/proto/grpc/testing/test.proto b/proto/grpc/testing/test.proto deleted file mode 100644 index 1b4c912..0000000 --- a/proto/grpc/testing/test.proto +++ /dev/null @@ -1,105 +0,0 @@ - -// Copyright 2015-2016 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. - -syntax = "proto3"; - -import "grpc/testing/empty.proto"; -import "grpc/testing/messages.proto"; - -package grpc.testing; - -option java_package = "io.grpc.testing.integration"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -// A simple service to test the various types of RPCs and experiment with -// performance with various types of payload. -service TestService { - // One empty request followed by one empty response. - rpc EmptyCall(grpc.testing.Empty) returns (grpc.testing.Empty); - - // One request followed by one response. - rpc UnaryCall(SimpleRequest) returns (SimpleResponse); - - // One request followed by one response. Response has cache control - // headers set such that a caching HTTP proxy (such as GFE) can - // satisfy subsequent requests. - rpc CacheableUnaryCall(SimpleRequest) returns (SimpleResponse); - - // One request followed by a sequence of responses (streamed download). - // The server returns the payload with client desired type and sizes. - rpc StreamingOutputCall(StreamingOutputCallRequest) - returns (stream StreamingOutputCallResponse); - - // A sequence of requests followed by one response (streamed upload). - // The server returns the aggregated size of client payload as the result. - rpc StreamingInputCall(stream StreamingInputCallRequest) - returns (StreamingInputCallResponse); - - // A sequence of requests with each request served by the server immediately. - // As one request could lead to multiple responses, this interface - // demonstrates the idea of full duplexing. - rpc FullDuplexCall(stream StreamingOutputCallRequest) - returns (stream StreamingOutputCallResponse); - - // A sequence of requests followed by a sequence of responses. - // The server buffers all the client requests and then serves them in order. A - // stream of responses are returned to the client when the server starts with - // first request. - rpc HalfDuplexCall(stream StreamingOutputCallRequest) - returns (stream StreamingOutputCallResponse); - - // The test server will not implement this method. It will be used - // to test the behavior when clients call unimplemented methods. - rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty); -} - -// A simple service NOT implemented at servers so clients can test for -// that case. -service UnimplementedService { - // A call that no server should implement - rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty); -} - -// A service used to control reconnect server. -service ReconnectService { - rpc Start(grpc.testing.ReconnectParams) returns (grpc.testing.Empty); - rpc Stop(grpc.testing.Empty) returns (grpc.testing.ReconnectInfo); -} - -// A service used to obtain stats for verifying LB behavior. -service LoadBalancerStatsService { - // Gets the backend distribution for RPCs sent by a test client. - rpc GetClientStats(LoadBalancerStatsRequest) - returns (LoadBalancerStatsResponse) {} - - // Gets the accumulated stats for RPCs sent by a test client. - rpc GetClientAccumulatedStats(LoadBalancerAccumulatedStatsRequest) - returns (LoadBalancerAccumulatedStatsResponse) {} -} - -// A service to remotely control health status of an xDS test server. -service XdsUpdateHealthService { - rpc SetServing(grpc.testing.Empty) returns (grpc.testing.Empty); - rpc SetNotServing(grpc.testing.Empty) returns (grpc.testing.Empty); -} - -// A service to dynamically update the configuration of an xDS test client. -service XdsUpdateClientConfigureService { - // Update the tes client's configuration. - rpc Configure(ClientConfigureRequest) returns (ClientConfigureResponse); -} diff --git a/proto/grpc/testing/worker_service.proto b/proto/grpc/testing/worker_service.proto deleted file mode 100644 index 6b9b70b..0000000 --- a/proto/grpc/testing/worker_service.proto +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2015 gRPC authors. -// -// 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. - -// An integration test service that covers all the method signature permutations -// of unary/streaming requests/responses. -syntax = "proto3"; - -import "grpc/testing/control.proto"; - -package grpc.testing; - -option java_multiple_files = true; -option java_package = "io.grpc.testing"; -option java_outer_classname = "WorkerServiceProto"; -option go_package="github.com/costinm/grpc-mesh/proto/grpc/testing"; - -service WorkerService { - // Start server with specified workload. - // First request sent specifies the ServerConfig followed by ServerStatus - // response. After that, a "Mark" can be sent anytime to request the latest - // stats. Closing the stream will initiate shutdown of the test server - // and once the shutdown has finished, the OK status is sent to terminate - // this RPC. - rpc RunServer(stream ServerArgs) returns (stream ServerStatus); - - // Start client with specified workload. - // First request sent specifies the ClientConfig followed by ClientStatus - // response. After that, a "Mark" can be sent anytime to request the latest - // stats. Closing the stream will initiate shutdown of the test client - // and once the shutdown has finished, the OK status is sent to terminate - // this RPC. - rpc RunClient(stream ClientArgs) returns (stream ClientStatus); - - // Just return the core count - unary call - rpc CoreCount(CoreRequest) returns (CoreResponse); - - // Quit this worker - rpc QuitWorker(Void) returns (Void); -} diff --git a/proto/hbone/hbone.proto b/proto/hbone/hbone.proto deleted file mode 100644 index b645c6f..0000000 --- a/proto/hbone/hbone.proto +++ /dev/null @@ -1,24 +0,0 @@ -syntax = "proto3"; - -package hbone; - -option go_package="github.com/costinm/ugate/gen/proto/hbone"; - -// WIP: using gRPC stack for TCP-over-HTTP/2. -// This avoids the server-CLOSE problem and allows using the GRPC XDS integration -// and all the other features. It might have a small performance cost due to -// the extra framing and copy - needs to be evaluated. - - -message Frame { - bytes data = 1; - uint32 status = 2; -} - -// Experimental Stream service, to use with gRPC proxyless infrastructure and to handle -// TCP plain-text 'server close' issues with some stacks. -// It will be an alternate TCP transport - still H2 and mTLS based, but with additional framing. -service Stream { - rpc StreamAggregatedResources(stream Frame) returns (stream Frame) {} -} - diff --git a/proto/istio/v1/auth/ca.proto b/proto/istio/v1/auth/ca.proto deleted file mode 100644 index b229c34..0000000 --- a/proto/istio/v1/auth/ca.proto +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -syntax = "proto3"; - -// Keep this package for backward compatibility. -package istio.v1.auth; - -option go_package = "github.com/costinm/ugate/gen/proto/istio/v1/auth"; - -// Certificate request message. The authentication should be based on: -// 1. Bearer tokens carried in the side channel; -// 2. Client-side certificate via Mutual TLS handshake. -// Note: the service implementation is REQUIRED to verify the authenticated caller is authorize to -// all SANs in the CSR. The server side may overwrite any requested certificate field based on its -// policies. -message IstioCertificateRequest { - // PEM-encoded certificate request. - // The public key in the CSR is used to generate the certificate, - // and other fields in the generated certificate may be overwritten by the CA. - string csr = 1; - // Optional: requested certificate validity period, in seconds. - int64 validity_duration = 3; - - // $hide_from_docs - // Optional: Opaque metadata provided by the XDS node to Istio. - // Supported metadata: WorkloadName, WorkloadIP, ClusterID - Struct metadata = 4; -} - -// Certificate response message. -message IstioCertificateResponse { - // PEM-encoded certificate chain. - // The leaf cert is the first element, and the root cert is the last element. - repeated string cert_chain = 1; -} - -// Service for managing certificates issued by the CA. -service IstioCertificateService { - // Using provided CSR, returns a signed certificate. - rpc CreateCertificate(IstioCertificateRequest) - returns (IstioCertificateResponse) { - } -} - -// Duplicated to avoid dependnecy to struct.proto -// `Struct` represents a structured data value, consisting of fields -// which map to dynamically typed values. In some languages, `Struct` -// might be supported by a native representation. For example, in -// scripting languages like JS a struct is represented as an -// object. The details of that representation are described together -// with the proto support for the language. -// -// The JSON representation for `Struct` is JSON object. -message Struct { - // Unordered map of dynamically typed values. - map fields = 1; -} - -// `Value` represents a dynamically typed value which can be either -// null, a number, a string, a boolean, a recursive struct value, or a -// list of values. A producer of value is expected to set one of that -// variants, absence of any variant indicates an error. -// -// The JSON representation for `Value` is JSON value. -message Value { - // The kind of value. - oneof kind { - // Represents a null value. - NullValue null_value = 1; - // Represents a double value. - double number_value = 2; - // Represents a string value. - string string_value = 3; - // Represents a boolean value. - bool bool_value = 4; - // Represents a structured value. - Struct struct_value = 5; - // Represents a repeated `Value`. - ListValue list_value = 6; - } -} - -// `NullValue` is a singleton enumeration to represent the null value for the -// `Value` type union. -// -// The JSON representation for `NullValue` is JSON `null`. -enum NullValue { - // Null value. - NULL_VALUE = 0; -} - -// `ListValue` is a wrapper around a repeated field of values. -// -// The JSON representation for `ListValue` is JSON array. -message ListValue { - // Repeated field of dynamically typed values. - repeated Value values = 1; -} diff --git a/proto/konectivity.proto b/proto/konectivity.proto deleted file mode 100644 index a7c9bb5..0000000 --- a/proto/konectivity.proto +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright The Kubernetes Authors. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -// https://raw.githubusercontent.com/kubernetes-sigs/apiserver-network-proxy/master/konnectivity-client/proto/client/client.proto -// It does not use a package ! - -// Retransmit? -// Sliding windows? - -//option go_package = "sigs.k8s.io/apiserver-network-proxy/konnectivity-client/proto/client"; -option go_package = "github.com/costinm/ugate/gen/proto"; - -service ProxyService { - rpc Proxy(stream Packet) returns (stream Packet) {} -} - -// From: https://github.com/kubernetes-sigs/apiserver-network-proxy/blob/master/proto/agent/agent.proto -// This is used over UDS. -service AgentService { - // Agent Identifier? - rpc Connect(stream Packet) returns (stream Packet) {} -} - -enum PacketType { - DIAL_REQ = 0; - DIAL_RSP = 1; - CLOSE_REQ = 2; - CLOSE_RSP = 3; - DATA = 4; - DIAL_CLS = 5; -} - -enum Error { - EOF = 0; - // ... -} - -message Packet { - PacketType type = 1; - - oneof payload { - DialRequest dialRequest = 2; - DialResponse dialResponse = 3; - Data data = 4; - CloseRequest closeRequest = 5; - CloseResponse closeResponse = 6; - CloseDial closeDial = 7; - } -} - -message DialRequest { - // tcp or udp? - string protocol = 1; - - // node:port - string address = 2; - - // random id for client, maybe should be longer - int64 random = 3; -} - -message DialResponse { - // error failed reason; enum? - string error = 1; - - // connectID indicates the identifier of the connection - int64 connectID = 2; - - // random copied from DialRequest - int64 random = 3; -} - -message CloseRequest { - // connectID of the stream to close - int64 connectID = 1; -} - -message CloseResponse { - // error message - string error = 1; - - // connectID indicates the identifier of the connection - int64 connectID = 2; -} - -message CloseDial { - // random id of the DialRequest - int64 random = 1; -} - -message Data { - // connectID to connect to - int64 connectID = 1; - - // error message if error happens - string error = 2; - - // stream data - bytes data = 3; -} diff --git a/proto/networking/v1beta1/destination_rule.proto b/proto/networking/v1beta1/destination_rule.proto deleted file mode 100644 index c9f97e4..0000000 --- a/proto/networking/v1beta1/destination_rule.proto +++ /dev/null @@ -1,1125 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -syntax = "proto3"; - -import "google/api/field_behavior.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/wrappers.proto"; -import "networking/v1beta1/virtual_service.proto"; - -// $schema: istio.networking.v1beta1.DestinationRule -// $title: Destination Rule -// $description: Configuration affecting load balancing, outlier detection, etc. -// $location: https://istio.io/docs/reference/config/networking/destination-rule.html -// $aliases: [/docs/reference/config/networking/v1beta1/destination-rule] -// $mode: none - -// `DestinationRule` defines policies that apply to traffic intended for a -// service after routing has occurred. These rules specify configuration -// for load balancing, connection pool size from the sidecar, and outlier -// detection settings to detect and evict unhealthy hosts from the load -// balancing pool. For example, a simple load balancing policy for the -// ratings service would look as follows: -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// ``` -// {{}} -// {{}} -// -// Version specific policies can be specified by defining a named -// `subset` and overriding the settings specified at the service level. The -// following rule uses a round robin load balancing policy for all traffic -// going to a subset named testversion that is composed of endpoints (e.g., -// pods) with labels (version:v3). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// **Note:** Policies specified for subsets will not take effect until -// a route rule explicitly sends traffic to this subset. -// -// Traffic policies can be customized to specific ports as well. The -// following rule uses the least connection load balancing policy for all -// traffic to port 80, while uses a round robin load balancing setting for -// traffic to the port 9080. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings-port -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: # Apply to all ports -// portLevelSettings: -// - port: -// number: 80 -// loadBalancer: -// simple: LEAST_CONN -// - port: -// number: 9080 -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings-port -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: # Apply to all ports -// portLevelSettings: -// - port: -// number: 80 -// loadBalancer: -// simple: LEAST_CONN -// - port: -// number: 9080 -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// DestinationRule defines policies that apply to traffic intended for a service -// after routing has occurred. -// -// -// -// -// -message DestinationRule { - // The name of a service from the service registry. Service - // names are looked up from the platform's service registry (e.g., - // Kubernetes services, Consul services, etc.) and from the hosts - // declared by [ServiceEntries](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry). Rules defined for - // services that do not exist in the service registry will be ignored. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews" will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. _To avoid - // potential misconfigurations, it is recommended to always use fully - // qualified domain names over short names._ - // - // Note that the host field applies to both HTTP and TCP services. - string host = 1 [(google.api.field_behavior) = REQUIRED]; - - // Traffic policies to apply (load balancing policy, connection pool - // sizes, outlier detection). - TrafficPolicy traffic_policy = 2; - - // One or more named sets that represent individual versions of a - // service. Traffic policies can be overridden at subset level. - repeated Subset subsets = 3; - - // A list of namespaces to which this destination rule is exported. - // The resolution of a destination rule to apply to a service occurs in the - // context of a hierarchy of namespaces. Exporting a destination rule allows - // it to be included in the resolution hierarchy for services in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of destination rules - // across namespace boundaries. - // - // If no namespaces are specified then the destination rule is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the destination rule is declared in. Similarly, the value "*" is reserved and - // defines an export to all namespaces. - repeated string export_to = 4; -} - -// Traffic policies to apply for a specific destination, across all -// destination ports. See DestinationRule for examples. -message TrafficPolicy { - // Settings controlling the load balancer algorithms. - LoadBalancerSettings load_balancer = 1; - - // Settings controlling the volume of connections to an upstream service - ConnectionPoolSettings connection_pool = 2; - - // Settings controlling eviction of unhealthy hosts from the load balancing pool - OutlierDetection outlier_detection = 3; - - // TLS related settings for connections to the upstream service. - ClientTLSSettings tls = 4; - - // Traffic policies that apply to specific ports of the service - message PortTrafficPolicy { - // Specifies the number of a port on the destination service - // on which this policy is being applied. - // - PortSelector port = 1; - - // Settings controlling the load balancer algorithms. - LoadBalancerSettings load_balancer = 2; - - // Settings controlling the volume of connections to an upstream service - ConnectionPoolSettings connection_pool = 3; - - // Settings controlling eviction of unhealthy hosts from the load balancing pool - OutlierDetection outlier_detection = 4; - - // TLS related settings for connections to the upstream service. - ClientTLSSettings tls = 5; - } - - // Traffic policies specific to individual ports. Note that port level - // settings will override the destination-level settings. Traffic - // settings specified at the destination-level will not be inherited when - // overridden by port-level settings, i.e. default values will be applied - // to fields omitted in port-level traffic policies. - repeated PortTrafficPolicy port_level_settings = 5; -} - -// A subset of endpoints of a service. Subsets can be used for scenarios -// like A/B testing, or routing to a specific version of a service. Refer -// to [VirtualService](https://istio.io/docs/reference/config/networking/virtual-service/#VirtualService) documentation for examples of using -// subsets in these scenarios. In addition, traffic policies defined at the -// service-level can be overridden at a subset-level. The following rule -// uses a round robin load balancing policy for all traffic going to a -// subset named testversion that is composed of endpoints (e.g., pods) with -// labels (version:v3). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_CONN -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// **Note:** Policies specified for subsets will not take effect until -// a route rule explicitly sends traffic to this subset. -// -// One or more labels are typically required to identify the subset destination, -// however, when the corresponding DestinationRule represents a host that -// supports multiple SNI hosts (e.g., an egress gateway), a subset without labels -// may be meaningful. In this case a traffic policy with [ClientTLSSettings](#ClientTLSSettings) -// can be used to identify a specific SNI host corresponding to the named subset. -message Subset { - // Name of the subset. The service name and the subset name can - // be used for traffic splitting in a route rule. - string name = 1 [(google.api.field_behavior) = REQUIRED]; - - // Labels apply a filter over the endpoints of a service in the - // service registry. See route rules for examples of usage. - map labels = 2; - - // Traffic policies that apply to this subset. Subsets inherit the - // traffic policies specified at the DestinationRule level. Settings - // specified at the subset level will override the corresponding settings - // specified at the DestinationRule level. - TrafficPolicy traffic_policy = 3; -} - -// Load balancing policies to apply for a specific destination. See Envoy's -// load balancing -// [documentation](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/load_balancing) -// for more details. -// -// For example, the following rule uses a round robin load balancing policy -// for all traffic going to the ratings service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// ``` -// {{}} -// {{}} -// -// The following example sets up sticky sessions for the ratings service -// hashing-based load balancer for the same ratings service using the -// the User cookie as the hash key. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-ratings -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s -// ``` -// {{}} -// {{}} -// -message LoadBalancerSettings { - // Standard load balancing algorithms that require no tuning. - enum SimpleLB { - // Round Robin policy. Default - ROUND_ROBIN = 0; - - // The least request load balancer uses an O(1) algorithm which selects - // two random healthy hosts and picks the host which has fewer active - // requests. - LEAST_CONN = 1; - - // The random load balancer selects a random healthy host. The random - // load balancer generally performs better than round robin if no health - // checking policy is configured. - RANDOM = 2; - - // This option will forward the connection to the original IP address - // requested by the caller without doing any form of load - // balancing. This option must be used with care. It is meant for - // advanced use cases. Refer to Original Destination load balancer in - // Envoy for further details. - PASSTHROUGH = 3; - }; - - // Consistent Hash-based load balancing can be used to provide soft - // session affinity based on HTTP headers, cookies or other - // properties. The affinity to a particular destination host will be - // lost when one or more hosts are added/removed from the destination - // service. - message ConsistentHashLB { - // Describes a HTTP cookie that will be used as the hash key for the - // Consistent Hash load balancer. If the cookie is not present, it will - // be generated. - message HTTPCookie { - // Name of the cookie. - string name = 1 [(google.api.field_behavior) = REQUIRED]; - // Path to set for the cookie. - string path = 2; - // Lifetime of the cookie. - google.protobuf.Duration ttl = 3 [(google.api.field_behavior) = REQUIRED]; - }; - - // The hash key to use. - oneof hash_key { - // Hash based on a specific HTTP header. - string http_header_name = 1; - - // Hash based on HTTP cookie. - HTTPCookie http_cookie = 2; - - // Hash based on the source IP address. - // This is applicable for both TCP and HTTP connections. - bool use_source_ip = 3; - - // Hash based on a specific HTTP query parameter. - string http_query_parameter_name = 5; - }; - - // The minimum number of virtual nodes to use for the hash - // ring. Defaults to 1024. Larger ring sizes result in more granular - // load distributions. If the number of hosts in the load balancing - // pool is larger than the ring size, each host will be assigned a - // single virtual node. - uint64 minimum_ring_size = 4; - }; - - // (-- TODO: Enable Subset load balancing after moving to v2 API Also - // look into enabling Priotity based load balancing for spilling over - // from one priority pool to another. --) - - // Upstream load balancing policy. - oneof lb_policy { - SimpleLB simple = 1; - ConsistentHashLB consistent_hash = 2; - } - - // Locality load balancer settings, this will override mesh wide settings in entirety, meaning no merging would be performed - // between this object and the object one in MeshConfig - LocalityLoadBalancerSetting locality_lb_setting = 3; -} - -// Connection pool settings for an upstream host. The settings apply to -// each individual host in the upstream service. See Envoy's [circuit -// breaker](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking) -// for more details. Connection pool settings can be applied at the TCP -// level as well as at HTTP level. -// -// For example, the following rule sets a limit of 100 connections to redis -// service called myredissrv with a connect timeout of 30ms -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: bookinfo-redis -// spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: bookinfo-redis -// spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s -// ``` -// {{}} -// {{}} -// -message ConnectionPoolSettings { - // Settings common to both HTTP and TCP upstream connections. - message TCPSettings { - // TCP keepalive. - message TcpKeepalive { - // 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.) - uint32 probes = 1; - - // The time duration 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.) - google.protobuf.Duration time = 2; - - // The time duration between keep-alive probes. - // Default is to use the OS level configuration - // (unless overridden, Linux defaults to 75s.) - google.protobuf.Duration interval = 3; - }; - - // Maximum number of HTTP1 /TCP connections to a destination host. Default 2^32-1. - int32 max_connections = 1; - - // TCP connection timeout. format: - // 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s. - google.protobuf.Duration connect_timeout = 2; - - // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. - TcpKeepalive tcp_keepalive = 3; - }; - - // Settings applicable to HTTP1.1/HTTP2/GRPC connections. - message HTTPSettings { - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. - int32 http1_max_pending_requests = 1; - - // Maximum number of requests to a backend. Default 2^32-1. - int32 http2_max_requests = 2; - - // Maximum number of requests per connection to a backend. Setting this - // parameter to 1 disables keep alive. Default 0, meaning "unlimited", - // up to 2^29. - int32 max_requests_per_connection = 3; - - // Maximum number of retries that can be outstanding to all hosts in a - // cluster at a given time. Defaults to 2^32-1. - int32 max_retries = 4; - - // The idle timeout for upstream connection pool connections. The idle timeout - // is defined as the period in which there are no active requests. - // If not set, the default is 1 hour. 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. - // Note that request based timeouts mean that HTTP/2 PINGs will not - // keep the connection alive. Applies to both HTTP1.1 and HTTP2 connections. - google.protobuf.Duration idle_timeout = 5; - - // Policy for upgrading http1.1 connections to http2. - enum H2UpgradePolicy { - // Use the global default. - DEFAULT = 0; - // Do not upgrade the connection to http2. - // This opt-out option overrides the default. - DO_NOT_UPGRADE = 1; - // Upgrade the connection to http2. - // This opt-in option overrides the default. - UPGRADE = 2; - }; - // Specify if http1.1 connection should be upgraded to http2 for the associated destination. - H2UpgradePolicy h2_upgrade_policy = 6; - - // If set to true, client protocol will be preserved while initiating connection to backend. - // Note that when this is set to true, h2_upgrade_policy will be ineffective i.e. the client - // connections will not be upgraded to http2. - bool use_client_protocol = 7; - }; - - // Settings common to both HTTP and TCP upstream connections. - TCPSettings tcp = 1; - // HTTP connection pool settings. - HTTPSettings http = 2; -} - -// A Circuit breaker implementation that tracks the status of each -// individual host in the upstream service. Applicable to both HTTP and -// TCP services. For HTTP services, hosts that continually return 5xx -// errors for API calls are ejected from the pool for a pre-defined period -// of time. For TCP services, connection timeouts or connection -// failures to a given host counts as an error when measuring the -// consecutive errors metric. See Envoy's [outlier -// detection](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/outlier) -// for more details. -// -// The following rule sets a connection pool size of 100 HTTP1 connections -// with no more than 10 req/connection to the "reviews" service. In addition, -// it sets a limit of 1000 concurrent HTTP2 requests and configures upstream -// hosts to be scanned every 5 mins so that any host that fails 7 consecutive -// times with a 502, 503, or 504 error code will be ejected for 15 minutes. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-cb-policy -// spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-cb-policy -// spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m -// ``` -// {{}} -// {{}} -// -message OutlierDetection { - // Number of errors before a host is ejected from the connection - // pool. Defaults to 5. When the upstream host is accessed over HTTP, a - // 502, 503, or 504 return code qualifies as an error. When the upstream host - // is accessed over an opaque TCP connection, connect timeouts and - // connection error/failure events qualify as an error. - // $hide_from_docs - int32 consecutive_errors = 1 [deprecated=true]; - - // Determines whether to distinguish local origin failures from external errors. If set to true - // consecutive_local_origin_failure is taken into account for outlier detection calculations. - // This should be used when you want to derive the outlier detection status based on the errors - // seen locally such as failure to connect, timeout while connecting etc. rather than the status code - // retuned by upstream service. This is especially useful when the upstream service explicitly returns - // a 5xx for some requests and you want to ignore those responses from upstream service while determining - // the outlier detection status of a host. - // Defaults to false. - bool split_external_local_origin_errors = 8; - - // The number of consecutive locally originated failures before ejection - // occurs. Defaults to 5. Parameter takes effect only when split_external_local_origin_errors - // is set to true. - google.protobuf.UInt32Value consecutive_local_origin_failures = 9; - - // Number of gateway errors before a host is ejected from the connection pool. - // When the upstream host is accessed over HTTP, a 502, 503, or 504 return - // code qualifies as a gateway error. When the upstream host is accessed over - // an opaque TCP connection, connect timeouts and connection error/failure - // events qualify as a gateway error. - // This feature is disabled by default or when set to the value 0. - // - // Note that consecutive_gateway_errors and consecutive_5xx_errors can be - // used separately or together. Because the errors counted by - // consecutive_gateway_errors are also included in consecutive_5xx_errors, - // if the value of consecutive_gateway_errors is greater than or equal to - // the value of consecutive_5xx_errors, consecutive_gateway_errors will have - // no effect. - google.protobuf.UInt32Value consecutive_gateway_errors = 6; - - // Number of 5xx errors before a host is ejected from the connection pool. - // When the upstream host is accessed over an opaque TCP connection, connect - // timeouts, connection error/failure and request failure events qualify as a - // 5xx error. - // This feature defaults to 5 but can be disabled by setting the value to 0. - // - // Note that consecutive_gateway_errors and consecutive_5xx_errors can be - // used separately or together. Because the errors counted by - // consecutive_gateway_errors are also included in consecutive_5xx_errors, - // if the value of consecutive_gateway_errors is greater than or equal to - // the value of consecutive_5xx_errors, consecutive_gateway_errors will have - // no effect. - google.protobuf.UInt32Value consecutive_5xx_errors = 7; - - // Time interval between ejection sweep analysis. format: - // 1h/1m/1s/1ms. MUST BE >=1ms. Default is 10s. - google.protobuf.Duration interval = 2; - - // Minimum ejection duration. A host will remain ejected for a period - // equal to the product of minimum ejection duration and the number of - // times the host has been ejected. This technique allows the system to - // automatically increase the ejection period for unhealthy upstream - // servers. format: 1h/1m/1s/1ms. MUST BE >=1ms. Default is 30s. - google.protobuf.Duration base_ejection_time = 3; - - // Maximum % of hosts in the load balancing pool for the upstream - // service that can be ejected. Defaults to 10%. - int32 max_ejection_percent = 4; - - // Outlier detection will be enabled as long as the associated load balancing - // pool has at least min_health_percent hosts in healthy mode. When the - // percentage of healthy hosts in the load balancing pool drops below this - // threshold, outlier detection will be disabled and the proxy will load balance - // across all hosts in the pool (healthy and unhealthy). The threshold can be - // disabled by setting it to 0%. The default is 0% as it's not typically - // applicable in k8s environments with few pods per service. - int32 min_health_percent = 5; -} - -// SSL/TLS related settings for upstream connections. See Envoy's [TLS -// context](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/transport_sockets/tls/v3/common.proto.html#common-tls-configuration) -// for more details. These settings are common to both HTTP and TCP upstreams. -// -// For example, the following rule configures a client to use mutual TLS -// for connections to upstream database cluster. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: db-mtls -// spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: db-mtls -// spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// {{}} -// -// The following rule configures a client to use TLS when talking to a -// foreign service whose domain matches *.foo.com. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: tls-foo -// spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: tls-foo -// spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE -// ``` -// {{}} -// {{}} -// -// The following rule configures a client to use Istio mutual TLS when talking -// to rating services. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: ratings-istio-mtls -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: ratings-istio-mtls -// spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL -// ``` -// {{}} -// {{}} -// -message ClientTLSSettings { - // TLS connection mode - enum TLSmode { - // Do not setup a TLS connection to the upstream endpoint. - DISABLE = 0; - - // Originate a TLS connection to the upstream endpoint. - SIMPLE = 1; - - // Secure connections to the upstream using mutual TLS by presenting - // client certificates for authentication. - MUTUAL = 2; - - // Secure connections to the upstream using mutual TLS by presenting - // client certificates for authentication. - // Compared to Mutual mode, this mode uses certificates generated - // automatically by Istio for mTLS authentication. When this mode is - // used, all other fields in `ClientTLSSettings` should be empty. - ISTIO_MUTUAL = 3; - }; - - // Indicates whether connections to this port should be secured - // using TLS. The value of this field determines how TLS is enforced. - TLSmode mode = 1 [(google.api.field_behavior) = REQUIRED]; - - // REQUIRED if mode is `MUTUAL`. The path to the file holding the - // client-side TLS certificate to use. - // Should be empty if mode is `ISTIO_MUTUAL`. - string client_certificate = 2; - - // REQUIRED if mode is `MUTUAL`. The path to the file holding the - // client's private key. - // Should be empty if mode is `ISTIO_MUTUAL`. - string private_key = 3; - - // OPTIONAL: The path to the file containing certificate authority - // certificates to use in verifying a presented server certificate. If - // omitted, the proxy will not verify the server's certificate. - // Should be empty if mode is `ISTIO_MUTUAL`. - string ca_certificates = 4; - - // The name of the secret that holds the TLS certs for the - // client including the CA certificates. Secret must exist in the - // same namespace with the proxy using the certificates. - // The secret (of type `generic`)should contain the - // following keys and values: `key: `, - // `cert: `, `cacert: `. - // Here CACertificate is used to verify the server certificate. - // Secret of type tls for client certificates along with - // ca.crt key for CA certificates is also supported. - // Only one of client certificates and CA certificate - // or credentialName can be specified. - // - // **NOTE:** This field is currently applicable only at gateways. - // Sidecars will continue to use the certificate paths. - string credential_name = 7; - - // A list of alternate names to verify the subject identity in the - // certificate. If specified, the proxy will verify that the server - // certificate's subject alt name matches one of the specified values. - // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. - repeated string subject_alt_names = 5; - - // SNI string to present to the server during TLS handshake. - string sni = 6; - - // InsecureSkipVerify specifies whether the proxy should skip verifying the - // CA signature and SAN for the server certificate corresponding to the host. - // This flag should only be set if global CA signature verifcation is - // enabled, `VerifyCertAtClient` environmental variable is set to `true`, - // but no verification is desired for a specific host. If enabled with or - // without `VerifyCertAtClient` enabled, verification of the CA signature and - // SAN will be skipped. - // - // `InsecureSkipVerify` is `false` by default. - // `VerifyCertAtClient` is `false` by default in Istio version 1.9 but will - // be `true` by default in a later version where, going forward, it will be - // enabled by default. - google.protobuf.BoolValue insecure_skip_verify = 8; -} - -// Locality-weighted load balancing allows administrators to control the -// distribution of traffic to endpoints based on the localities of where the -// traffic originates and where it will terminate. These localities are -// specified using arbitrary labels that designate a hierarchy of localities in -// {region}/{zone}/{sub-zone} form. For additional detail refer to -// [Locality Weight](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) -// The following example shows how to setup locality weights mesh-wide. -// -// Given a mesh with workloads and their service deployed to "us-west/zone1/*" -// and "us-west/zone2/*". This example specifies that when traffic accessing a -// service originates from workloads in "us-west/zone1/*", 80% of the traffic -// will be sent to endpoints in "us-west/zone1/*", i.e the same zone, and the -// remaining 20% will go to endpoints in "us-west/zone2/*". This setup is -// intended to favor routing traffic to endpoints in the same locality. -// A similar setting is specified for traffic originating in "us-west/zone2/*". -// -// ```yaml -// distribute: -// - from: us-west/zone1/* -// to: -// "us-west/zone1/*": 80 -// "us-west/zone2/*": 20 -// - from: us-west/zone2/* -// to: -// "us-west/zone1/*": 20 -// "us-west/zone2/*": 80 -// ``` -// -// If the goal of the operator is not to distribute load across zones and -// regions but rather to restrict the regionality of failover to meet other -// operational requirements an operator can set a 'failover' policy instead of -// a 'distribute' policy. -// -// The following example sets up a locality failover policy for regions. -// Assume a service resides in zones within us-east, us-west & eu-west -// this example specifies that when endpoints within us-east become unhealthy -// traffic should failover to endpoints in any zone or sub-zone within eu-west -// and similarly us-west should failover to us-east. -// -// ```yaml -// failover: -// - from: us-east -// to: eu-west -// - from: us-west -// to: us-east -// ``` -// Locality load balancing settings. -message LocalityLoadBalancerSetting{ - // Describes how traffic originating in the 'from' zone or sub-zone is - // distributed over a set of 'to' zones. Syntax for specifying a zone is - // {region}/{zone}/{sub-zone} and terminal wildcards are allowed on any - // segment of the specification. Examples: - // - // `*` - matches all localities - // - // `us-west/*` - all zones and sub-zones within the us-west region - // - // `us-west/zone-1/*` - all sub-zones within us-west/zone-1 - message Distribute{ - // Originating locality, '/' separated, e.g. 'region/zone/sub_zone'. - string from = 1; - - // Map of upstream localities to traffic distribution weights. The sum of - // all weights should be 100. Any locality not present will - // receive no traffic. - map to = 2; - }; - - // Specify the traffic failover policy across regions. Since zone and sub-zone - // failover is supported by default this only needs to be specified for - // regions when the operator needs to constrain traffic failover so that - // the default behavior of failing over to any endpoint globally does not - // apply. This is useful when failing over traffic across regions would not - // improve service health or may need to be restricted for other reasons - // like regulatory controls. - message Failover{ - // Originating region. - string from = 1; - - // Destination region the traffic will fail over to when endpoints in - // the 'from' region becomes unhealthy. - string to = 2; - }; - - // Optional: only one of distribute, failover or failoverPriority can be set. - // Explicitly specify loadbalancing weight across different zones and geographical locations. - // Refer to [Locality weighted load balancing](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/locality_weight) - // If empty, the locality weight is set according to the endpoints number within it. - repeated Distribute distribute = 1; - - // Optional: only one of distribute, failover or failoverPriority can be set. - // Explicitly specify the region traffic will land on when endpoints in local region becomes unhealthy. - // Should be used together with OutlierDetection to detect unhealthy endpoints. - // Note: if no OutlierDetection specified, this will not take effect. - repeated Failover failover = 2; - - // failoverPriority is an ordered list of labels used to sort endpoints to do priority based load balancing. - // This is to support traffic failover across different groups of endpoints. - // Suppose there are total N labels specified: - // - // 1. Endpoints matching all N labels with the client proxy have priority P(0) i.e. the highest priority. - // 2. Endpoints matching the first N-1 labels with the client proxy have priority P(1) i.e. second highest priority. - // 3. By extension of this logic, endpoints matching only the first label with the client proxy has priority P(N-1) i.e. second lowest priority. - // 4. All the other endpoints have priority P(N) i.e. lowest priority. - // - // Note: For a label to be considered for match, the previous labels must match, i.e. nth label would be considered matched only if first n-1 labels match. - // - // It can be any label specified on both client and server workloads. - // The following labels which have special semantic meaning are also supported: - // - // - `topology.istio.io/network` is used to match the network metadata of an endpoint, which can be specified by pod/namespace label `topology.istio.io/network`, sidecar env `ISTIO_META_NETWORK` or MeshNetworks. - // - `topology.istio.io/cluster` is used to match the clusterID of an endpoint, which can be specified by pod label `topology.istio.io/cluster` or pod env `ISTIO_META_CLUSTER_ID`. - // - `topology.kubernetes.io/region` is used to match the region metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/region` or the deprecated label `failure-domain.beta.kubernetes.io/region`. - // - `topology.kubernetes.io/zone` is used to match the zone metadata of an endpoint, which maps to Kubernetes node label `topology.kubernetes.io/zone` or the deprecated label `failure-domain.beta.kubernetes.io/zone`. - // - `topology.istio.io/subzone` is used to match the subzone metadata of an endpoint, which maps to Istio node label `topology.istio.io/subzone`. - // - // The below topology config indicates the following priority levels: - // - // ```yaml - // failoverPriority: - // - "topology.istio.io/network" - // - "topology.kubernetes.io/region" - // - "topology.kubernetes.io/zone" - // - "topology.istio.io/subzone" - // ``` - // - // 1. endpoints match same [network, region, zone, subzone] label with the client proxy have the highest priority. - // 2. endpoints have same [network, region, zone] label but different [subzone] label with the client proxy have the second highest priority. - // 3. endpoints have same [network, region] label but different [zone] label with the client proxy have the third highest priority. - // 4. endpoints have same [network] but different [region] labels with the client proxy have the fourth highest priority. - // 5. all the other endpoints have the same lowest priority. - // - // Optional: only one of distribute, failover or failoverPriority can be set. - // And it should be used together with `OutlierDetection` to detect unhealthy endpoints, otherwise has no effect. - repeated string failover_priority = 4; - - // enable locality load balancing, this is DestinationRule-level and will override mesh wide settings in entirety. - // e.g. true means that turn on locality load balancing for this DestinationRule no matter what mesh wide settings is. - google.protobuf.BoolValue enabled = 3; -} diff --git a/proto/networking/v1beta1/gateway.proto b/proto/networking/v1beta1/gateway.proto deleted file mode 100644 index 7f08838..0000000 --- a/proto/networking/v1beta1/gateway.proto +++ /dev/null @@ -1,731 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; - -// $schema: istio.networking.v1beta1.Gateway -// $title: Gateway -// $description: Configuration affecting edge load balancer. -// $location: https://istio.io/docs/reference/config/networking/gateway.html -// $aliases: [/docs/reference/config/networking/v1beta1/gateway] -// $mode: none - -// `Gateway` describes a load balancer operating at the edge of the mesh -// receiving incoming or outgoing HTTP/TCP connections. The specification -// describes a set of ports that should be exposed, the type of protocol to -// use, SNI configuration for the load balancer, etc. -// -// For example, the following Gateway configuration sets up a proxy to act -// as a load balancer exposing port 80 and 9080 (http), 443 (https), -// 9443(https) and port 2379 (TCP) for ingress. The gateway will be -// applied to the proxy running on a pod with labels `app: -// my-gateway-controller`. While Istio will configure the proxy to listen -// on these ports, it is the responsibility of the user to ensure that -// external traffic to these ports are allowed into the mesh. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// httpsRedirect: true # sends 301 redirect for http requests -// - port: -// number: 443 -// name: https-443 -// protocol: HTTPS -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// mode: SIMPLE # enables HTTPS on this port -// serverCertificate: /etc/certs/servercert.pem -// privateKey: /etc/certs/privatekey.pem -// - port: -// number: 9443 -// name: https-9443 -// protocol: HTTPS -// hosts: -// - "bookinfo-namespace/*.bookinfo.com" -// tls: -// mode: SIMPLE # enables HTTPS on this port -// credentialName: bookinfo-secret # fetches certs from Kubernetes secret -// - port: -// number: 9080 -// name: http-wildcard -// protocol: HTTP -// hosts: -// - "*" -// - port: -// number: 2379 # to expose internal service via external port 2379 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// httpsRedirect: true # sends 301 redirect for http requests -// - port: -// number: 443 -// name: https-443 -// protocol: HTTPS -// hosts: -// - uk.bookinfo.com -// - eu.bookinfo.com -// tls: -// mode: SIMPLE # enables HTTPS on this port -// serverCertificate: /etc/certs/servercert.pem -// privateKey: /etc/certs/privatekey.pem -// - port: -// number: 9443 -// name: https-9443 -// protocol: HTTPS -// hosts: -// - "bookinfo-namespace/*.bookinfo.com" -// tls: -// mode: SIMPLE # enables HTTPS on this port -// credentialName: bookinfo-secret # fetches certs from Kubernetes secret -// - port: -// number: 9080 -// name: http-wildcard -// protocol: HTTP -// hosts: -// - "*" -// - port: -// number: 2379 # to expose internal service via external port 2379 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// The Gateway specification above describes the L4-L6 properties of a load -// balancer. A `VirtualService` can then be bound to a gateway to control -// the forwarding of traffic arriving at a particular host or gateway port. -// -// For example, the following VirtualService splits traffic for -// `https://uk.bookinfo.com/reviews`, `https://eu.bookinfo.com/reviews`, -// `http://uk.bookinfo.com:9080/reviews`, -// `http://eu.bookinfo.com:9080/reviews` into two versions (prod and qa) of -// an internal reviews service on port 9080. In addition, requests -// containing the cookie "user: dev-123" will be sent to special port 7777 -// in the qa version. The same rule is also applicable inside the mesh for -// requests to the "reviews.prod.svc.cluster.local" service. This rule is -// applicable across ports 443, 9080. Note that `http://uk.bookinfo.com` -// gets redirected to `https://uk.bookinfo.com` (i.e. 80 redirects to 443). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-rule -// namespace: bookinfo-namespace -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// - uk.bookinfo.com -// - eu.bookinfo.com -// gateways: -// - some-config-namespace/my-gateway -// - mesh # applies to all the sidecars in the mesh -// http: -// - match: -// - headers: -// cookie: -// exact: "user=dev-123" -// route: -// - destination: -// port: -// number: 7777 -// host: reviews.qa.svc.cluster.local -// - match: -// - uri: -// prefix: /reviews/ -// route: -// - destination: -// port: -// number: 9080 # can be omitted if it's the only port for reviews -// host: reviews.prod.svc.cluster.local -// weight: 80 -// - destination: -// host: reviews.qa.svc.cluster.local -// weight: 20 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-rule -// namespace: bookinfo-namespace -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// - uk.bookinfo.com -// - eu.bookinfo.com -// gateways: -// - some-config-namespace/my-gateway -// - mesh # applies to all the sidecars in the mesh -// http: -// - match: -// - headers: -// cookie: -// exact: "user=dev-123" -// route: -// - destination: -// port: -// number: 7777 -// host: reviews.qa.svc.cluster.local -// - match: -// - uri: -// prefix: /reviews/ -// route: -// - destination: -// port: -// number: 9080 # can be omitted if it's the only port for reviews -// host: reviews.prod.svc.cluster.local -// weight: 80 -// - destination: -// host: reviews.qa.svc.cluster.local -// weight: 20 -// ``` -// {{}} -// {{}} -// -// The following VirtualService forwards traffic arriving at (external) -// port 27017 to internal Mongo server on port 5555. This rule is not -// applicable internally in the mesh as the gateway list omits the -// reserved name `mesh`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// namespace: bookinfo-namespace -// spec: -// hosts: -// - mongosvr.prod.svc.cluster.local # name of internal Mongo service -// gateways: -// - some-config-namespace/my-gateway # can omit the namespace if gateway is in same namespace as virtual service. -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.prod.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// namespace: bookinfo-namespace -// spec: -// hosts: -// - mongosvr.prod.svc.cluster.local # name of internal Mongo service -// gateways: -// - some-config-namespace/my-gateway # can omit the namespace if gateway is in same namespace as virtual service. -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.prod.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// {{}} -// -// It is possible to restrict the set of virtual services that can bind to -// a gateway server using the namespace/hostname syntax in the hosts field. -// For example, the following Gateway allows any virtual service in the ns1 -// namespace to bind to it, while restricting only the virtual service with -// foo.bar.com host in the ns2 namespace to bind to it. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "ns1/*" -// - "ns2/foo.bar.com" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-gateway -// namespace: some-config-namespace -// spec: -// selector: -// app: my-gateway-controller -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "ns1/*" -// - "ns2/foo.bar.com" -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// Gateway describes a load balancer operating at the edge of the mesh -// receiving incoming or outgoing HTTP/TCP connections. -// -// -// -// -// -message Gateway { - // A list of server specifications. - repeated Server servers = 1 [(google.api.field_behavior) = REQUIRED]; - - // One or more labels that indicate a specific set of pods/VMs - // on which this gateway configuration should be applied. - // By default workloads are searched across all namespaces based on label selectors. - // This implies that a gateway resource in the namespace "foo" can select pods in - // the namespace "bar" based on labels. - // This behavior can be controlled via the `PILOT_SCOPE_GATEWAY_TO_NAMESPACE` - // environment variable in istiod. If this variable is set - // to true, the scope of label search is restricted to the configuration - // namespace in which the the resource is present. In other words, the Gateway - // resource must reside in the same namespace as the gateway workload - // instance. - // If selector is nil, the Gateway will be applied to all workloads. - map selector = 2 [(google.api.field_behavior) = REQUIRED]; -} - -// `Server` describes the properties of the proxy on a given load balancer -// port. For example, -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-ingress -// spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-ingress -// spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// Another example -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-tcp-ingress -// spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-tcp-ingress -// spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// The following is an example of TLS configuration for port 443 -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: my-tls-ingress -// spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: my-tls-ingress -// spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert -// ``` -// {{}} -// {{}} -// -message Server { - // The Port on which the proxy should listen for incoming - // connections. - Port port = 1 [(google.api.field_behavior) = REQUIRED]; - - // The ip or the Unix domain socket to which the listener should be bound - // to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` - // (Linux abstract namespace). When using Unix domain sockets, the port - // number should be 0. - // This can be used to restrict the reachability of this server to be gateway internal only. - // This is typically used when a gateway needs to communicate to another mesh service - // e.g. publishing metrics. In such case, the server created with the - // specified bind will not be available to external gateway clients. - string bind = 4; - - // One or more hosts exposed by this gateway. - // While typically applicable to - // HTTP services, it can also be used for TCP services using TLS with SNI. - // A host is specified as a `dnsName` with an optional `namespace/` prefix. - // The `dnsName` should be specified using FQDN format, optionally including - // a wildcard character in the left-most component (e.g., `prod/*.example.com`). - // Set the `dnsName` to `*` to select all `VirtualService` hosts from the - // specified namespace (e.g.,`prod/*`). - // - // The `namespace` can be set to `*` or `.`, representing any or the current - // namespace, respectively. For example, `*/foo.example.com` selects the - // service from any available namespace while `./foo.example.com` only selects - // the service from the namespace of the sidecar. The default, if no `namespace/` - // is specified, is `*/`, that is, select services from any namespace. - // Any associated `DestinationRule` in the selected namespace will also be used. - // - // A `VirtualService` must be bound to the gateway and must have one or - // more hosts that match the hosts specified in a server. The match - // could be an exact match or a suffix match with the server's hosts. For - // example, if the server's hosts specifies `*.example.com`, a - // `VirtualService` with hosts `dev.example.com` or `prod.example.com` will - // match. However, a `VirtualService` with host `example.com` or - // `newexample.com` will not match. - // - // NOTE: Only virtual services exported to the gateway's namespace - // (e.g., `exportTo` value of `*`) can be referenced. - // Private configurations (e.g., `exportTo` set to `.`) will not be - // available. Refer to the `exportTo` setting in `VirtualService`, - // `DestinationRule`, and `ServiceEntry` configurations for details. - repeated string hosts = 2 [(google.api.field_behavior) = REQUIRED]; - - // Set of TLS related options that govern the server's behavior. Use - // these options to control if all http requests should be redirected to - // https, and the TLS modes to use. - ServerTLSSettings tls = 3; - - // The loopback IP endpoint or Unix domain socket to which traffic should - // be forwarded to by default. Format should be `127.0.0.1:PORT` or - // `unix:///path/to/socket` or `unix://@foobar` (Linux abstract namespace). - // NOT IMPLEMENTED. - // $hide_from_docs - string default_endpoint = 5; - - // An optional name of the server, when set must be unique across all servers. - // This will be used for variety of purposes like prefixing stats generated with - // this name etc. - string name = 6; -} - -// Port describes the properties of a specific port of a service. -message Port { - // A valid non-negative integer port number. - uint32 number = 1 [(google.api.field_behavior) = REQUIRED]; - - // The protocol exposed on the port. - // MUST BE one of HTTP|HTTPS|GRPC|HTTP2|MONGO|TCP|TLS. - // TLS implies the connection will be routed based on the SNI header to - // the destination without terminating the TLS connection. - string protocol = 2 [(google.api.field_behavior) = REQUIRED]; - - // Label assigned to the port. - string name = 3 [(google.api.field_behavior) = REQUIRED]; - - // The port number on the endpoint where the traffic will be - // received. Applicable only when used with ServiceEntries. - uint32 target_port = 4; -} - -message ServerTLSSettings { - // If set to true, the load balancer will send a 301 redirect for - // all http connections, asking the clients to use HTTPS. - bool https_redirect = 1; - - // TLS modes enforced by the proxy - enum TLSmode { - // The SNI string presented by the client will be used as the - // match criterion in a VirtualService TLS route to determine - // the destination service from the service registry. - PASSTHROUGH = 0; - - // Secure connections with standard TLS semantics. - SIMPLE = 1; - - // Secure connections to the downstream using mutual TLS by - // presenting server certificates for authentication. - MUTUAL = 2; - - // Similar to the passthrough mode, except servers with this TLS - // mode do not require an associated VirtualService to map from - // the SNI value to service in the registry. The destination - // details such as the service/subset/port are encoded in the - // SNI value. The proxy will forward to the upstream (Envoy) - // cluster (a group of endpoints) specified by the SNI - // value. This server is typically used to provide connectivity - // between services in disparate L3 networks that otherwise do - // not have direct connectivity between their respective - // endpoints. Use of this mode assumes that both the source and - // the destination are using Istio mTLS to secure traffic. - AUTO_PASSTHROUGH = 3; - - // Secure connections from the downstream using mutual TLS by - // presenting server certificates for authentication. Compared - // to Mutual mode, this mode uses certificates, representing - // gateway workload identity, generated automatically by Istio - // for mTLS authentication. When this mode is used, all other - // fields in `TLSOptions` should be empty. - ISTIO_MUTUAL = 4; - }; - - // Optional: Indicates whether connections to this port should be - // secured using TLS. The value of this field determines how TLS is - // enforced. - TLSmode mode = 2; - - // REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file - // holding the server-side TLS certificate to use. - string server_certificate = 3; - - // REQUIRED if mode is `SIMPLE` or `MUTUAL`. The path to the file - // holding the server's private key. - string private_key = 4; - - // REQUIRED if mode is `MUTUAL`. The path to a file containing - // certificate authority certificates to use in verifying a presented - // client side certificate. - string ca_certificates = 5; - - // For gateways running on Kubernetes, the name of the secret that - // holds the TLS certs including the CA certificates. Applicable - // only on Kubernetes. The secret (of type `generic`) should - // contain the following keys and values: `key: - // ` and `cert: `. For mutual TLS, - // `cacert: ` can be provided in the same secret or - // a separate secret named `-cacert`. - // Secret of type tls for server certificates along with - // ca.crt key for CA certificates is also supported. - // Only one of server certificates and CA certificate - // or credentialName can be specified. - string credential_name = 10; - - // A list of alternate names to verify the subject identity in the - // certificate presented by the client. - repeated string subject_alt_names = 6; - - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of - // authorized client certificates. - // Note: When both verify_certificate_hash and verify_certificate_spki - // are specified, a hash matching either value will result in the - // certificate being accepted. - repeated string verify_certificate_spki = 11; - - // An optional list of hex-encoded SHA-256 hashes of the - // authorized client certificates. Both simple and colon separated - // formats are acceptable. - // Note: When both verify_certificate_hash and verify_certificate_spki - // are specified, a hash matching either value will result in the - // certificate being accepted. - repeated string verify_certificate_hash = 12; - - // TLS protocol versions. - enum TLSProtocol { - // Automatically choose the optimal TLS version. - TLS_AUTO = 0; - - // TLS version 1.0 - TLSV1_0 = 1; - - // TLS version 1.1 - TLSV1_1 = 2; - - // TLS version 1.2 - TLSV1_2 = 3; - - // TLS version 1.3 - TLSV1_3 = 4; - } - - // Optional: Minimum TLS protocol version. - TLSProtocol min_protocol_version = 7; - - // Optional: Maximum TLS protocol version. - TLSProtocol max_protocol_version = 8; - - // Optional: If specified, only support the specified cipher list. - // Otherwise default to the default cipher list supported by Envoy. - repeated string cipher_suites = 9; -} diff --git a/proto/networking/v1beta1/proxy_config.proto b/proto/networking/v1beta1/proxy_config.proto deleted file mode 100644 index 28fa4ca..0000000 --- a/proto/networking/v1beta1/proxy_config.proto +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright 2021 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/protobuf/wrappers.proto"; -import "type/v1beta1/selector.proto"; - -// $schema: istio.networking.v1beta1.ProxyConfig -// $title: ProxyConfig -// $description: Provides configuration for individual workloads. -// $location: https://istio.io/docs/reference/config/networking/proxy-config.html -// $aliases: [/docs/reference/config/networking/v1beta1/proxy-config] -// $mode: file - -// `ProxyConfig` exposes proxy level configuration options. `ProxyConfig` can be configured on a per-workload basis, -// a per-namespace basis, or mesh-wide. `ProxyConfig` is not a required resource; there are default values in place, which are documented -// inline with each field. -// -// **NOTE**: fields in ProxyConfig are not dynamically configured - changes will require restart of workloads to take effect. -// -// For any namespace, including the root configuration namespace, it is only valid -// to have a single workload selector-less `ProxyConfig` resource. -// -// For resources with a workload selector, it is only valid to have one resource selecting -// any given workload. -// -// For mesh level configuration, put the resource in the root configuration namespace for -// your Istio installation *without* a workload selector: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: my-proxyconfig -// namespace: istio-system -// spec: -// concurrency: 0 -// image: -// type: distroless -// ``` -// -// For namespace level configuration, put the resource in the desired namespace without a workload selector: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: my-ns-proxyconfig -// namespace: user-namespace -// spec: -// concurrency: 0 -// ``` -// -// For workload level configuration, set the `selector` field on the `ProxyConfig` resource: -// -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ProxyConfig -// metadata: -// name: per-workload-proxyconfig -// namespace: example -// spec: -// selector: -// labels: -// app: ratings -// concurrency: 0 -// image: -// type: debug -// ``` -// -// If a `ProxyConfig` CR is defined that matches a workload it will merge with its `proxy.istio.io/config` annotation if present, -// with the CR taking precedence over the annotation for overlapping fields. Similarly, if a mesh wide `ProxyConfig` CR is defined and -// `meshConfig.DefaultConfig` is set, the two resources will be merged with the CR taking precedence for overlapping fields. -// -package istio.networking.v1beta1; - -option go_package= "istio.io/api/networking/v1beta1"; - -// `ProxyConfig` exposes proxy level configuration options. -// -// -// -// -message ProxyConfig { - // Optional. Selectors specify the set of pods/VMs on which this `ProxyConfig` resource should be applied. - // If not set, the `ProxyConfig` resource will be applied to all workloads in the namespace where this resource is defined. - istio.type.v1beta1.WorkloadSelector selector = 1; - - // The number of worker threads to run. - // If unset, defaults to 2. If set to 0, this will be configured to use all cores on the machine using - // CPU requests and limits to choose a value, with limits taking precedence over requests. - google.protobuf.Int32Value concurrency = 2; - - // Additional environment variables for the proxy. - // Names starting with `ISTIO_META_` will be included in the generated bootstrap configuration and sent to the XDS server. - map environment_variables = 3; - - // Specifies the details of the proxy image. - ProxyImage image = 4; -} - -// The following values are used to construct proxy image url. -// $hub/$image_name/$tag-$image_type -// example: docker.io/istio/proxyv2:1.11.1 or docker.io/istio/proxyv2:1.11.1-distroless -// This information was previously part of the Values API. -message ProxyImage { - // The image type of the image. - // Istio publishes default, debug, and distroless images. - // Other values are allowed if those image types (example: centos) are published to the specified hub. - // supported values: default, debug, distroless. - string image_type = 1; -} diff --git a/proto/networking/v1beta1/service_entry.proto b/proto/networking/v1beta1/service_entry.proto deleted file mode 100644 index 32482a7..0000000 --- a/proto/networking/v1beta1/service_entry.proto +++ /dev/null @@ -1,969 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; -import "networking/v1beta1/gateway.proto"; -import "networking/v1beta1/sidecar.proto"; -import "networking/v1beta1/workload_entry.proto"; - -// $schema: istio.networking.v1beta1.ServiceEntry -// $title: Service Entry -// $description: Configuration affecting service registry. -// $location: https://istio.io/docs/reference/config/networking/service-entry.html -// $aliases: [/docs/reference/config/networking/v1beta1/service-entry] -// $mode: none - -// `ServiceEntry` enables adding additional entries into Istio's -// internal service registry, so that auto-discovered services in the -// mesh can access/route to these manually specified services. A -// service entry describes the properties of a service (DNS name, -// VIPs, ports, protocols, endpoints). These services could be -// external to the mesh (e.g., web APIs) or mesh-internal services -// that are not part of the platform's service registry (e.g., a set -// of VMs talking to services in Kubernetes). In addition, the -// endpoints of a service entry can also be dynamically selected by -// using the `workloadSelector` field. These endpoints can be VM -// workloads declared using the `WorkloadEntry` object or Kubernetes -// pods. The ability to select both pods and VMs under a single -// service allows for migration of services from VMs to Kubernetes -// without having to change the existing DNS names associated with the -// services. -// -// The following example declares a few external APIs accessed by internal -// applications over HTTPS. The sidecar inspects the SNI value in the -// ClientHello message to route to the appropriate external service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-https -// spec: -// hosts: -// - api.dropboxapi.com -// - www.googleapis.com -// - api.facebook.com -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-https -// spec: -// hosts: -// - api.dropboxapi.com -// - www.googleapis.com -// - api.facebook.com -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// The following configuration adds a set of MongoDB instances running on -// unmanaged VMs to Istio's registry, so that these services can be treated -// as any other service in the mesh. The associated DestinationRule is used -// to initiate mTLS connections to the database instances. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-mongocluster -// spec: -// hosts: -// - mymongodb.somedomain # not used -// addresses: -// - 192.192.192.192/24 # VIPs -// ports: -// - number: 27018 -// name: mongodb -// protocol: MONGO -// location: MESH_INTERNAL -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-mongocluster -// spec: -// hosts: -// - mymongodb.somedomain # not used -// addresses: -// - 192.192.192.192/24 # VIPs -// ports: -// - number: 27018 -// name: mongodb -// protocol: MONGO -// location: MESH_INTERNAL -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// ``` -// {{}} -// {{}} -// -// and the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: mtls-mongocluster -// spec: -// host: mymongodb.somedomain -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: mtls-mongocluster -// spec: -// host: mymongodb.somedomain -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem -// ``` -// {{}} -// {{}} -// -// The following example uses a combination of service entry and TLS -// routing in a virtual service to steer traffic based on the SNI value to -// an internal egress firewall. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-redirect -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: NONE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-redirect -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// location: MESH_EXTERNAL -// ports: -// - number: 443 -// name: https -// protocol: TLS -// resolution: NONE -// ``` -// {{}} -// {{}} -// -// And the associated VirtualService to route based on the SNI value. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: tls-routing -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// tls: -// - match: -// - sniHosts: -// - wikipedia.org -// - "*.wikipedia.org" -// route: -// - destination: -// host: internal-egress-firewall.ns1.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: tls-routing -// spec: -// hosts: -// - wikipedia.org -// - "*.wikipedia.org" -// tls: -// - match: -// - sniHosts: -// - wikipedia.org -// - "*.wikipedia.org" -// route: -// - destination: -// host: internal-egress-firewall.ns1.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// The virtual service with TLS match serves to override the default SNI -// match. In the absence of a virtual service, traffic will be forwarded to -// the wikipedia domains. -// -// The following example demonstrates the use of a dedicated egress gateway -// through which all external service traffic is forwarded. -// The 'exportTo' field allows for control over the visibility of a service -// declaration to other namespaces in the mesh. By default, a service is exported -// to all namespaces. The following example restricts the visibility to the -// current namespace, represented by ".", so that it cannot be used by other -// namespaces. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-httpbin -// namespace : egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "." -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-httpbin -// namespace : egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "." -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// Define a gateway to handle all egress traffic. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Gateway -// metadata: -// name: istio-egressgateway -// namespace: istio-system -// spec: -// selector: -// istio: egressgateway -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Gateway -// metadata: -// name: istio-egressgateway -// namespace: istio-system -// spec: -// selector: -// istio: egressgateway -// servers: -// - port: -// number: 80 -// name: http -// protocol: HTTP -// hosts: -// - "*" -// ``` -// {{}} -// {{}} -// -// And the associated `VirtualService` to route from the sidecar to the -// gateway service (`istio-egressgateway.istio-system.svc.cluster.local`), as -// well as route from the gateway to the external service. Note that the -// virtual service is exported to all namespaces enabling them to route traffic -// through the gateway to the external service. Forcing traffic to go through -// a managed middle proxy like this is a common practice. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: gateway-routing -// namespace: egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "*" -// gateways: -// - mesh -// - istio-egressgateway -// http: -// - match: -// - port: 80 -// gateways: -// - mesh -// route: -// - destination: -// host: istio-egressgateway.istio-system.svc.cluster.local -// - match: -// - port: 80 -// gateways: -// - istio-egressgateway -// route: -// - destination: -// host: example.com -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: gateway-routing -// namespace: egress -// spec: -// hosts: -// - example.com -// exportTo: -// - "*" -// gateways: -// - mesh -// - istio-egressgateway -// http: -// - match: -// - port: 80 -// gateways: -// - mesh -// route: -// - destination: -// host: istio-egressgateway.istio-system.svc.cluster.local -// - match: -// - port: 80 -// gateways: -// - istio-egressgateway -// route: -// - destination: -// host: example.com -// ``` -// {{}} -// {{}} -// -// The following example demonstrates the use of wildcards in the hosts for -// external services. If the connection has to be routed to the IP address -// requested by the application (i.e. application resolves DNS and attempts -// to connect to a specific IP), the discovery mode must be set to `NONE`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-wildcard-example -// spec: -// hosts: -// - "*.bar.com" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: NONE -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-wildcard-example -// spec: -// hosts: -// - "*.bar.com" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: NONE -// ``` -// {{}} -// {{}} -// -// The following example demonstrates a service that is available via a -// Unix Domain Socket on the host of the client. The resolution must be -// set to STATIC to use Unix address endpoints. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: unix-domain-socket-example -// spec: -// hosts: -// - "example.unix.local" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: unix:///var/run/example/socket -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: unix-domain-socket-example -// spec: -// hosts: -// - "example.unix.local" -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: unix:///var/run/example/socket -// ``` -// {{}} -// {{}} -// -// For HTTP-based services, it is possible to create a `VirtualService` -// backed by multiple DNS addressable endpoints. In such a scenario, the -// application can use the `HTTP_PROXY` environment variable to transparently -// reroute API calls for the `VirtualService` to a chosen backend. For -// example, the following configuration creates a non-existent external -// service called foo.bar.com backed by three domains: us.foo.bar.com:8080, -// uk.foo.bar.com:9080, and in.foo.bar.com:7080 -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-dns -// spec: -// hosts: -// - foo.bar.com -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// endpoints: -// - address: us.foo.bar.com -// ports: -// http: 8080 -// - address: uk.foo.bar.com -// ports: -// http: 9080 -// - address: in.foo.bar.com -// ports: -// http: 7080 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-dns -// spec: -// hosts: -// - foo.bar.com -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: DNS -// endpoints: -// - address: us.foo.bar.com -// ports: -// http: 8080 -// - address: uk.foo.bar.com -// ports: -// http: 9080 -// - address: in.foo.bar.com -// ports: -// http: 7080 -// ``` -// {{}} -// {{}} -// -// With `HTTP_PROXY=http://localhost/`, calls from the application to -// `http://foo.bar.com` will be load balanced across the three domains -// specified above. In other words, a call to `http://foo.bar.com/baz` would -// be translated to `http://uk.foo.bar.com/baz`. -// -// The following example illustrates the usage of a `ServiceEntry` -// containing a subject alternate name -// whose format conforms to the [SPIFFE standard](https://github.com/spiffe/spiffe/blob/master/standards/SPIFFE-ID.md): -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: httpbin -// namespace : httpbin-ns -// spec: -// hosts: -// - example.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// subjectAltNames: -// - "spiffe://cluster.local/ns/httpbin-ns/sa/httpbin-service-account" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: httpbin -// namespace : httpbin-ns -// spec: -// hosts: -// - example.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// endpoints: -// - address: 2.2.2.2 -// - address: 3.3.3.3 -// subjectAltNames: -// - "spiffe://cluster.local/ns/httpbin-ns/sa/httpbin-service-account" -// ``` -// {{}} -// {{}} -// -// The following example demonstrates the use of `ServiceEntry` with a -// `workloadSelector` to handle the migration of a service -// `details.bookinfo.com` from VMs to Kubernetes. The service has two -// VM-based instances with sidecars as well as a set of Kubernetes -// pods managed by a standard deployment object. Consumers of this -// service in the mesh will be automatically load balanced across the -// VMs and Kubernetes. VM for the `details.bookinfo.com` -// service. This VM has sidecar installed and bootstrapped using the -// `details-legacy` service account. The sidecar receives HTTP traffic -// on port 80 (wrapped in istio mutual TLS) and forwards it to the -// application on the localhost on the same port. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-vm-1 -// spec: -// serviceAccount: details -// address: 2.2.2.2 -// labels: -// app: details -// instance-id: vm1 -// --- -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-vm-2 -// spec: -// serviceAccount: details -// address: 3.3.3.3 -// labels: -// app: details -// instance-id: vm2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-vm-1 -// spec: -// serviceAccount: details -// address: 2.2.2.2 -// labels: -// app: details -// instance-id: vm1 -// --- -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-vm-2 -// spec: -// serviceAccount: details -// address: 3.3.3.3 -// labels: -// app: details -// instance-id: vm2 -// ``` -// {{}} -// {{}} -// -// Assuming there is also a Kubernetes deployment with pod labels -// `app: details` using the same service account `details`, the -// following service entry declares a service spanning both VMs and -// Kubernetes: -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// workloadSelector: -// labels: -// app: details -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// resolution: STATIC -// workloadSelector: -// labels: -// app: details -// ``` -// {{}} -// {{}} -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// ServiceEntry enables adding additional entries into Istio's internal -// service registry. -// -// -// -// -// -message ServiceEntry { - // The hosts associated with the ServiceEntry. Could be a DNS - // name with wildcard prefix. - // - // 1. The hosts field is used to select matching hosts in VirtualServices and DestinationRules. - // 2. For HTTP traffic the HTTP Host/Authority header will be matched against the hosts field. - // 3. For HTTPs or TLS traffic containing Server Name Indication (SNI), the SNI value - // will be matched against the hosts field. - // - // **NOTE 1:** When resolution is set to type DNS and no endpoints - // are specified, the host field will be used as the DNS name of the - // endpoint to route traffic to. - // - // **NOTE 2:** If the hostname matches with the name of a service - // from another service registry such as Kubernetes that also - // supplies its own set of endpoints, the ServiceEntry will be - // treated as a decorator of the existing Kubernetes - // service. Properties in the service entry will be added to the - // Kubernetes service if applicable. Currently, the only the - // following additional properties will be considered by `istiod`: - // - // 1. subjectAltNames: In addition to verifying the SANs of the - // service accounts associated with the pods of the service, the - // SANs specified here will also be verified. - // - repeated string hosts = 1 [(google.api.field_behavior) = REQUIRED]; - - // The virtual IP addresses associated with the service. Could be CIDR - // prefix. For HTTP traffic, generated route configurations will include http route - // domains for both the `addresses` and `hosts` field values and the destination will - // be identified based on the HTTP Host/Authority header. - // If one or more IP addresses are specified, - // the incoming traffic will be identified as belonging to this service - // if the destination IP matches the IP/CIDRs specified in the addresses - // field. If the Addresses field is empty, traffic will be identified - // solely based on the destination port. In such scenarios, the port on - // which the service is being accessed must not be shared by any other - // service in the mesh. In other words, the sidecar will behave as a - // simple TCP proxy, forwarding incoming traffic on a specified port to - // the specified destination endpoint IP/host. Unix domain socket - // addresses are not supported in this field. - repeated string addresses = 2; - - // The ports associated with the external service. If the - // Endpoints are Unix domain socket addresses, there must be exactly one - // port. - repeated Port ports = 3 [(google.api.field_behavior) = REQUIRED]; - - // Location specifies whether the service is part of Istio mesh or - // outside the mesh. Location determines the behavior of several - // features, such as service-to-service mTLS authentication, policy - // enforcement, etc. When communicating with services outside the mesh, - // Istio's mTLS authentication is disabled, and policy enforcement is - // performed on the client-side as opposed to server-side. - enum Location { - // Signifies that the service is external to the mesh. Typically used - // to indicate external services consumed through APIs. - MESH_EXTERNAL = 0; - - // Signifies that the service is part of the mesh. Typically used to - // indicate services added explicitly as part of expanding the service - // mesh to include unmanaged infrastructure (e.g., VMs added to a - // Kubernetes based service mesh). - MESH_INTERNAL = 1; - }; - - // Specify whether the service should be considered external to the mesh - // or part of the mesh. - Location location = 4; - - // Resolution determines how the proxy will resolve the IP addresses of - // the network endpoints associated with the service, so that it can - // route to one of them. The resolution mode specified here has no impact - // on how the application resolves the IP address associated with the - // service. The application may still have to use DNS to resolve the - // service to an IP so that the outbound traffic can be captured by the - // Proxy. Alternatively, for HTTP services, the application could - // directly communicate with the proxy (e.g., by setting HTTP_PROXY) to - // talk to these services. - enum Resolution { - // Assume that incoming connections have already been resolved (to a - // specific destination IP address). Such connections are typically - // routed via the proxy using mechanisms such as IP table REDIRECT/ - // eBPF. After performing any routing related transformations, the - // proxy will forward the connection to the IP address to which the - // connection was bound. - NONE = 0; - - // Use the static IP addresses specified in endpoints (see below) as the - // backing instances associated with the service. - STATIC = 1; - - // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. If no endpoints are specified, the proxy - // will resolve the DNS address specified in the hosts field, if - // wildcards are not used. If endpoints are specified, the DNS - // addresses specified in the endpoints will be resolved to determine - // the destination IP address. DNS resolution cannot be used with Unix - // domain socket endpoints. - DNS = 2; - - // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the - // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections - // made to hosts will be retained even if DNS records change frequently - // eliminating draining connection pools and connection cycling. - // This is best suited for large web scale services that - // must be accessed via DNS. The proxy will resolve the DNS address - // specified in the hosts field, if wildcards are not used. DNS resolution - // cannot be used with Unix domain socket endpoints. - DNS_ROUND_ROBIN = 3; - }; - - // Service discovery mode for the hosts. Care must be taken - // when setting the resolution mode to NONE for a TCP port without - // accompanying IP addresses. In such cases, traffic to any IP on - // said port will be allowed (i.e. `0.0.0.0:`). - Resolution resolution = 5 [(google.api.field_behavior) = REQUIRED]; - - // One or more endpoints associated with the service. Only one of - // `endpoints` or `workloadSelector` can be specified. - repeated WorkloadEntry endpoints = 6; - - // Applicable only for MESH_INTERNAL services. Only one of - // `endpoints` or `workloadSelector` can be specified. Selects one - // or more Kubernetes pods or VM workloads (specified using - // `WorkloadEntry`) based on their labels. The `WorkloadEntry` object - // representing the VMs should be defined in the same namespace as - // the ServiceEntry. - WorkloadSelector workload_selector = 9; - - // A list of namespaces to which this service is exported. Exporting a service - // allows it to be used by sidecars, gateways and virtual services defined in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of services across - // namespace boundaries. - // - // If no namespaces are specified then the service is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the service is declared in. Similarly the value "*" is reserved and - // defines an export to all namespaces. - // - // For a Kubernetes Service, the equivalent effect can be achieved by setting - // the annotation "networking.istio.io/exportTo" to a comma-separated list - // of namespace names. - repeated string export_to = 7; - - // If specified, the proxy will verify that the server certificate's - // subject alternate name matches one of the specified values. - // - // NOTE: When using the workloadEntry with workloadSelectors, the - // service account specified in the workloadEntry will also be used - // to derive the additional subject alternate names that should be - // verified. - repeated string subject_alt_names = 8; -} diff --git a/proto/networking/v1beta1/sidecar.proto b/proto/networking/v1beta1/sidecar.proto deleted file mode 100644 index 06aa109..0000000 --- a/proto/networking/v1beta1/sidecar.proto +++ /dev/null @@ -1,638 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; -import "networking/v1beta1/gateway.proto"; -import "networking/v1beta1/virtual_service.proto"; - -// $schema: istio.networking.v1beta1.Sidecar -// $title: Sidecar -// $description: Configuration affecting network reachability of a sidecar. -// $location: https://istio.io/docs/reference/config/networking/sidecar.html -// $aliases: [/docs/reference/config/networking/v1beta1/sidecar] -// $mode: none - -// `Sidecar` describes the configuration of the sidecar proxy that mediates -// inbound and outbound communication to the workload instance it is attached to. By -// default, Istio will program all sidecar proxies in the mesh with the -// necessary configuration required to reach every workload instance in the mesh, as -// well as accept traffic on all the ports associated with the -// workload. The `Sidecar` configuration provides a way to fine tune the set of -// ports, protocols that the proxy will accept when forwarding traffic to -// and from the workload. In addition, it is possible to restrict the set -// of services that the proxy can reach when forwarding outbound traffic -// from workload instances. -// -// Services and configuration in a mesh are organized into one or more -// namespaces (e.g., a Kubernetes namespace or a CF org/space). A `Sidecar` -// configuration in a namespace will apply to one or more workload instances in the same -// namespace, selected using the `workloadSelector` field. In the absence of a -// `workloadSelector`, it will apply to all workload instances in the same -// namespace. When determining the `Sidecar` configuration to be applied to a -// workload instance, preference will be given to the resource with a -// `workloadSelector` that selects this workload instance, over a `Sidecar` configuration -// without any `workloadSelector`. -// -// **NOTE 1**: *_Each namespace can have only one `Sidecar` -// configuration without any `workloadSelector`_ that specifies the -// default for all pods in that namespace*. It is recommended to use -// the name `default` for the namespace-wide sidecar. The behavior of -// the system is undefined if more than one selector-less `Sidecar` -// configurations exist in a given namespace. The behavior of the -// system is undefined if two or more `Sidecar` configurations with a -// `workloadSelector` select the same workload instance. -// -// **NOTE 2**: *_A `Sidecar` configuration in the `MeshConfig` -// [root namespace](https://istio.io/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig) -// will be applied by default to all namespaces without a `Sidecar` -// configuration_*. This global default `Sidecar` configuration should not have -// any `workloadSelector`. -// -// The example below declares a global default `Sidecar` configuration -// in the root namespace called `istio-config`, that configures -// sidecars in all namespaces to allow egress traffic only to other -// workloads in the same namespace as well as to services in the -// `istio-system` namespace. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: default -// namespace: istio-config -// spec: -// egress: -// - hosts: -// - "./*" -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: default -// namespace: istio-config -// spec: -// egress: -// - hosts: -// - "./*" -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// The example below declares a `Sidecar` configuration in the -// `prod-us1` namespace that overrides the global default defined -// above, and configures the sidecars in the namespace to allow egress -// traffic to public services in the `prod-us1`, `prod-apis`, and the -// `istio-system` namespaces. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: default -// namespace: prod-us1 -// spec: -// egress: -// - hosts: -// - "prod-us1/*" -// - "prod-apis/*" -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: default -// namespace: prod-us1 -// spec: -// egress: -// - hosts: -// - "prod-us1/*" -// - "prod-apis/*" -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// The following example declares a `Sidecar` configuration in the -// `prod-us1` namespace for all pods with labels `app: ratings` -// belonging to the `ratings.prod-us1` service. The workload accepts -// inbound HTTP traffic on port 9080. The traffic is then forwarded to -// the attached workload instance listening on a Unix domain -// socket. In the egress direction, in addition to the `istio-system` -// namespace, the sidecar proxies only HTTP traffic bound for port -// 9080 for services in the `prod-us1` namespace. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: ratings -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: ratings -// ingress: -// - port: -// number: 9080 -// protocol: HTTP -// name: somename -// defaultEndpoint: unix:///var/run/someuds.sock -// egress: -// - port: -// number: 9080 -// protocol: HTTP -// name: egresshttp -// hosts: -// - "prod-us1/*" -// - hosts: -// - "istio-system/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: ratings -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: ratings -// ingress: -// - port: -// number: 9080 -// protocol: HTTP -// name: somename -// defaultEndpoint: unix:///var/run/someuds.sock -// egress: -// - port: -// number: 9080 -// protocol: HTTP -// name: egresshttp -// hosts: -// - "prod-us1/*" -// - hosts: -// - "istio-system/*" -// ``` -// {{}} -// {{}} -// -// If the workload is deployed without IPTables-based traffic capture, -// the `Sidecar` configuration is the only way to configure the ports -// on the proxy attached to the workload instance. The following -// example declares a `Sidecar` configuration in the `prod-us1` -// namespace for all pods with labels `app: productpage` belonging to -// the `productpage.prod-us1` service. Assuming that these pods are -// deployed without IPtable rules (i.e. the `istio-init` container) -// and the proxy metadata `ISTIO_META_INTERCEPTION_MODE` is set to -// `NONE`, the specification, below, allows such pods to receive HTTP -// traffic on port 9080 (wrapped inside Istio mutual TLS) and forward -// it to the application listening on `127.0.0.1:8080`. It also allows -// the application to communicate with a backing MySQL database on -// `127.0.0.1:3306`, that then gets proxied to the externally hosted -// MySQL service at `mysql.foo.com:3306`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: no-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - port: -// number: 9080 # binds to proxy_instance_ip:9080 (0.0.0.0:9080, if no unicast IP is available for the instance) -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE # not needed if metadata is set for entire proxy -// egress: -// - port: -// number: 3306 -// protocol: MYSQL -// name: egressmysql -// captureMode: NONE # not needed if metadata is set for entire proxy -// bind: 127.0.0.1 -// hosts: -// - "*/mysql.foo.com" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: no-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - port: -// number: 9080 # binds to proxy_instance_ip:9080 (0.0.0.0:9080, if no unicast IP is available for the instance) -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE # not needed if metadata is set for entire proxy -// egress: -// - port: -// number: 3306 -// protocol: MYSQL -// name: egressmysql -// captureMode: NONE # not needed if metadata is set for entire proxy -// bind: 127.0.0.1 -// hosts: -// - "*/mysql.foo.com" -// ``` -// {{}} -// {{}} -// -// And the associated service entry for routing to `mysql.foo.com:3306` -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-mysql -// namespace: ns1 -// spec: -// hosts: -// - mysql.foo.com -// ports: -// - number: 3306 -// name: mysql -// protocol: MYSQL -// location: MESH_EXTERNAL -// resolution: DNS -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-mysql -// namespace: ns1 -// spec: -// hosts: -// - mysql.foo.com -// ports: -// - number: 3306 -// name: mysql -// protocol: MYSQL -// location: MESH_EXTERNAL -// resolution: DNS -// ``` -// {{}} -// {{}} -// -// It is also possible to mix and match traffic capture modes in a single -// proxy. For example, consider a setup where internal services are on the -// `192.168.0.0/16` subnet. So, IP tables are setup on the VM to capture all -// outbound traffic on `192.168.0.0/16` subnet. Assume that the VM has an -// additional network interface on `172.16.0.0/16` subnet for inbound -// traffic. The following `Sidecar` configuration allows the VM to expose a -// listener on `172.16.1.32:80` (the VM's IP) for traffic arriving from the -// `172.16.0.0/16` subnet. -// -// **NOTE**: The `ISTIO_META_INTERCEPTION_MODE` metadata on the -// proxy in the VM should contain `REDIRECT` or `TPROXY` as its value, -// implying that IP tables based traffic capture is active. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: Sidecar -// metadata: -// name: partial-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - bind: 172.16.1.32 -// port: -// number: 80 # binds to 172.16.1.32:80 -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE -// egress: -// # use the system detected defaults -// # sets up configuration to handle outbound traffic to services -// # in 192.168.0.0/16 subnet, based on information provided by the -// # service registry -// - captureMode: IPTABLES -// hosts: -// - "*/*" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: Sidecar -// metadata: -// name: partial-ip-tables -// namespace: prod-us1 -// spec: -// workloadSelector: -// labels: -// app: productpage -// ingress: -// - bind: 172.16.1.32 -// port: -// number: 80 # binds to 172.16.1.32:80 -// protocol: HTTP -// name: somename -// defaultEndpoint: 127.0.0.1:8080 -// captureMode: NONE -// egress: -// # use the system detected defaults -// # sets up configuration to handle outbound traffic to services -// # in 192.168.0.0/16 subnet, based on information provided by the -// # service registry -// - captureMode: IPTABLES -// hosts: -// - "*/*" -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// `Sidecar` describes the configuration of the sidecar proxy that mediates -// inbound and outbound communication of the workload instance to which it is -// attached. -// -// -// -// -// -message Sidecar { - // Criteria used to select the specific set of pods/VMs on which this - // `Sidecar` configuration should be applied. If omitted, the `Sidecar` - // configuration will be applied to all workload instances in the same namespace. - WorkloadSelector workload_selector = 1; - - // Ingress specifies the configuration of the sidecar for processing - // inbound traffic to the attached workload instance. If omitted, Istio will - // automatically configure the sidecar based on the information about the workload - // obtained from the orchestration platform (e.g., exposed ports, services, - // etc.). If specified, inbound ports are configured if and only if the - // workload instance is associated with a service. - repeated IstioIngressListener ingress = 2; - - // Egress specifies the configuration of the sidecar for processing - // outbound traffic from the attached workload instance to other - // services in the mesh. If not specified, inherits the system - // detected defaults from the namespace-wide or the global default Sidecar. - repeated IstioEgressListener egress = 3; - - // Configuration for the outbound traffic policy. If your - // application uses one or more external services that are not known - // apriori, setting the policy to `ALLOW_ANY` will cause the - // sidecars to route any unknown traffic originating from the - // application to its requested destination. If not specified, - // inherits the system detected defaults from the namespace-wide or - // the global default Sidecar. - OutboundTrafficPolicy outbound_traffic_policy = 4; - - reserved "localhost"; - reserved 5, 6; -} - -// `IstioIngressListener` specifies the properties of an inbound -// traffic listener on the sidecar proxy attached to a workload instance. -message IstioIngressListener { - // The port associated with the listener. - Port port = 1 [(google.api.field_behavior) = REQUIRED]; - - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in - // the bind field for ingress listeners. If omitted, Istio will - // automatically configure the defaults based on imported services - // and the workload instances to which this configuration is applied - // to. - string bind = 2; - - // The captureMode option dictates how traffic to the listener is - // expected to be captured (or not). - CaptureMode capture_mode = 3; - - // The IP endpoint or Unix domain socket to which - // traffic should be forwarded to. This configuration can be used to - // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` - // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` - string default_endpoint = 4 [(google.api.field_behavior) = REQUIRED]; - - reserved "localhost_client_tls"; - reserved 5, 6; - - // Set of TLS related options that will enable TLS termination on the - // sidecar for requests originating from outside the mesh. - // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs - ServerTLSSettings tls = 7; -} - -// `IstioEgressListener` specifies the properties of an outbound traffic -// listener on the sidecar proxy attached to a workload instance. -message IstioEgressListener { - // The port associated with the listener. If using Unix domain socket, - // use 0 as the port number, with a valid protocol. The port if - // specified, will be used as the default destination port associated - // with the imported hosts. If the port is omitted, Istio will infer the - // listener ports based on the imported hosts. Note that when multiple - // egress listeners are specified, where one or more listeners have - // specific ports while others have no port, the hosts exposed on a - // listener port will be based on the listener with the most specific - // port. - Port port = 1; - - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or - // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If - // omitted, Istio will automatically configure the defaults based on imported - // services, the workload instances to which this configuration is applied to and - // the captureMode. If captureMode is `NONE`, bind will default to - // 127.0.0.1. - string bind = 2; - - // When the bind address is an IP, the captureMode option dictates - // how traffic to the listener is expected to be captured (or not). - // captureMode must be DEFAULT or `NONE` for Unix domain socket binds. - CaptureMode capture_mode = 3; - - // One or more service hosts exposed by the listener - // in `namespace/dnsName` format. Services in the specified namespace - // matching `dnsName` will be exposed. - // The corresponding service can be a service in the service registry - // (e.g., a Kubernetes or cloud foundry service) or a service specified - // using a `ServiceEntry` or `VirtualService` configuration. Any - // associated `DestinationRule` in the same namespace will also be used. - // - // The `dnsName` should be specified using FQDN format, optionally including - // a wildcard character in the left-most component (e.g., `prod/*.example.com`). - // Set the `dnsName` to `*` to select all services from the specified namespace - // (e.g., `prod/*`). - // - // The `namespace` can be set to `*`, `.`, or `~`, representing any, the current, - // or no namespace, respectively. For example, `*/foo.example.com` selects the - // service from any available namespace while `./foo.example.com` only selects - // the service from the namespace of the sidecar. If a host is set to `*/*`, - // Istio will configure the sidecar to be able to reach every service in the - // mesh that is exported to the sidecar's namespace. The value `~/*` can be used - // to completely trim the configuration for sidecars that simply receive traffic - // and respond, but make no outbound connections of their own. - // - // NOTE: Only services and configuration artifacts exported to the sidecar's - // namespace (e.g., `exportTo` value of `*`) can be referenced. - // Private configurations (e.g., `exportTo` set to `.`) will - // not be available. Refer to the `exportTo` setting in `VirtualService`, - // `DestinationRule`, and `ServiceEntry` configurations for details. - repeated string hosts = 4 [(google.api.field_behavior) = REQUIRED]; - - reserved "localhost_server_tls"; - reserved 5, 6; -} - -// `WorkloadSelector` specifies the criteria used to determine if the -// `Gateway`, `Sidecar`, `EnvoyFilter`, or `ServiceEntry` -// configuration can be applied to a proxy. The matching criteria -// includes the metadata associated with a proxy, workload instance -// info such as labels attached to the pod/VM, or any other info that -// the proxy provides to Istio during the initial handshake. If -// multiple conditions are specified, all conditions need to match in -// order for the workload instance to be selected. Currently, only -// label based selection mechanism is supported. -message WorkloadSelector { - // One or more labels that indicate a specific set of pods/VMs - // on which the configuration should be applied. The scope of - // label search is restricted to the configuration namespace in which the - // the resource is present. - map labels = 1 [(google.api.field_behavior) = REQUIRED]; - - // $hide_from_docs - // other forms of identification supplied by the proxy - // when connecting to Pilot, such as X509 fields, tenant IDs, JWT, - // etc. This has nothing to do with the request level authN etc. -} - -// `OutboundTrafficPolicy` sets the default behavior of the sidecar for -// handling outbound traffic from the application. -// If your application uses one or more external -// services that are not known apriori, setting the policy to `ALLOW_ANY` -// will cause the sidecars to route any unknown traffic originating from -// the application to its requested destination. Users are strongly -// encouraged to use `ServiceEntry` configurations to explicitly declare any external -// dependencies, instead of using `ALLOW_ANY`, so that traffic to these -// services can be monitored. -message OutboundTrafficPolicy { - enum Mode { - // Outbound traffic will be restricted to services defined in the - // service registry as well as those defined through `ServiceEntry` configurations. - REGISTRY_ONLY = 0; - // Outbound traffic to unknown destinations will be allowed, in case - // there are no services or `ServiceEntry` configurations for the destination port. - ALLOW_ANY = 1; - } - Mode mode = 1; - - // Specifies the details of the egress proxy to which unknown - // traffic should be forwarded to from the sidecar. Valid only if - // the mode is set to ALLOW_ANY. If not specified when the mode is - // ALLOW_ANY, the sidecar will send the unknown traffic directly to - // the IP requested by the application. - // - // ** NOTE 1**: The specified egress host must be imported in the - // egress section for the traffic forwarding to work. - // - // ** NOTE 2**: An Envoy based egress gateway is unlikely to be able - // to handle plain text TCP connections forwarded from the sidecar. - // Envoy's dynamic forward proxy can handle only HTTP and TLS - // connections. - // $hide_from_docs - Destination egress_proxy = 2; -} - - -// `CaptureMode` describes how traffic to a listener is expected to be -// captured. Applicable only when the listener is bound to an IP. -enum CaptureMode { - // The default capture mode defined by the environment. - DEFAULT = 0; - - // Capture traffic using IPtables redirection. - IPTABLES = 1; - - // No traffic capture. When used in an egress listener, the application is - // expected to explicitly communicate with the listener port or Unix - // domain socket. When used in an ingress listener, care needs to be taken - // to ensure that the listener port is not in use by other processes on - // the host. - NONE = 2; -} diff --git a/proto/networking/v1beta1/virtual_service.proto b/proto/networking/v1beta1/virtual_service.proto deleted file mode 100644 index 6d7e6ea..0000000 --- a/proto/networking/v1beta1/virtual_service.proto +++ /dev/null @@ -1,1874 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; -import "google/protobuf/duration.proto"; -import "google/protobuf/wrappers.proto"; - -// $schema: istio.networking.v1beta1.VirtualService -// $title: Virtual Service -// $description: Configuration affecting label/content routing, sni routing, etc. -// $location: https://istio.io/docs/reference/config/networking/virtual-service.html -// $aliases: [/docs/reference/config/networking/v1beta1/virtual-service] -// $mode: none - -// Configuration affecting traffic routing. Here are a few terms useful to define -// in the context of traffic routing. -// -// `Service` a unit of application behavior bound to a unique name in a -// service registry. Services consist of multiple network *endpoints* -// implemented by workload instances running on pods, containers, VMs etc. -// -// `Service versions (a.k.a. subsets)` - In a continuous deployment -// scenario, for a given service, there can be distinct subsets of -// instances running different variants of the application binary. These -// variants are not necessarily different API versions. They could be -// iterative changes to the same service, deployed in different -// environments (prod, staging, dev, etc.). Common scenarios where this -// occurs include A/B testing, canary rollouts, etc. The choice of a -// particular version can be decided based on various criterion (headers, -// url, etc.) and/or by weights assigned to each version. Each service has -// a default version consisting of all its instances. -// -// `Source` - A downstream client calling a service. -// -// `Host` - The address used by a client when attempting to connect to a -// service. -// -// `Access model` - Applications address only the destination service -// (Host) without knowledge of individual service versions (subsets). The -// actual choice of the version is determined by the proxy/sidecar, enabling the -// application code to decouple itself from the evolution of dependent -// services. -// -// A `VirtualService` defines a set of traffic routing rules to apply when a host is -// addressed. Each routing rule defines matching criteria for traffic of a specific -// protocol. If the traffic is matched, then it is sent to a named destination service -// (or subset/version of it) defined in the registry. -// -// The source of traffic can also be matched in a routing rule. This allows routing -// to be customized for specific client contexts. -// -// The following example on Kubernetes, routes all HTTP traffic by default to -// pods of the reviews service with label "version: v1". In addition, -// HTTP requests with path starting with /wpcatalog/ or /consumercatalog/ will -// be rewritten to /newcatalog and sent to pods with label "version: v2". -// -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - name: "reviews-v2-routes" -// match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// - name: "reviews-v1-route" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - name: "reviews-v2-routes" -// match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// - name: "reviews-v1-route" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -// A subset/version of a route destination is identified with a reference -// to a named service subset which must be declared in a corresponding -// `DestinationRule`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// Configuration affecting traffic routing. -// -// -// -// -// -message VirtualService { - // The destination hosts to which traffic is being sent. Could - // be a DNS name with wildcard prefix or an IP address. Depending on the - // platform, short-names can also be used instead of a FQDN (i.e. has no - // dots in the name). In such a scenario, the FQDN of the host would be - // derived based on the underlying platform. - // - // A single VirtualService can be used to describe all the traffic - // properties of the corresponding hosts, including those for multiple - // HTTP and TCP ports. Alternatively, the traffic properties of a host - // can be defined using more than one VirtualService, with certain - // caveats. Refer to the - // [Operations Guide](https://istio.io/docs/ops/best-practices/traffic-management/#split-virtual-services) - // for details. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews" will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. _To avoid - // potential misconfigurations, it is recommended to always use fully - // qualified domain names over short names._ - // - // The hosts field applies to both HTTP and TCP services. Service inside - // the mesh, i.e., those found in the service registry, must always be - // referred to using their alphanumeric names. IP addresses are allowed - // only for services defined via the Gateway. - // - // *Note*: It must be empty for a delegate VirtualService. - repeated string hosts = 1; - - // The names of gateways and sidecars that should apply these routes. - // Gateways in other namespaces may be referred to by - // `/`; specifying a gateway with no - // namespace qualifier is the same as specifying the VirtualService's - // namespace. A single VirtualService is used for sidecars inside the mesh as - // well as for one or more gateways. The selection condition imposed by this - // field can be overridden using the source field in the match conditions - // of protocol-specific routes. The reserved word `mesh` is used to imply - // all the sidecars in the mesh. When this field is omitted, the default - // gateway (`mesh`) will be used, which would apply the rule to all - // sidecars in the mesh. If a list of gateway names is provided, the - // rules will apply only to the gateways. To apply the rules to both - // gateways and sidecars, specify `mesh` as one of the gateway names. - repeated string gateways = 2; - - // An ordered list of route rules for HTTP traffic. HTTP routes will be - // applied to platform service ports named 'http-*'/'http2-*'/'grpc-*', gateway - // ports with protocol HTTP/HTTP2/GRPC/ TLS-terminated-HTTPS and service - // entry ports using HTTP/HTTP2/GRPC protocols. The first rule matching - // an incoming request is used. - repeated HTTPRoute http = 3; - - // An ordered list of route rule for non-terminated TLS & HTTPS - // traffic. Routing is typically performed using the SNI value presented - // by the ClientHello message. TLS routes will be applied to platform - // service ports named 'https-*', 'tls-*', unterminated gateway ports using - // HTTPS/TLS protocols (i.e. with "passthrough" TLS mode) and service - // entry ports using HTTPS/TLS protocols. The first rule matching an - // incoming request is used. NOTE: Traffic 'https-*' or 'tls-*' ports - // without associated virtual service will be treated as opaque TCP - // traffic. - repeated TLSRoute tls = 5; - - // An ordered list of route rules for opaque TCP traffic. TCP routes will - // be applied to any port that is not a HTTP or TLS port. The first rule - // matching an incoming request is used. - repeated TCPRoute tcp = 4; - - // A list of namespaces to which this virtual service is exported. Exporting a - // virtual service allows it to be used by sidecars and gateways defined in - // other namespaces. This feature provides a mechanism for service owners - // and mesh administrators to control the visibility of virtual services - // across namespace boundaries. - // - // If no namespaces are specified then the virtual service is exported to all - // namespaces by default. - // - // The value "." is reserved and defines an export to the same namespace that - // the virtual service is declared in. Similarly the value "*" is reserved and - // defines an export to all namespaces. - repeated string export_to = 6; -} - -// Destination indicates the network addressable service to which the -// request/connection will be sent after processing a routing rule. The -// destination.host should unambiguously refer to a service in the service -// registry. Istio's service registry is composed of all the services found -// in the platform's service registry (e.g., Kubernetes services, Consul -// services), as well as services declared through the -// [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry) resource. -// -// *Note for Kubernetes users*: When short names are used (e.g. "reviews" -// instead of "reviews.default.svc.cluster.local"), Istio will interpret -// the short name based on the namespace of the rule, not the service. A -// rule in the "default" namespace containing a host "reviews will be -// interpreted as "reviews.default.svc.cluster.local", irrespective of the -// actual namespace associated with the reviews service. _To avoid potential -// misconfigurations, it is recommended to always use fully qualified -// domain names over short names._ -// -// The following Kubernetes example routes all traffic by default to pods -// of the reviews service with label "version: v1" (i.e., subset v1), and -// some to subset v2, in a Kubernetes environment. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// namespace: foo -// spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// namespace: foo -// spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -// And the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// namespace: foo -// spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// namespace: foo -// spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// -// The following VirtualService sets a timeout of 5s for all calls to -// productpage.prod.svc.cluster.local service in Kubernetes. Notice that -// there are no subsets defined in this rule. Istio will fetch all -// instances of productpage.prod.svc.cluster.local service from the service -// registry and populate the sidecar's load balancing pool. Also, notice -// that this rule is set in the istio-system namespace but uses the fully -// qualified domain name of the productpage service, -// productpage.prod.svc.cluster.local. Therefore the rule's namespace does -// not have an impact in resolving the name of the productpage service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: my-productpage-rule -// namespace: istio-system -// spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: my-productpage-rule -// namespace: istio-system -// spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// To control routing for traffic bound to services outside the mesh, external -// services must first be added to Istio's internal service registry using the -// ServiceEntry resource. VirtualServices can then be defined to control traffic -// bound to these external services. For example, the following rules define a -// Service for wikipedia.org and set a timeout of 5s for HTTP requests. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: external-svc-wikipedia -// spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS -// --- -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: my-wiki-rule -// spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: external-svc-wikipedia -// spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS -// --- -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: my-wiki-rule -// spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org -// ``` -// {{}} -// {{}} -// -message Destination { - // The name of a service from the service registry. Service - // names are looked up from the platform's service registry (e.g., - // Kubernetes services, Consul services, etc.) and from the hosts - // declared by [ServiceEntry](https://istio.io/docs/reference/config/networking/service-entry/#ServiceEntry). Traffic forwarded to - // destinations that are not found in either of the two, will be dropped. - // - // *Note for Kubernetes users*: When short names are used (e.g. "reviews" - // instead of "reviews.default.svc.cluster.local"), Istio will interpret - // the short name based on the namespace of the rule, not the service. A - // rule in the "default" namespace containing a host "reviews will be - // interpreted as "reviews.default.svc.cluster.local", irrespective of - // the actual namespace associated with the reviews service. To avoid - // potential misconfiguration, it is recommended to always use fully - // qualified domain names over short names. - string host = 1 [(google.api.field_behavior) = REQUIRED]; - - // The name of a subset within the service. Applicable only to services - // within the mesh. The subset must be defined in a corresponding - // DestinationRule. - string subset = 2; - - // Specifies the port on the host that is being addressed. If a service - // exposes only a single port it is not required to explicitly select the - // port. - PortSelector port = 3; -} - -// Describes match conditions and actions for routing HTTP/1.1, HTTP2, and -// gRPC traffic. See VirtualService for usage examples. -message HTTPRoute { - // The name assigned to the route for debugging purposes. The - // route's name will be concatenated with the match's name and will - // be logged in the access logs for requests matching this - // route/match. - string name = 17; - - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - repeated HTTPMatchRequest match = 1; - - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see - // glossary in beginning of document). Weights associated with the - // service version determine the proportion of traffic it receives. - repeated HTTPRouteDestination route = 2; - - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, - // route/redirect will be ignored. The redirect primitive can be used to - // send a HTTP 301 redirect to a different URI or Authority. - HTTPRedirect redirect = 3; - - // Delegate is used to specify the particular VirtualService which - // can be used to define delegate HTTPRoute. - // - // It can be set only when `Route` and `Redirect` are empty, and the route - // rules of the delegate VirtualService will be merged with that in the - // current one. - // - // **NOTE**: - // - // 1. Only one level delegation is supported. - // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, - // otherwise there is a conflict and the HTTPRoute will not take effect. - Delegate delegate = 20; - - // Rewrite HTTP URIs and Authority headers. Rewrite cannot be used with - // Redirect primitive. Rewrite will be performed before forwarding. - HTTPRewrite rewrite = 4; - - reserved 5; - reserved "websocket_upgrade"; - - // Timeout for HTTP requests, default is disabled. - google.protobuf.Duration timeout = 6; - - // Retry policy for HTTP requests. - HTTPRetry retries = 7; - - // Fault injection policy to apply on HTTP traffic at the client side. - // Note that timeouts or retries will not be enabled when faults are - // enabled on the client side. - HTTPFaultInjection fault = 8; - - // Mirror HTTP traffic to a another destination in addition to forwarding - // the requests to the intended destination. Mirrored traffic is on a - // best effort basis where the sidecar/gateway will not wait for the - // mirrored cluster to respond before returning the response from the - // original destination. Statistics will be generated for the mirrored - // destination. - Destination mirror = 9; - - // Percentage of the traffic to be mirrored by the `mirror` field. - // Use of integer `mirror_percent` value is deprecated. Use the - // double `mirror_percentage` field instead - // $hide_from_docs - google.protobuf.UInt32Value mirror_percent = 18 [deprecated=true]; - - // Percentage of the traffic to be mirrored by the `mirror` field. - // If this field is absent, all the traffic (100%) will be mirrored. - // Max value is 100. - Percent mirror_percentage = 19; - - // Cross-Origin Resource Sharing policy (CORS). Refer to - // [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) - // for further details about cross origin resource sharing. - CorsPolicy cors_policy = 10; - - reserved 11 to 15; - reserved "append_headers", "remove_response_headers", "append_response_headers","remove_request_headers", "append_request_headers"; - - // Header manipulation rules - Headers headers = 16; - - // $hide_from_docs - // Next available field number: 21 -} - - -// Describes the delegate VirtualService. -// The following routing rules forward the traffic to `/productpage` by a delegate VirtualService named `productpage`, -// forward the traffic to `/reviews` by a delegate VirtualService named `reviews`. -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo -// spec: -// hosts: -// - "bookinfo.com" -// gateways: -// - mygateway -// http: -// - match: -// - uri: -// prefix: "/productpage" -// delegate: -// name: productpage -// namespace: nsA -// - match: -// - uri: -// prefix: "/reviews" -// delegate: -// name: reviews -// namespace: nsB -// ``` -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: productpage -// namespace: nsA -// spec: -// http: -// - match: -// - uri: -// prefix: "/productpage/v1/" -// route: -// - destination: -// host: productpage-v1.nsA.svc.cluster.local -// - route: -// - destination: -// host: productpage.nsA.svc.cluster.local -// ``` -// -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews -// namespace: nsB -// spec: -// http: -// - route: -// - destination: -// host: reviews.nsB.svc.cluster.local -// ``` -message Delegate { - // Name specifies the name of the delegate VirtualService. - string name = 1; - // Namespace specifies the namespace where the delegate VirtualService resides. - // By default, it is same to the root's. - string namespace = 2; -} - - -// Message headers can be manipulated when Envoy forwards requests to, -// or responses from, a destination service. Header manipulation rules can -// be specified for a specific route destination or for all destinations. -// The following VirtualService adds a `test` header with the value `true` -// to requests that are routed to any `reviews` service destination. -// It also removes the `foo` response header, but only from responses -// coming from the `v1` subset (version) of the `reviews` service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 -// ``` -// {{}} -// {{}} -message Headers { - // Header manipulation rules to apply before forwarding a request - // to the destination service - HeaderOperations request = 1; - // Header manipulation rules to apply before returning a response - // to the caller - HeaderOperations response = 2; - - // HeaderOperations Describes the header manipulations to apply - message HeaderOperations { - // Overwrite the headers specified by key with the given values - map set = 1; - // Append the given values to the headers specified by keys - // (will create a comma-separated list of values) - map add = 2; - // Remove the specified headers - repeated string remove = 3; - } -} - -// Describes match conditions and actions for routing unterminated TLS -// traffic (TLS/HTTPS) The following routing rule forwards unterminated TLS -// traffic arriving at port 443 of gateway called "mygateway" to internal -// services in the mesh based on the SNI value. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-sni -// spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-sni -// spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -message TLSRoute { - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - repeated TLSMatchAttributes match = 1 [(google.api.field_behavior) = REQUIRED]; - - // The destination to which the connection should be forwarded to. - repeated RouteDestination route = 2; -} - -// Describes match conditions and actions for routing TCP traffic. The -// following routing rule forwards traffic arriving at port 27017 for -// mongo.prod.svc.cluster.local to another Mongo server on port 5555. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: bookinfo-mongo -// spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 -// ``` -// {{}} -// {{}} -message TCPRoute { - // Match conditions to be satisfied for the rule to be - // activated. All conditions inside a single match block have AND - // semantics, while the list of match blocks have OR semantics. The rule - // is matched if any one of the match blocks succeed. - repeated L4MatchAttributes match = 1; - - // The destination to which the connection should be forwarded to. - repeated RouteDestination route = 2; -} - -// HttpMatchRequest specifies a set of criterion to be met in order for the -// rule to be applied to the HTTP request. For example, the following -// restricts the rule to match only requests where the URL path -// starts with /ratings/v2/ and the request contains a custom `end-user` header -// with value `jason`. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// ``` -// {{}} -// {{}} -// -// HTTPMatchRequest CANNOT be empty. -// **Note:** No regex string match can be set when delegate VirtualService is specified. -message HTTPMatchRequest { - // The name assigned to a match. The match's name will be - // concatenated with the parent route's name and will be logged in - // the access logs for requests matching this route. - string name = 11; - - // URI to match - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - // **Note:** Case-insensitive matching could be enabled via the - // `ignore_uri_case` flag. - StringMatch uri = 1; - - // URI Scheme - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - StringMatch scheme = 2; - - // HTTP Method - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - StringMatch method = 3; - - // HTTP Authority - // values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - StringMatch authority = 4; - - // The header keys must be lowercase and use hyphen as the separator, - // e.g. _x-request-id_. - // - // Header values are case-sensitive and formatted as follows: - // - // - `exact: "value"` for exact string match - // - // - `prefix: "value"` for prefix-based match - // - // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // - // If the value is empty and only the name of header is specfied, presence of the header is checked. - // **Note:** The keys `uri`, `scheme`, `method`, and `authority` will be ignored. - map headers = 5; - - // Specifies the ports on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they support, - // in these cases it is not required to explicitly select the port. - uint32 port = 6; - - // One or more labels that constrain the applicability of a rule to source (client) workloads - // with the given labels. If the VirtualService has a list of gateways specified - // in the top-level `gateways` field, it must include the reserved gateway - // `mesh` for this field to be applicable. - map source_labels = 7; - - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - repeated string gateways = 8; - - // Query parameters for matching. - // - // Ex: - // - // - For a query parameter like "?key=true", the map key would be "key" and - // the string match could be defined as `exact: "true"`. - // - // - For a query parameter like "?key", the map key would be "key" and the - // string match could be defined as `exact: ""`. - // - // - For a query parameter like "?key=123", the map key would be "key" and the - // string match could be defined as `regex: "\d+$"`. Note that this - // configuration will only match values like "123" but not "a123" or "123a". - // - // **Note:** `prefix` matching is currently not supported. - map query_params = 9; - - // Flag to specify whether the URI matching should be case-insensitive. - // - // **Note:** The case will be ignored only in the case of `exact` and `prefix` - // URI matches. - bool ignore_uri_case = 10; - - // withoutHeader has the same syntax with the header, but has opposite meaning. - // If a header is matched with a matching rule among withoutHeader, the traffic becomes not matched one. - map without_headers = 12; - - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - string source_namespace = 13; -} - -// Each routing rule is associated with one or more service versions (see -// glossary in beginning of document). Weights associated with the version -// determine the proportion of traffic it receives. For example, the -// following rule will route 25% of traffic for the "reviews" service to -// instances with the "v2" tag and the remaining traffic (i.e., 75%) to -// "v1". -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route -// spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 -// ``` -// {{}} -// {{}} -// -// And the associated DestinationRule -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: DestinationRule -// metadata: -// name: reviews-destination -// spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 -// ``` -// {{}} -// {{}} -// -// Traffic can also be split across two entirely different services without -// having to define new subsets. For example, the following rule forwards 25% of -// traffic to reviews.com to dev.reviews.com -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: reviews-route-two-domains -// spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: reviews-route-two-domains -// spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 -// ``` -// {{}} -// {{}} -// -message HTTPRouteDestination { - // Destination uniquely identifies the instances of a service - // to which the request/connection should be forwarded to. - Destination destination = 1 [(google.api.field_behavior) = REQUIRED]; - - // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests. - // If there is only one destination in a rule, it will receive all traffic. - // Otherwise, if weight is `0`, the destination will not receive any traffic. - int32 weight = 2; - - reserved 3 to 6; - reserved "remove_response_headers", "append_response_headers", "remove_request_headers", "append_request_headers"; - - // Header manipulation rules - Headers headers = 7; -} - -// L4 routing rule weighted destination. -message RouteDestination { - // Destination uniquely identifies the instances of a service - // to which the request/connection should be forwarded to. - Destination destination = 1 [(google.api.field_behavior) = REQUIRED]; - - // Weight specifies the relative proportion of traffic to be forwarded to the destination. A destination will receive `weight/(sum of all weights)` requests. - // If there is only one destination in a rule, it will receive all traffic. - // Otherwise, if weight is `0`, the destination will not receive any traffic. - int32 weight = 2; -} - -// L4 connection match attributes. Note that L4 connection matching support -// is incomplete. -message L4MatchAttributes { - // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g., - // a.b.c.d/xx form or just a.b.c.d. - repeated string destination_subnets = 1; - - // Specifies the port on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they support, - // in these cases it is not required to explicitly select the port. - uint32 port = 2; - - // IPv4 or IPv6 ip address of source with optional subnet. E.g., a.b.c.d/xx - // form or just a.b.c.d - // $hide_from_docs - string source_subnet = 3; - - // One or more labels that constrain the applicability of a rule to - // workloads with the given labels. If the VirtualService has a list of - // gateways specified in the top-level `gateways` field, it should include the reserved gateway - // `mesh` in order for this field to be applicable. - map source_labels = 4; - - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - repeated string gateways = 5; - - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - string source_namespace = 6; -} - -// TLS connection match attributes. -message TLSMatchAttributes { - // SNI (server name indicator) to match on. Wildcard prefixes - // can be used in the SNI value, e.g., *.com will match foo.example.com - // as well as example.com. An SNI value must be a subset (i.e., fall - // within the domain) of the corresponding virtual serivce's hosts. - repeated string sni_hosts = 1 [(google.api.field_behavior) = REQUIRED]; - - // IPv4 or IPv6 ip addresses of destination with optional subnet. E.g., - // a.b.c.d/xx form or just a.b.c.d. - repeated string destination_subnets = 2; - - // Specifies the port on the host that is being addressed. Many services - // only expose a single port or label ports with the protocols they - // support, in these cases it is not required to explicitly select the - // port. - uint32 port = 3; - - reserved 4; - reserved "source_subnet"; - - // One or more labels that constrain the applicability of a rule to - // workloads with the given labels. If the VirtualService has a list of - // gateways specified in the top-level `gateways` field, it should include the reserved gateway - // `mesh` in order for this field to be applicable. - map source_labels = 5; - - // Names of gateways where the rule should be applied. Gateway names - // in the top-level `gateways` field of the VirtualService (if any) are overridden. The gateway - // match is independent of sourceLabels. - repeated string gateways = 6; - - // Source namespace constraining the applicability of a rule to workloads in that namespace. - // If the VirtualService has a list of gateways specified in the top-level `gateways` field, - // it must include the reserved gateway `mesh` for this field to be applicable. - string source_namespace = 7; -} - -// HTTPRedirect can be used to send a 301 redirect response to the caller, -// where the Authority/Host and the URI in the response can be swapped with -// the specified values. For example, the following rule redirects -// requests for /v1/getProductRatings API on the ratings service to -// /v1/bookRatings provided by the bookratings service. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... -// ``` -// {{}} -// {{}} -// -message HTTPRedirect { - // On a redirect, overwrite the Path portion of the URL with this - // value. Note that the entire path will be replaced, irrespective of the - // request URI being matched as an exact path or prefix. - string uri = 1; - - // On a redirect, overwrite the Authority/Host portion of the URL with - // this value. - string authority = 2; - - enum RedirectPortSelection { - FROM_PROTOCOL_DEFAULT = 0; - FROM_REQUEST_PORT = 1; - } - oneof redirect_port { - // On a redirect, overwrite the port portion of the URL with this value. - uint32 port = 4; - // On a redirect, dynamically set the port: - // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. - // * FROM_REQUEST_PORT: automatically use the port of the request. - RedirectPortSelection derive_port = 5; - } - - // On a redirect, overwrite the scheme portion of the URL with this value. - // For example, `http` or `https`. - // If unset, the original scheme will be used. - // If `derivePort` is set to `FROM_PROTOCOL_DEFAULT`, this will impact the port used as well - string scheme = 6; - - // On a redirect, Specifies the HTTP status code to use in the redirect - // response. The default response code is MOVED_PERMANENTLY (301). - uint32 redirect_code = 3; -} - -// HTTPRewrite can be used to rewrite specific parts of a HTTP request -// before forwarding the request to the destination. Rewrite primitive can -// be used only with HTTPRouteDestination. The following example -// demonstrates how to rewrite the URL prefix for api call (/ratings) to -// ratings service before making the actual API call. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// ``` -// {{}} -// {{}} -// -message HTTPRewrite { - // rewrite the path (or the prefix) portion of the URI with this - // value. If the original URI was matched based on prefix, the value - // provided in this field will replace the corresponding matched prefix. - string uri = 1; - - // rewrite the Authority/Host header with this value. - string authority = 2; -} - -// Describes how to match a given string in HTTP headers. Match is -// case-sensitive. -message StringMatch { - oneof match_type { - - // exact string match - string exact = 1; - - // prefix-based match - string prefix = 2; - - // RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - string regex = 3; - } -} - -// Describes the retry policy to use when a HTTP request fails. For -// example, the following rule sets the maximum number of retries to 3 when -// calling ratings:v1 service, with a 2s timeout per retry attempt. -// A retry will be attempted if there is a connect-failure, refused_stream -// or when the upstream server responds with Service Unavailable(503). -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: connect-failure,refused-stream,503 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: gateway-error,connect-failure,refused-stream -// ``` -// {{}} -// {{}} -// -message HTTPRetry { - // Number of retries to be allowed for a given request. The interval - // between retries will be determined automatically (25ms+). When request - // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute) - // or `per_try_timeout` is configured, the actual number of retries attempted also depends on - // the specified request `timeout` and `per_try_timeout` values. - int32 attempts = 1 [(google.api.field_behavior) = REQUIRED]; - - // Timeout per attempt for a given request, including the initial call and any retries. Format: 1h/1m/1s/1ms. MUST BE >=1ms. - // Default is same value as request - // `timeout` of the [HTTP route](https://istio.io/docs/reference/config/networking/virtual-service/#HTTPRoute), - // which means no timeout. - google.protobuf.Duration per_try_timeout = 2; - - // Specifies the conditions under which retry takes place. - // One or more policies can be specified using a ‘,’ delimited list. - // If `retry_on` specifies a valid HTTP status, it will be added to retriable_status_codes retry policy. - // See the [retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-on) - // and [gRPC retry policies](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#x-envoy-retry-grpc-on) for more details. - string retry_on = 3; - - // Flag to specify whether the retries should retry to other localities. - // See the [retry plugin configuration](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/http/http_connection_management#retry-plugin-configuration) for more details. - google.protobuf.BoolValue retry_remote_localities = 4; -} - -// Describes the Cross-Origin Resource Sharing (CORS) policy, for a given -// service. Refer to [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) -// for further details about cross origin resource sharing. For example, -// the following rule restricts cross origin requests to those originating -// from example.com domain using HTTP POST/GET, and sets the -// `Access-Control-Allow-Credentials` header to false. In addition, it only -// exposes `X-Foo-bar` header and sets an expiry period of 1 day. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: VirtualService -// metadata: -// name: ratings-route -// spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" -// ``` -// {{}} -// {{}} -// -message CorsPolicy { - // The list of origins that are allowed to perform CORS requests. The - // content will be serialized into the Access-Control-Allow-Origin - // header. Wildcard * will allow all origins. - // $hide_from_docs - repeated string allow_origin = 1 [deprecated=true]; - - // String patterns that match allowed origins. - // An origin is allowed if any of the string matchers match. - // If a match is found, then the outgoing Access-Control-Allow-Origin would be set to the origin as provided by the client. - repeated StringMatch allow_origins = 7; - - // List of HTTP methods allowed to access the resource. The content will - // be serialized into the Access-Control-Allow-Methods header. - repeated string allow_methods = 2; - - // List of HTTP headers that can be used when requesting the - // resource. Serialized to Access-Control-Allow-Headers header. - repeated string allow_headers = 3; - - // A list of HTTP headers that the browsers are allowed to - // access. Serialized into Access-Control-Expose-Headers header. - repeated string expose_headers = 4; - - // Specifies how long the results of a preflight request can be - // cached. Translates to the `Access-Control-Max-Age` header. - google.protobuf.Duration max_age = 5; - - // Indicates whether the caller is allowed to send the actual request - // (not the preflight) using credentials. Translates to - // `Access-Control-Allow-Credentials` header. - google.protobuf.BoolValue allow_credentials = 6; -} - -// HTTPFaultInjection can be used to specify one or more faults to inject -// while forwarding HTTP requests to the destination specified in a route. -// Fault specification is part of a VirtualService rule. Faults include -// aborting the Http request from downstream service, and/or delaying -// proxying of requests. A fault rule MUST HAVE delay or abort or both. -// -// *Note:* Delay and abort faults are independent of one another, even if -// both are specified simultaneously. -message HTTPFaultInjection { - // Delay requests before forwarding, emulating various failures such as - // network issues, overloaded upstream service, etc. - Delay delay = 1; - - // Abort Http request attempts and return error codes back to downstream - // service, giving the impression that the upstream service is faulty. - Abort abort = 2; - - // Delay specification is used to inject latency into the request - // forwarding path. The following example will introduce a 5 second delay - // in 1 out of every 1000 requests to the "v1" version of the "reviews" - // service from all pods with label env: prod - // - // {{}} - // {{}} - // ```yaml - // apiVersion: networking.istio.io/v1alpha3 - // kind: VirtualService - // metadata: - // name: reviews-route - // spec: - // hosts: - // - reviews.prod.svc.cluster.local - // http: - // - match: - // - sourceLabels: - // env: prod - // route: - // - destination: - // host: reviews.prod.svc.cluster.local - // subset: v1 - // fault: - // delay: - // percentage: - // value: 0.1 - // fixedDelay: 5s - // ``` - // {{}} - // - // {{}} - // ```yaml - // apiVersion: networking.istio.io/v1beta1 - // kind: VirtualService - // metadata: - // name: reviews-route - // spec: - // hosts: - // - reviews.prod.svc.cluster.local - // http: - // - match: - // - sourceLabels: - // env: prod - // route: - // - destination: - // host: reviews.prod.svc.cluster.local - // subset: v1 - // fault: - // delay: - // percentage: - // value: 0.1 - // fixedDelay: 5s - // ``` - // {{}} - // {{}} - // - // The _fixedDelay_ field is used to indicate the amount of delay in seconds. - // The optional _percentage_ field can be used to only delay a certain - // percentage of requests. If left unspecified, all request will be delayed. - message Delay { - // Percentage of requests on which the delay will be injected (0-100). - // Use of integer `percent` value is deprecated. Use the double `percentage` - // field instead. - int32 percent = 1 [deprecated=true]; - - oneof http_delay_type { - // Add a fixed delay before forwarding the request. Format: - // 1h/1m/1s/1ms. MUST be >=1ms. - google.protobuf.Duration fixed_delay = 2 [(google.api.field_behavior) = REQUIRED]; - - // $hide_from_docs - google.protobuf.Duration exponential_delay = 3 ; - } - - // Percentage of requests on which the delay will be injected. - Percent percentage = 5; - } - - // Abort specification is used to prematurely abort a request with a - // pre-specified error code. The following example will return an HTTP 400 - // error code for 1 out of every 1000 requests to the "ratings" service "v1". - // - // {{}} - // {{}} - // ```yaml - // apiVersion: networking.istio.io/v1alpha3 - // kind: VirtualService - // metadata: - // name: ratings-route - // spec: - // hosts: - // - ratings.prod.svc.cluster.local - // http: - // - route: - // - destination: - // host: ratings.prod.svc.cluster.local - // subset: v1 - // fault: - // abort: - // percentage: - // value: 0.1 - // httpStatus: 400 - // ``` - // {{}} - // - // {{}} - // ```yaml - // apiVersion: networking.istio.io/v1beta1 - // kind: VirtualService - // metadata: - // name: ratings-route - // spec: - // hosts: - // - ratings.prod.svc.cluster.local - // http: - // - route: - // - destination: - // host: ratings.prod.svc.cluster.local - // subset: v1 - // fault: - // abort: - // percentage: - // value: 0.1 - // httpStatus: 400 - // ``` - // {{}} - // {{}} - // - // The _httpStatus_ field is used to indicate the HTTP status code to - // return to the caller. The optional _percentage_ field can be used to only - // abort a certain percentage of requests. If not specified, all requests are - // aborted. - message Abort { - reserved 1; - reserved "percent"; - - oneof error_type { - // HTTP status code to use to abort the Http request. - int32 http_status = 2 [(google.api.field_behavior) = REQUIRED]; - - // $hide_from_docs - string grpc_status = 3; - - // $hide_from_docs - string http2_error = 4; - } - - // Percentage of requests to be aborted with the error code provided. - Percent percentage = 5; - } -} - -// PortSelector specifies the number of a port to be used for -// matching or selection for final routing. -message PortSelector { - // Valid port number - uint32 number = 1; - - reserved 2; - reserved "name"; -} - -// Percent specifies a percentage in the range of [0.0, 100.0]. -message Percent { - double value = 1; -} diff --git a/proto/networking/v1beta1/workload_entry.proto b/proto/networking/v1beta1/workload_entry.proto deleted file mode 100644 index f3b0810..0000000 --- a/proto/networking/v1beta1/workload_entry.proto +++ /dev/null @@ -1,327 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; - -// $schema: istio.networking.v1beta1.WorkloadEntry -// $title: Workload Entry -// $description: Configuration affecting VMs onboarded into the mesh. -// $location: https://istio.io/docs/reference/config/networking/workload-entry.html -// $aliases: [/docs/reference/config/networking/v1beta1/workload-entry] -// $mode: none - -// `WorkloadEntry` enables operators to describe the properties of a -// single non-Kubernetes workload such as a VM or a bare metal server -// as it is onboarded into the mesh. A `WorkloadEntry` must be -// accompanied by an Istio `ServiceEntry` that selects the workload -// through the appropriate labels and provides the service definition -// for a `MESH_INTERNAL` service (hostnames, port properties, etc.). A -// `ServiceEntry` object can select multiple workload entries as well -// as Kubernetes pods based on the label selector specified in the -// service entry. -// -// When a workload connects to `istiod`, the status field in the -// custom resource will be updated to indicate the health of the -// workload along with other details, similar to how Kubernetes -// updates the status of a pod. -// -// The following example declares a workload entry representing a VM -// for the `details.bookinfo.com` service. This VM has sidecar -// installed and bootstrapped using the `details-legacy` service -// account. The service is exposed on port 80 to applications in the -// mesh. The HTTP traffic to this service is wrapped in Istio mutual -// TLS and sent to sidecars on VMs on target port 8080, that in turn -// forward it to the application on localhost on the same port. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: 2.2.2.2 -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: 2.2.2.2 -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// {{}} -// -// and the associated service entry -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: STATIC -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: STATIC -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// {{}} -// -// -// The following example declares the same VM workload using -// its fully qualified DNS name. The service entry's resolution -// mode should be changed to DNS to indicate that the client-side -// sidecars should dynamically resolve the DNS name at runtime before -// forwarding the request. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: vm1.vpc01.corp.net -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: WorkloadEntry -// metadata: -// name: details-svc -// spec: -// # use of the service account indicates that the workload has a -// # sidecar proxy bootstrapped with this service account. Pods with -// # sidecars will automatically communicate with the workload using -// # istio mutual TLS. -// serviceAccount: details-legacy -// address: vm1.vpc01.corp.net -// labels: -// app: details-legacy -// instance-id: vm1 -// ``` -// {{}} -// {{}} -// -// and the associated service entry -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: DNS -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1beta1 -// kind: ServiceEntry -// metadata: -// name: details-svc -// spec: -// hosts: -// - details.bookinfo.com -// location: MESH_INTERNAL -// ports: -// - number: 80 -// name: http -// protocol: HTTP -// targetPort: 8080 -// resolution: DNS -// workloadSelector: -// labels: -// app: details-legacy -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// WorkloadEntry enables specifying the properties of a single non-Kubernetes workload such a VM or a bare metal services that can be referred to by service entries. -// -// -// -// -// -message WorkloadEntry { - // Address associated with the network endpoint without the - // port. Domain names can be used if and only if the resolution is set - // to DNS, and must be fully-qualified without wildcards. Use the form - // unix:///absolute/path/to/socket for Unix domain socket endpoints. - string address = 1 [(google.api.field_behavior) = REQUIRED]; - - // Set of ports associated with the endpoint. If the port map is - // specified, it must be a map of servicePortName to this endpoint's - // port, such that traffic to the service port will be forwarded to - // the endpoint port that maps to the service's portName. If - // omitted, and the targetPort is specified as part of the service's - // port specification, traffic to the service port will be forwarded - // to one of the endpoints on the specified `targetPort`. If both - // the targetPort and endpoint's port map are not specified, traffic - // to a service port will be forwarded to one of the endpoints on - // the same port. - // - // **NOTE 1:** Do not use for `unix://` addresses. - // - // **NOTE 2:** endpoint port map takes precedence over targetPort. - map ports = 2; - - // One or more labels associated with the endpoint. - map labels = 3; - - // Network enables Istio to group endpoints resident in the same L3 - // domain/network. All endpoints in the same network are assumed to be - // directly reachable from one another. When endpoints in different - // networks cannot reach each other directly, an Istio Gateway can be - // used to establish connectivity (usually using the - // `AUTO_PASSTHROUGH` mode in a Gateway Server). This is - // an advanced configuration used typically for spanning an Istio mesh - // over multiple clusters. - string network = 4; - - // The locality associated with the endpoint. A locality corresponds - // to a failure domain (e.g., country/region/zone). Arbitrary failure - // domain hierarchies can be represented by separating each - // encapsulating failure domain by /. For example, the locality of an - // an endpoint in US, in US-East-1 region, within availability zone - // az-1, in data center rack r11 can be represented as - // us/us-east-1/az-1/r11. Istio will configure the sidecar to route to - // endpoints within the same locality as the sidecar. If none of the - // endpoints in the locality are available, endpoints parent locality - // (but within the same network ID) will be chosen. For example, if - // there are two endpoints in same network (networkID "n1"), say e1 - // with locality us/us-east-1/az-1/r11 and e2 with locality - // us/us-east-1/az-2/r12, a sidecar from us/us-east-1/az-1/r11 locality - // will prefer e1 from the same locality over e2 from a different - // locality. Endpoint e2 could be the IP associated with a gateway - // (that bridges networks n1 and n2), or the IP associated with a - // standard service endpoint. - string locality = 5; - - // The load balancing weight associated with the endpoint. Endpoints - // with higher weights will receive proportionally higher traffic. - uint32 weight = 6; - - // The service account associated with the workload if a sidecar - // is present in the workload. The service account must be present - // in the same namespace as the configuration ( WorkloadEntry or a - // ServiceEntry) - string service_account = 7; -}; diff --git a/proto/networking/v1beta1/workload_group.proto b/proto/networking/v1beta1/workload_group.proto deleted file mode 100644 index a7d28ae..0000000 --- a/proto/networking/v1beta1/workload_group.proto +++ /dev/null @@ -1,208 +0,0 @@ -// Copyright 2020 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/api/field_behavior.proto"; -import "networking/v1beta1/workload_entry.proto"; - -// $schema: istio.networking.v1alpha3.WorkloadGroup -// $title: Workload Group -// $description: Describes a collection of workload instances. -// $location: https://istio.io/docs/reference/config/networking/workload-group.html -// $aliases: [/docs/reference/config/networking/v1alpha3/workload-group] - -// `WorkloadGroup` describes a collection of workload instances. -// It provides a specification that the workload instances can use to bootstrap -// their proxies, including the metadata and identity. It is only intended to -// be used with non-k8s workloads like Virtual Machines, and is meant to mimic -// the existing sidecar injection and deployment specification model used for -// Kubernetes workloads to bootstrap Istio proxies. -// -// The following example declares a workload group representing a collection -// of workloads that will be registered under `reviews` in namespace -// `bookinfo`. The set of labels will be associated with each workload -// instance during the bootstrap process, and the ports 3550 and 8080 -// will be associated with the workload group and use service account `default`. -// `app.kubernetes.io/version` is just an arbitrary example of a label. -// -// {{}} -// {{}} -// ```yaml -// apiVersion: networking.istio.io/v1alpha3 -// kind: WorkloadGroup -// metadata: -// name: reviews -// namespace: bookinfo -// spec: -// metadata: -// labels: -// app.kubernetes.io/name: reviews -// app.kubernetes.io/version: "1.3.4" -// template: -// ports: -// grpc: 3550 -// http: 8080 -// serviceAccount: default -// probe: -// initialDelaySeconds: 5 -// timeoutSeconds: 3 -// periodSeconds: 4 -// successThreshold: 3 -// failureThreshold: 3 -// httpGet: -// path: /foo/bar -// host: 127.0.0.1 -// port: 3100 -// scheme: HTTPS -// httpHeaders: -// - name: Lit-Header -// value: Im-The-Best -// ``` -// {{}} -// {{}} -// -package istio.networking.v1beta1; - -option go_package = "istio.io/api/networking/v1beta1"; - -// `WorkloadGroup` enables specifying the properties of a single workload for bootstrap and -// provides a template for `WorkloadEntry`, similar to how `Deployment` specifies properties -// of workloads via `Pod` templates. A `WorkloadGroup` can have more than one `WorkloadEntry`. -// `WorkloadGroup` has no relationship to resources which control service registry like `ServiceEntry` -// and as such doesn't configure host name for these workloads. -// -// -// -// -// -message WorkloadGroup { - // Metadata that will be used for all corresponding `WorkloadEntries`. - // User labels for a workload group should be set here in `metadata` rather than in `template`. - ObjectMeta metadata = 1; - - // Template to be used for the generation of `WorkloadEntry` resources that belong to this `WorkloadGroup`. - // Please note that `address` and `labels` fields should not be set in the template, and an empty `serviceAccount` - // should default to `default`. The workload identities (mTLS certificates) will be bootstrapped using the - // specified service account's token. Workload entries in this group will be in the same namespace as the - // workload group, and inherit the labels and annotations from the above `metadata` field. - WorkloadEntry template = 2 [(google.api.field_behavior) = REQUIRED]; - - // `ObjectMeta` describes metadata that will be attached to a `WorkloadEntry`. - // It is a subset of the supported Kubernetes metadata. - message ObjectMeta { - // Labels to attach - map labels = 1; - - // Annotations to attach - map annotations = 2; - } - - // `ReadinessProbe` describes the configuration the user must provide for healthchecking on their workload. - // This configuration mirrors K8S in both syntax and logic for the most part. - ReadinessProbe probe = 3; -} - -message ReadinessProbe { - - // Number of seconds after the container has started before readiness probes are initiated. - int32 initial_delay_seconds = 2; - - // Number of seconds after which the probe times out. - // Defaults to 1 second. Minimum value is 1 second. - int32 timeout_seconds = 3; - - // How often (in seconds) to perform the probe. - // Default to 10 seconds. Minimum value is 1 second. - int32 period_seconds = 4; - - // Minimum consecutive successes for the probe to be considered successful after having failed. - // Defaults to 1 second. - int32 success_threshold = 5; - - // Minimum consecutive failures for the probe to be considered failed after having succeeded. - // Defaults to 3 seconds. - int32 failure_threshold = 6; - - // Users can only provide one configuration for healthchecks (tcp, http, exec), - // and this is expressed as a oneof. All of the other configuration values - // hold true for any of the healthcheck methods. - oneof health_check_method { - // `httpGet` is performed to a given endpoint - // and the status/able to connect determines health. - HTTPHealthCheckConfig http_get = 7; - // Health is determined by if the proxy is able to connect. - TCPHealthCheckConfig tcp_socket = 8; - // Health is determined by how the command that is executed exited. - ExecHealthCheckConfig exec = 9; - } -} - -message HTTPHealthCheckConfig { - // Path to access on the HTTP server. - string path = 1; - - // Port on which the endpoint lives. - uint32 port = 2 [(google.api.field_behavior) = REQUIRED]; - - // Host name to connect to, defaults to the pod IP. You probably want to set - // "Host" in httpHeaders instead. - string host = 3; - - // HTTP or HTTPS, defaults to HTTP - string scheme = 4; - - // Headers the proxy will pass on to make the request. - // Allows repeated headers. - repeated HTTPHeader http_headers = 5; -} - -message HTTPHeader { - // The header field name - string name = 1; - - // The header field value - string value = 2; -} - -message TCPHealthCheckConfig { - // Host to connect to, defaults to localhost - string host = 1; - // Port of host - uint32 port = 2 [(google.api.field_behavior) = REQUIRED]; -} - -message ExecHealthCheckConfig { - // Command to run. Exit status of 0 is treated as live/healthy and non-zero is unhealthy. - repeated string command = 1; -} diff --git a/proto/openmetrics/prometheus.proto b/proto/openmetrics/prometheus.proto deleted file mode 100644 index a222650..0000000 --- a/proto/openmetrics/prometheus.proto +++ /dev/null @@ -1,218 +0,0 @@ -syntax = "proto3"; - -// The OpenMetrics protobuf schema which defines the protobuf wire -// format. -// Ensure to interpret "required" as semantically required for a valid -// message. -// All string fields MUST be UTF-8 encoded strings. -package openmetrics; - -import "google/protobuf/timestamp.proto"; -option go_package = "github.com/costinm/ugate/gen/proto/openmetrics"; - -// The top-level container type that is encoded and sent over the wire. -message MetricSet { - // Each MetricFamily has one or more MetricPoints for a single Metric. - repeated MetricFamily metric_families = 1; -} - -// One or more Metrics for a single MetricFamily, where each Metric -// has one or more MetricPoints. -message MetricFamily { - // Required. - string name = 1; - - // Optional. - MetricType type = 2; - - // Optional. - string unit = 3; - - // Optional. - string help = 4; - - // Optional. - repeated Metric metrics = 5; -} - -// The type of a Metric. -enum MetricType { - // Unknown must use unknown MetricPoint values. - UNKNOWN = 0; - // Gauge must use gauge MetricPoint values. - GAUGE = 1; - // Counter must use counter MetricPoint values. - COUNTER = 2; - // State set must use state set MetricPoint values. - STATE_SET = 3; - // Info must use info MetricPoint values. - INFO = 4; - // Histogram must use histogram value MetricPoint values. - HISTOGRAM = 5; - // Gauge histogram must use histogram value MetricPoint values. - GAUGE_HISTOGRAM = 6; - // Summary quantiles must use summary value MetricPoint values. - SUMMARY = 7; -} - -// A single metric with a unique set of labels within a metric family. -message Metric { - // Optional. - repeated Label labels = 1; - - // Optional. - repeated MetricPoint metric_points = 2; -} - -// A name-value pair. These are used in multiple places: identifying -// timeseries, value of INFO metrics, and exemplars in Histograms. -message Label { - // Required. - string name = 1; - - // Required. - string value = 2; -} - -// A MetricPoint in a Metric. -message MetricPoint { - // Required. - oneof value { - UnknownValue unknown_value = 1; - GaugeValue gauge_value = 2; - CounterValue counter_value = 3; - HistogramValue histogram_value = 4; - StateSetValue state_set_value = 5; - InfoValue info_value = 6; - SummaryValue summary_value = 7; - } - - // Optional. - google.protobuf.Timestamp timestamp = 8; -} - -// Value for UNKNOWN MetricPoint. -message UnknownValue { - // Required. - oneof value { - double double_value = 1; - int64 int_value = 2; - } -} - -// Value for GAUGE MetricPoint. -message GaugeValue { - // Required. - oneof value { - double double_value = 1; - int64 int_value = 2; - } -} - -// Value for COUNTER MetricPoint. -message CounterValue { - // Required. - oneof total { - double double_value = 1; - uint64 int_value = 2; - } - - // The time values began being collected for this counter. - // Optional. - google.protobuf.Timestamp created = 3; - - // Optional. - Exemplar exemplar = 4; -} - -// Value for HISTOGRAM or GAUGE_HISTOGRAM MetricPoint. -message HistogramValue { - // Optional. - oneof sum { - double double_value = 1; - int64 int_value = 2; - } - - // Optional. - uint64 count = 3; - - // The time values began being collected for this histogram. - // Optional. - google.protobuf.Timestamp created = 4; - - // Optional. - repeated Bucket buckets = 5; - - // Bucket is the number of values for a bucket in the histogram - // with an optional exemplar. - message Bucket { - // Required. - uint64 count = 1; - - // Optional. - double upper_bound = 2; - - // Optional. - Exemplar exemplar = 3; - } -} - -message Exemplar { - // Required. - double value = 1; - - // Optional. - google.protobuf.Timestamp timestamp = 2; - - // Labels are additional information about the exemplar value - // (e.g. trace id). - // Optional. - repeated Label label = 3; -} - -// Value for STATE_SET MetricPoint. -message StateSetValue { - // Optional. - repeated State states = 1; - - message State { - // Required. - bool enabled = 1; - - // Required. - string name = 2; - } -} - -// Value for INFO MetricPoint. -message InfoValue { - // Optional. - repeated Label info = 1; -} - -// Value for SUMMARY MetricPoint. -message SummaryValue { - // Optional. - oneof sum { - double double_value = 1; - int64 int_value = 2; - } - - // Optional. - uint64 count = 3; - - // The time sum and count values began being collected for this summary. - // Optional. - google.protobuf.Timestamp created = 4; - - // Optional. - repeated Quantile quantile = 5; - - message Quantile { - // Required. - double quantile = 1; - - // Required. - double value = 2; - } -} diff --git a/proto/proto/echo.proto b/proto/proto/echo.proto deleted file mode 100644 index 6dacc3c..0000000 --- a/proto/proto/echo.proto +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -import "google/protobuf/wrappers.proto"; - -// Generate with protoc --go_out=. echo.proto -I /work/common-protos/ -I. -package proto; -option go_package="../proto"; - -service EchoTestService { - rpc Echo (EchoRequest) returns (EchoResponse); - rpc ForwardEcho (ForwardEchoRequest) returns (ForwardEchoResponse); -} - -message EchoRequest { - string message = 1; -} - -message EchoResponse { - string message = 1; -} - -message Header { - string key = 1; - string value = 2; -} - -message ForwardEchoRequest { - int32 count = 1; - int32 qps = 2; - int64 timeout_micros = 3; - string url = 4; - repeated Header headers = 5; - string message = 6; - // Method for the request. Valid only for HTTP - string method = 9; - // If true, requests will be sent using h2c prior knowledge - bool http2 = 7; - // If true, requests will be sent using http3 - bool http3 = 15; - // If true, requests will not be sent until magic string is received - bool serverFirst = 8; - // If true, 301 redirects will be followed - bool followRedirects = 14; - // If non-empty, make the request with the corresponding cert and key. - string cert = 10; - string key = 11; - // If non-empty, verify the server CA - string caCert = 12; - // If non-empty, make the request with the corresponding cert and key file. - string certFile = 16; - string keyFile = 17; - // If non-empty, verify the server CA with the ca cert file. - string caCertFile = 18; - // Skip verifying peer's certificate. - bool insecureSkipVerify = 19; - // List of ALPNs to present. If not set, this will be automatically be set based on the protocol - Alpn alpn = 13; - // Server name (SNI) to present in TLS connections. If not set, Host will be used for http requests. - string serverName = 20; - // Expected response determines what string to look for in the response to validate TCP requests succeeded. - // If not set, defaults to "StatusCode=200" - google.protobuf.StringValue expectedResponse = 21; -} - -message Alpn { - repeated string value = 1; -} - -message ForwardEchoResponse { - repeated string output = 1; -} diff --git a/proto/type/v1beta1/selector.proto b/proto/type/v1beta1/selector.proto deleted file mode 100644 index ec18899..0000000 --- a/proto/type/v1beta1/selector.proto +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright 2019 Istio Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -syntax = "proto3"; - -import "google/api/field_behavior.proto"; - -// $title: Workload Selector -// $description: Definition of a workload selector. -// $location: https://istio.io/docs/reference/config/type/workload-selector.html - -package istio.type.v1beta1; - -option go_package="istio.io/api/type/v1beta1"; - -// WorkloadSelector specifies the criteria used to determine if a policy can be applied -// to a proxy. The matching criteria includes the metadata associated with a proxy, -// workload instance info such as labels attached to the pod/VM, or any other info -// that the proxy provides to Istio during the initial handshake. If multiple conditions are -// specified, all conditions need to match in order for the workload instance to be -// selected. Currently, only label based selection mechanism is supported. -message WorkloadSelector { - // One or more labels that indicate a specific set of pods/VMs - // on which a policy should be applied. The scope of label search is restricted to - // the configuration namespace in which the resource is present. - map match_labels = 1 [(google.api.field_behavior) = REQUIRED]; -} diff --git a/proto/webpush/webpush.proto b/proto/webpush/webpush.proto deleted file mode 100644 index 6d2ef70..0000000 --- a/proto/webpush/webpush.proto +++ /dev/null @@ -1,211 +0,0 @@ -syntax = "proto3"; -package webpush; - -option go_package = "github.com/costinm/wpgate/pkg/msgs"; - -// Experimental - proto representation for 'webpush' messages, using XDS as transport. - -// Common fields to be encoded in the 'data' proto -message MessageData { - - // Time when the message was sent, according to the sender clock. - int64 time = 1; - - // Original ID. If missing, the envelope ID will be used. - string id = 2; - - // Original destination - string to = 3; - - string from = 4; - - string topic = 5; - - map meta = 6; - bytes data = 7; -} - -// Message is returned as PUSH PROMISE frames in the spec. The alternative protocol wraps it in -// Any field or other framing. -message WebpushMessage { - - // Unique in context of the origin - // For webpush, generated by the original server (from subscription), as Location: - // Example: https://push.example.net/message/qDIYHNcfAIPP_5ITvURr-d6BGt - string id = 1; - - // Plaintext = 0 - // aes128gcm = 1 - int32 content_encoding = 7; - - // If encoding is "1" - aes128gcm - // Otherwise it is a plaintext message. - bytes data = 3; - - // Visible metadata, used for routing - //map meta = 8; - - // Message path - repeated Via path = 6; - - int32 ttl = 9; - - // Maps to the SubscribeResponse push parameter, returned as Link rel="urn:ietf:params:push" - // in the push promise. - string push = 2; - - // Identifies the sender - compact form. - Vapid sender = 4; - - // URL or IPv6, extracted from the VAPID of the sender or other - // form of authentication. - string from = 5; -} - -message Via { - int64 time = 1; - - string vip = 2; - - // bytes sig = 3; -} - -// Vapid is the proto variant of a Webpush JWT. -// This is a more compact representation, without base64 overhead -// -// For HTTP, included in Authorization header: -// Authorization: vapid t=B64url k=B64url -// -// Decoded t is of form: { "typ": "JWT", "alg": "ES256" }.JWT.SIG -// -// { "crv":"P-256", -// "kty":"EC", -// "x":"DUfHPKLVFQzVvnCPGyfucbECzPDa7rWbXriLcysAjEc", -// "y":"F6YK5h4SDYic-dRuU_RCPCfA5aq9ojSwk5Y2EmClBPs" } -message Vapid { - // json payload of VAPID ( without base64 encoding) - // Can also be a proto message when used over other transports. - // Verification requires converting back to base64 ! - // Decoded to reduce the binary size - bytes data = 7; - - // Public key of the signer, 64 bytes, EC256, decoded. - // Included in 'k' parameter for HTTP. - bytes k = 4; - - // If empty, it is assumed to be the constant value {typ=JWT,alg=ES256} - bytes t_type = 32; - - // Decoded - bytes t_signature = 33; -} - -//// -//message SubscribeRequest { -// -// // A UA should group subscriptions in a set. First request from a -// // UA will not include a set - it is typically a subscription associated with -// // the UA itself. -// string push_set = 1; -// -// // Included as Crypto-Key: p256ecdsa parameter. -// // Corresponds to the applicationServerKey parameter in the PushSubscriptionOptions in -// // the W3C API -// string sender_vapid = 2; -//} -// -//// Subscribe response includes the elements in the spec. -//message SubscribeResponse { -// // Returned as Link: rel="urn:ietf:params:push" -// // Spec examples use a full path ( /push/xxxx1 ) -// // TODO: clarify if it can be a full URL -// string push = 1; -// -// // Optional response: it -// // returned as Link: rel=urn:ietf:params:push:set -// // Spec examples use a full path ( /subscription-set/xxxx2 ). -// // TODO: clarify it can be a full URL, like subscription -// string push_set = 2; -// -// // Push subscription resource. This is the full URL where the UA will use to -// // receive the messages, using the PUSH promise http2 frame. -// // -// // -// // Returned as Location header in the spec -// string location = 3; -//} - -message PushRequest { - // The value returned in the SubscribeResponse push, without the hostname. - string push = 1; - - int32 ttl = 2; - - // aes128gcm encrypted - bytes data = 3; - - string urgency = 4; - - // Prefer header indicating delivery receipt request. - bool respond_async = 5; - - string topic = 6; -} - -message PushResponse { - string message_id = 1; - - // If request includes the respond_async parameter. - // - string push_receipt = 2; -} - -//message MonitorRequest { -// // This is the push or push_set in the subscribe response. -// string push_set = 1; -// -// // JWT token, signed with key -// string authorization = 2; -// -// // Public key used for signing, identifies sender/receiver -// string key = 3; -//} - -//message AckRequest { -// string message_id = 1; -// -// // Optional, not part of the spec: if the subscribe request was authenticated with VAPID, -// // the delete should also be authenticated with same VAPID key -//} - -//message AckResponse { -//} - -//message ReceiptRequest { -// string receipt_subscription = 1; -//} - -//message Receipt { -// string message_id = 1; -//} - -// Not implemented - alternative interface with explicit methos for each operation. -//service Webpush { -// // Subscribe maps the the webpush subscribe request -// rpc Subscribe (SubscribeRequest) returns (SubscribeResponse) { -// } -// -// // Monitor allows a UA to receive push messages from the push service -// // Replaced push promises with a stream of Message objects. -// rpc Monitor(MonitorRequest) returns (stream Message) {} -// -// rpc Ack(AckRequest) returns (AckResponse) {} -// -// // Push allows an application server to send messages to UA, using the push service. -// rpc Push(PushRequest) returns (PushResponse) {} -// -// // Monitor allows an AS to receive push messages receipts from the push service -// // Replaced push promises with a stream of Message objects. -// rpc Receipts(ReceiptRequest) returns (stream Receipt) {} -//} - diff --git a/proto/xds/base.proto b/proto/xds/base.proto deleted file mode 100644 index dd1092f..0000000 --- a/proto/xds/base.proto +++ /dev/null @@ -1,330 +0,0 @@ -syntax = "proto3"; - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - -// Base protos - to avoid deps and to have an easy to find reference. - - -// `Struct` represents a structured data value, consisting of fields -// which map to dynamically typed values. In some languages, `Struct` -// might be supported by a native representation. For example, in -// scripting languages like JS a struct is represented as an -// object. The details of that representation are described together -// with the proto support for the language. -// -// The JSON representation for `Struct` is JSON object. -message Struct { - // Unordered map of dynamically typed values. - map fields = 1; -} - -// `Value` represents a dynamically typed value which can be either -// null, a number, a string, a boolean, a recursive struct value, or a -// list of values. A producer of value is expected to set one of that -// variants, absence of any variant indicates an error. -// -// The JSON representation for `Value` is JSON value. -message Value { - // The kind of value. - oneof kind { - // Represents a null value. - NullValue null_value = 1; - // Represents a double value. - double number_value = 2; - // Represents a string value. - string string_value = 3; - // Represents a boolean value. - bool bool_value = 4; - // Represents a structured value. - Struct struct_value = 5; - // Represents a repeated `Value`. - ListValue list_value = 6; - } -} -// `NullValue` is a singleton enumeration to represent the null value for the -// `Value` type union. -// -// The JSON representation for `NullValue` is JSON `null`. -enum NullValue { - // Null value. - NULL_VALUE = 0; -} - -// `ListValue` is a wrapper around a repeated field of values. -// -// The JSON representation for `ListValue` is JSON array. -message ListValue { - // Repeated field of dynamically typed values. - repeated Value values = 1; -} - -// A Duration represents a signed, fixed-length span of time represented -// as a count of seconds and fractions of seconds at nanosecond -// resolution. It is independent of any calendar and concepts like "day" -// or "month". It is related to Timestamp in that the difference between -// two Timestamp values is a Duration and it can be added or subtracted -// from a Timestamp. Range is approximately +-10,000 years. -// -// # Examples -// -// Example 1: Compute Duration from two Timestamps in pseudo code. -// -// Timestamp start = ...; -// Timestamp end = ...; -// Duration duration = ...; -// -// duration.seconds = end.seconds - start.seconds; -// duration.nanos = end.nanos - start.nanos; -// -// if (duration.seconds < 0 && duration.nanos > 0) { -// duration.seconds += 1; -// duration.nanos -= 1000000000; -// } else if (durations.seconds > 0 && duration.nanos < 0) { -// duration.seconds -= 1; -// duration.nanos += 1000000000; -// } -// -// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. -// -// Timestamp start = ...; -// Duration duration = ...; -// Timestamp end = ...; -// -// end.seconds = start.seconds + duration.seconds; -// end.nanos = start.nanos + duration.nanos; -// -// if (end.nanos < 0) { -// end.seconds -= 1; -// end.nanos += 1000000000; -// } else if (end.nanos >= 1000000000) { -// end.seconds += 1; -// end.nanos -= 1000000000; -// } -// -// Example 3: Compute Duration from datetime.timedelta in Python. -// -// td = datetime.timedelta(days=3, minutes=10) -// duration = Duration() -// duration.FromTimedelta(td) -// -// # JSON Mapping -// -// In JSON format, the Duration type is encoded as a string rather than an -// object, where the string ends in the suffix "s" (indicating seconds) and -// is preceded by the number of seconds, with nanoseconds expressed as -// fractional seconds. For example, 3 seconds with 0 nanoseconds should be -// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should -// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 -// microsecond should be expressed in JSON format as "3.000001s". -// -// -message Duration { - - // Signed seconds of the span of time. Must be from -315,576,000,000 - // to +315,576,000,000 inclusive. Note: these bounds are computed from: - // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years - int64 seconds = 1; - - // Signed fractions of a second at nanosecond resolution of the span - // of time. Durations less than one second are represented with a 0 - // `seconds` field and a positive or negative `nanos` field. For durations - // of one second or more, a non-zero value for the `nanos` field must be - // of the same sign as the `seconds` field. Must be from -999,999,999 - // to +999,999,999 inclusive. - int32 nanos = 2; -} - -// The `Status` type defines a logical error model that is suitable for different -// programming environments, including REST APIs and RPC APIs. It is used by -// [gRPC](https://github.com/grpc). The error model is designed to be: -// -// - Simple to use and understand for most users -// - Flexible enough to meet unexpected needs -// -// # Overview -// -// The `Status` message contains three pieces of data: error code, error message, -// and error details. The error code should be an enum value of -// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The -// error message should be a developer-facing English message that helps -// developers *understand* and *resolve* the error. If a localized user-facing -// error message is needed, put the localized message in the error details or -// localize it in the client. The optional error details may contain arbitrary -// information about the error. There is a predefined set of error detail types -// in the package `google.rpc` that can be used for common error conditions. -// -// # Language mapping -// -// The `Status` message is the logical representation of the error model, but it -// is not necessarily the actual wire format. When the `Status` message is -// exposed in different client libraries and different wire protocols, it can be -// mapped differently. For example, it will likely be mapped to some exceptions -// in Java, but more likely mapped to some error codes in C. -// -// # Other uses -// -// The error model and the `Status` message can be used in a variety of -// environments, either with or without APIs, to provide a -// consistent developer experience across different environments. -// -// Example uses of this error model include: -// -// - Partial errors. If a service needs to return partial errors to the client, -// it may embed the `Status` in the normal response to indicate the partial -// errors. -// -// - Workflow errors. A typical workflow has multiple steps. Each step may -// have a `Status` message for error reporting. -// -// - Batch operations. If a client uses batch request and batch response, the -// `Status` message should be used directly inside batch response, one for -// each error sub-response. -// -// - Asynchronous operations. If an API call embeds asynchronous operation -// results in its response, the status of those operations should be -// represented directly using the `Status` message. -// -// - Logging. If some API errors are stored in logs, the message `Status` could -// be used directly after any stripping needed for security/privacy reasons. -message Status { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. - int32 code = 1; - - // A developer-facing error message, which should be in English. Any - // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. - string message = 2; - - // A list of messages that carry the error details. There is a common set of - // message types for APIs to use. - // google.protobuf.Any - repeated Any details = 3; -} - -// `Any` contains an arbitrary serialized protocol buffer message along with a -// URL that describes the type of the serialized message. -// -// Protobuf library provides support to pack/unpack Any values in the form -// of utility functions or additional generated methods of the Any type. -// -// Example 1: Pack and unpack a message in C++. -// -// Foo foo = ...; -// Any any; -// any.PackFrom(foo); -// ... -// if (any.UnpackTo(&foo)) { -// ... -// } -// -// Example 2: Pack and unpack a message in Java. -// -// Foo foo = ...; -// Any any = Any.pack(foo); -// ... -// if (any.is(Foo.class)) { -// foo = any.unpack(Foo.class); -// } -// -// Example 3: Pack and unpack a message in Python. -// -// foo = Foo(...) -// any = Any() -// any.Pack(foo) -// ... -// if any.Is(Foo.DESCRIPTOR): -// any.Unpack(foo) -// ... -// -// Example 4: Pack and unpack a message in Go -// -// foo := &pb.Foo{...} -// any, err := ptypes.MarshalAny(foo) -// ... -// foo := &pb.Foo{} -// if err := ptypes.UnmarshalAny(any, foo); err != nil { -// ... -// } -// -// The pack methods provided by protobuf library will by default use -// 'type.googleapis.com/full.type.name' as the type URL and the unpack -// methods only use the fully qualified type name after the last '/' -// in the type URL, for example "foo.bar.com/x/y.z" will yield type -// name "y.z". -// -// -// JSON -// ==== -// The JSON representation of an `Any` value uses the regular -// representation of the deserialized, embedded message, with an -// additional field `@type` which contains the type URL. Example: -// -// package google.profile; -// message Person { -// string first_name = 1; -// string last_name = 2; -// } -// -// { -// "@type": "type.googleapis.com/google.profile.Person", -// "firstName": , -// "lastName": -// } -// -// If the embedded message type is well-known and has a custom JSON -// representation, that representation will be embedded adding a field -// `value` which holds the custom JSON in addition to the `@type` -// field. Example (for message [google.protobuf.Duration][]): -// -// { -// "@type": "type.googleapis.com/google.protobuf.Duration", -// "value": "1.212s" -// } -// -message Any { - // A URL/resource name whose content describes the type of the - // serialized protocol buffer message. - // - // For URLs which use the scheme `http`, `https`, or no scheme, the - // following restrictions and interpretations apply: - // - // * If no scheme is provided, `https` is assumed. - // * The last segment of the URL's path must represent the fully - // qualified name of the type (as in `path/google.protobuf.Duration`). - // The name should be in a canonical form (e.g., leading "." is - // not accepted). - // * An HTTP GET on the URL must yield a [google.protobuf.Type][] - // value in binary format, or produce an error. - // * Applications are allowed to cache lookup results based on the - // URL, or have them precompiled into a binary to avoid any - // lookup. Therefore, binary compatibility needs to be preserved - // on changes to types. (Use versioned type names to manage - // breaking changes.) - // - // Schemes other than `http`, `https` (or the empty scheme) might be - // used with implementation specific semantics. - // - string type_url = 1; - - // Must be a valid serialized protocol buffer of the above specified type. - bytes value = 2; -} - -// Wrapper message for `bool`. -// -// The JSON representation for `BoolValue` is JSON `true` and `false`. -message BoolValue { - // The bool value. - bool value = 1; -} - -// Wrapper message for `uint32`. -// -// The JSON representation for `UInt32Value` is JSON number. -message UInt32Value { - // The uint32 value. - uint32 value = 1; -} - diff --git a/proto/xds/cds.proto b/proto/xds/cds.proto deleted file mode 100644 index 19712a0..0000000 --- a/proto/xds/cds.proto +++ /dev/null @@ -1,420 +0,0 @@ -syntax = "proto3"; - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - - -import "xds/base.proto"; -import "xds/envoy_base.proto"; - -// Configuration for a single upstream cluster. -// [#comment:next free field: 30] -message Cluster { - // Supplies the name of the cluster which must be unique across all clusters. - // The cluster name is used when emitting - // :ref:`statistics ` if :ref:`alt_stat_name - // ` is not provided. - // Any ``:`` in the cluster name will be converted to ``_`` when emitting statistics. - // By default, the maximum length of a cluster name is limited to 60 - // characters. This limit can be increased by setting the - // :option:`--max-obj-name-len` command line argument to the desired value. - string name = 1; - - // 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 - // `. - string alt_stat_name = 28; - - // Refer to :ref:`service discovery type ` - // for an explanation on each type. - enum DiscoveryType { - // Refer to the :ref:`static discovery type` - // for an explanation. - STATIC = 0; - - // Refer to the :ref:`strict DNS discovery - // type` - // for an explanation. - STRICT_DNS = 1; - - // Refer to the :ref:`logical DNS discovery - // type` - // for an explanation. - LOGICAL_DNS = 2; - - // Refer to the :ref:`service discovery type` - // for an explanation. - EDS = 3; - - // Refer to the :ref:`original destination discovery - // type` - // for an explanation. - ORIGINAL_DST = 4; - } - // The :ref:`service discovery type ` - // to use for resolving the cluster. - DiscoveryType type = 2; - - // Only valid when discovery type is EDS. - message EdsClusterConfig { - // Configuration for the source of EDS updates for this Cluster. - ConfigSource eds_config = 1; - - // 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. - string service_name = 2; - } - // Configuration to use for EDS updates for the Cluster. - EdsClusterConfig eds_cluster_config = 3; - - // The timeout for new network connections to hosts in the cluster. - Duration connect_timeout = 4; - - // Soft limit on size of the cluster’s connections read and write buffers. If - // unspecified, an implementation defined default is applied (1MiB). - UInt32Value per_connection_buffer_limit_bytes = 5; - - // Refer to :ref:`load balancer type ` architecture - // overview section for information on each type. - enum LbPolicy { - - // Refer to the :ref:`round robin load balancing - // policy` - // for an explanation. - ROUND_ROBIN = 0; - - // Refer to the :ref:`least request load balancing - // policy` - // for an explanation. - LEAST_REQUEST = 1; - - // Refer to the :ref:`ring hash load balancing - // policy` - // for an explanation. - RING_HASH = 2; - - // Refer to the :ref:`random load balancing - // policy` - // for an explanation. - RANDOM = 3; - - // Refer to the :ref:`original destination load balancing - // policy` - // for an explanation. - ORIGINAL_DST_LB = 4; - - // Refer to the :ref:`Maglev load balancing policy` - // for an explanation. - MAGLEV = 5; - } - // The :ref:`load balancer type ` to use - // when picking a host in the cluster. - LbPolicy lb_policy = 6; - - // If the service discovery type is - // :ref:`STATIC`, - // :ref:`STRICT_DNS` - // or :ref:`LOGICAL_DNS`, - // then hosts is required. - repeated Address hosts = 7; - - // Optional :ref:`active 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. - //repeated HealthCheck health_checks = 8; - - // 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. - UInt32Value max_requests_per_connection = 9; - - // Optional :ref:`circuit breaking ` for the cluster. - //CircuitBreakers circuit_breakers = 10; - - // The TLS configuration for connections to the upstream cluster. If no TLS - // configuration is specified, TLS will not be used for new connections. - // - // .. attention:: - // - // Server certificate verification is not enabled by default. Configure - // :ref:`trusted_ca` to enable - // verification. - //UpstreamTlsContext tls_context = 11; - - reserved 12; - - // Additional options when handling HTTP requests. These options will be applicable to both - // HTTP1 and HTTP2 requests. - //HttpProtocolOptions common_http_protocol_options = 29; - - // Additional options when handling HTTP1 requests. - //Http1ProtocolOptions http_protocol_options = 13; - - // 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 http2_protocol_options = 14; - - reserved 15; - - // If the DNS refresh rate is specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`LOGICAL_DNS`, - // this value is used as the cluster’s DNS refresh - // rate. If this setting is not specified, the value defaults to 5000. For - // cluster types other than - // :ref:`STRICT_DNS` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - Duration dns_refresh_rate = 16; - - // 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` and - // :ref:`LOGICAL_DNS`, - // this setting is - // ignored. - enum DnsLookupFamily { - AUTO = 0; - V4_ONLY = 1; - V6_ONLY = 2; - } - - // The DNS IP address resolution policy. If this setting is not specified, the - // value defaults to - // :ref:`AUTO`. - DnsLookupFamily dns_lookup_family = 17; - - // If DNS resolvers are specified and the cluster type is either - // :ref:`STRICT_DNS`, - // or :ref:`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` - // and :ref:`LOGICAL_DNS` - // this setting is ignored. - repeated Address dns_resolvers = 18; - - // If specified, outlier detection will be enabled for this upstream cluster. - // Each of the configuration values can be overridden via - // :ref:`runtime values `. - //OutlierDetection outlier_detection = 19; - - // The interval for removing stale hosts from a cluster type - // :ref:`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` - // this setting is ignored. - Duration cleanup_interval = 20; - - // 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. - BindConfig upstream_bind_config = 21; - - // Optionally divide the endpoints in this cluster into subsets defined by - // endpoint metadata and selected by route and weighted cluster metadata. - message LbSubsetConfig { - - // 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. - enum LbSubsetFallbackPolicy { - NO_FALLBACK = 0; - ANY_ENDPOINT = 1; - DEFAULT_SUBSET = 2; - } - - // The behavior used when no endpoint subset matches the selected route's - // metadata. The value defaults to - // :ref:`NO_FALLBACK`. - LbSubsetFallbackPolicy fallback_policy = 1; - - // Specifies the default subset of endpoints used during fallback if - // fallback_policy is - // :ref:`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`. - Struct default_subset = 2; - - // Specifications for subsets. - message LbSubsetSelector { - // List of keys to match with the weighted cluster metadata. - repeated string keys = 1; - } - - // 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. - repeated LbSubsetSelector subset_selectors = 3; - } - - // Configuration for load balancing subsetting. - LbSubsetConfig lb_subset_config = 22; - - // Specific configuration for the :ref:`RingHash` - // load balancing policy. - message RingHashLbConfig { - // Minimum hash ring size, i.e. total virtual nodes. A larger size - // will provide better request distribution since each host in the - // cluster will have more virtual nodes. Defaults to 1024. In the case - // that total number of hosts is greater than the minimum, each host will - // be allocated a single virtual node. - //UInt64Value minimum_ring_size = 1; - - // [#not-implemented-hide:] Hide from docs. - message DeprecatedV1 { - // Defaults to true, meaning that std::hash is used to hash hosts onto - // the ketama ring. std::hash can vary by platform. For this reason, - // Envoy will eventually use `xxHash `_ - // by default. This field exists for - // migration purposes and will eventually be deprecated. Set it to false - // to use `xxHash `_ now. - BoolValue use_std_hash = 1; - } - - // Deprecated settings from v1 config. - // [#not-implemented-hide:] Hide from docs. - DeprecatedV1 deprecated_v1 = 2 [deprecated = true]; - } - - // Optional configuration for the load balancing algorithm selected by - // LbPolicy. Currently only - // :ref:`RING_HASH` - // has additional configuration options. - // Specifying ring_hash_lb_config without setting the LbPolicy to - // :ref:`RING_HASH` - // will generate an error at runtime. - oneof lb_config { - // Optional configuration for the Ring Hash load balancing policy. - RingHashLbConfig ring_hash_lb_config = 23; - } - - // Common configuration for all load balancer implementations. - message CommonLbConfig { - // Configures the :ref:`healthy panic threshold `. - // If not specified, the default is 50%. - // - // .. note:: - // The specified percent will be truncated to the nearest 1%. -// Percent healthy_panic_threshold = 1; -// message ZoneAwareLbConfig { -// // [#not-implemented-hide:] -// // 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 `. -// // * :ref:`Zone aware routing support `. -// Percent routing_enabled = 1; -// // [#not-implemented-hide:] -// // 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 `. -// // * :ref:`Zone aware routing support `. -// UInt64Value min_cluster_size = 2; -// } - } - - // Common configuration for all load balancer implementations. - CommonLbConfig common_lb_config = 27; - - // Optional custom transport socket implementation to use for upstream connections. - //TransportSocket transport_socket = 24; - - // 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 metadata = 25; - - enum ClusterProtocolSelection { - // Cluster can only operate on one of the possible upstream protocols (HTTP1.1, HTTP2). - // If :ref:`http2_protocol_options ` are - // present, HTTP2 will be used, otherwise HTTP1.1 will be used. - USE_CONFIGURED_PROTOCOL = 0; - // Use HTTP1.1 or HTTP2, depending on which one is used on the downstream connection. - USE_DOWNSTREAM_PROTOCOL = 1; - } - - // Determines how Envoy selects the protocol used to speak to upstream hosts. - ClusterProtocolSelection protocol_selection = 26; -} - -// An extensible structure containing the address Envoy should bind to when -// establishing upstream connections. -message UpstreamBindConfig { - // The address Envoy should bind to when establishing upstream connections. - Address source_address = 1; -} - -// Configuration for :ref:`listeners `, :ref:`clusters -// `, :ref:`routes -// `, :ref:`endpoints -// ` etc. may either be sourced from the -// filesystem or from an xDS API source. Filesystem configs are watched with -// inotify for updates. -message ConfigSource { - oneof config_source_specifier { - // Path on the filesystem to source and watch for configuration updates. - // - // .. note:: - // - // The path to the source must exist at config load time. - // - // .. note:: - // - // Envoy will only watch the file path for *moves.* This is because in general only moves - // are atomic. The same method of swapping files as is demonstrated in the - // :ref:`runtime documentation ` can be used here also. - string path = 1; - // API configuration source. - //ApiConfigSource api_config_source = 2; - // When set, ADS will be used to fetch resources. The ADS API configuration - // source in the bootstrap configuration is used. - AggregatedConfigSource ads = 3; - } -} - -message AggregatedConfigSource { -} - - diff --git a/proto/xds/eds.proto b/proto/xds/eds.proto deleted file mode 100644 index 64f8581..0000000 --- a/proto/xds/eds.proto +++ /dev/null @@ -1,121 +0,0 @@ -syntax = "proto3"; - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - -import "xds/base.proto"; -import "xds/envoy_base.proto"; - -// 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. For a given cluster, the -// effective weight of a host is its load_balancing_weight multiplied by the -// load_balancing_weight of its Locality. -message ClusterLoadAssignment { - // Name of the cluster. This will be the :ref:`service_name - // ` value if specified - // in the cluster :ref:`EdsClusterConfig - // `. - string cluster_name = 1; - - // List of endpoints to load balance to. - repeated LocalityLbEndpoints endpoints = 2; - - // // Load balancing policy settings. - // message Policy { - // // Percentage of traffic (0-100) that should be dropped. This - // // action allows protection of upstream hosts should they unable to - // // recover from an outage or should they be unable to autoscale and hence - // // overall incoming traffic volume need to be trimmed to protect them. - // // [#v2-api-diff: This is known as maintenance mode in v1.] - // double drop_overload = 1; - // } - // - // // Load balancing policy settings. - // Policy policy = 4; -} - -// 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. -message LocalityLbEndpoints { - // Identifies location of where the upstream hosts run. - Locality locality = 1; - - // The group of endpoints belonging to the locality specified. - repeated LbEndpoint lb_endpoints = 2; - - // Optional: Per priority/region/zone/sub_zone weight - range 1-128. 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. - // - // Weights must be specified for either all localities in a given priority - // level or none. - // - // If unspecified, each locality is presumed to have equal weight in a - // cluster. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - UInt32Value load_balancing_weight = 3; - - // 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. - uint32 priority = 5; -} - -// An Endpoint that Envoy can route traffic to. -message LbEndpoint { - // Upstream host identifier - Endpoint endpoint = 1; - - // [#not-implemented-hide:] Optional health status when known and supplied by - // EDS server. - //core.HealthStatus health_status = 2; - - // 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 ForwardAction metadata_match field - // to subset the endpoints considered in cluster load balancing. - Metadata metadata = 3; - - // The optional load balancing weight of the upstream host, in the range 1 - - // 128. 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. - // - // .. attention:: - // - // The limit of 128 is somewhat arbitrary, but is applied due to performance - // concerns with the current implementation and can be removed when - // `this issue `_ is fixed. - UInt32Value load_balancing_weight = 4; -} - -// Upstream host identifier. -message Endpoint { - Address address = 1; -} - diff --git a/proto/xds/envoy_base.proto b/proto/xds/envoy_base.proto deleted file mode 100644 index e2ddd69..0000000 --- a/proto/xds/envoy_base.proto +++ /dev/null @@ -1,124 +0,0 @@ -syntax = "proto3"; - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - - -import "xds/base.proto"; - -// Identifies location of where either Envoy runs or where upstream hosts run. -message Locality { - // Region this :ref:`zone ` belongs to. - string region = 1; - - // 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 `, - // either in this message or via :option:`--service-zone`. The meaning of zone - // is context dependent, e.g. `Availability Zone (AZ) - // `_ - // on AWS, `Zone `_ on - // GCP, etc. - string zone = 2; - - // 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. - string sub_zone = 3; -} - -message SocketAddress { - enum Protocol { - TCP = 0; - // [#not-implemented-hide:] - UDP = 1; - } - Protocol protocol = 1; - // The address for this socket. :ref:`Listeners ` will bind - // to the address or outbound connections will be made. An empty address is - // not allowed, specify ``0.0.0.0`` or ``::`` to bind any. It's still possible to - // distinguish on an address via the prefix/suffix matching in - // FilterChainMatch after connection. For :ref:`clusters - // `, an address may be either an IP or - // hostname to be resolved via DNS. If it is a hostname, :ref:`resolver_name - // ` should be set unless default - // (i.e. DNS) resolution is expected. - string address = 2; - oneof port_specifier { - uint32 port_value = 3; - // This is only valid if :ref:`resolver_name - // ` is specified below and the - // named resolver is capable of named port resolution. - string named_port = 4; - } - // The name of the resolver. This must have been registered with Envoy. If this is - // empty, a context dependent default applies. If address is a hostname this - // should be set for resolution other than DNS. If the address is a concrete - // IP address, no resolution will occur. - string resolver_name = 5; - - // When binding to an IPv6 address above, this enables `IPv4 compatibity - // `_. Binding to ``::`` will - // allow both IPv4 and IPv6 connections, with peer IPv4 addresses mapped into - // IPv6 space as ``::FFFF:``. - bool ipv4_compat = 6; -} - -// Metadata provides additional inputs to filters based on matched listeners, -// filter chains, routes and endpoints. It is structured as a map 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. -// -// 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": }}`` This indicates the canary status of an -// endpoint and is also used during header processing -// (x-envoy-upstream-canary) and for stats purposes. -message Metadata { - // Key is the reverse DNS filter name, e.g. com.acme.widget. The envoy.* - // namespace is reserved for Envoy's built-in filters. - map filter_metadata = 1; -} - -// 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. -message Address { - oneof address { - SocketAddress socket_address = 1; - Pipe pipe = 2; - } -} - -message Pipe { - // 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. - string path = 1; -} - - -message BindConfig { - // The address to bind to when creating a socket. - SocketAddress source_address = 1; -} - -// CidrRange specifies an IP Address and a prefix length to construct -// the subnet mask for a `CIDR `_ range. -message CidrRange { - // IPv4 or IPv6 address, e.g. ``192.0.0.0`` or ``2001:db8::``. - string address_prefix = 1; - // Length of prefix, e.g. 0, 32. - UInt32Value prefix_len = 2; -} - diff --git a/proto/xds/envoy_simplified.proto b/proto/xds/envoy_simplified.proto deleted file mode 100644 index 79f93de..0000000 --- a/proto/xds/envoy_simplified.proto +++ /dev/null @@ -1,136 +0,0 @@ -syntax = "proto3"; - - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - - -import "xds/base.proto"; -import "xds/envoy_base.proto"; - -// 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. -message Node { - // 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 `, :ref:`CDS - // `, and :ref:`HTTP tracing - // `, either in this message or via - // :option:`--service-node`. - string id = 1; - - // 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 `, :ref:`health check cluster - // verification `, - // :ref:`runtime override directory `, - // :ref:`user agent addition `, - // :ref:`HTTP global rate limiting `, - // :ref:`CDS `, and :ref:`HTTP tracing - // `, either in this message or via - // :option:`--service-cluster`. - string cluster = 2; - - // Opaque metadata extending the node identifier. Envoy will pass this - // directly to the management server. - Struct metadata = 3; - - // Locality specifying where the Envoy instance is running. - Locality locality = 4; - - // 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. - string build_version = 5; -} - -// A DiscoveryRequest requests a set of versioned resources of the same type for -// a given Envoy node on some API. -message DiscoveryRequest { - // 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. - string version_info = 1; - - // The node making the request. - Node node = 2; - - // 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 expect empty resource_names, since this is global - // discovery for the Envoy instance. 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. - repeated string resource_names = 3; - - // 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. - string type_url = 4; - - // nonce corresponding to DiscoveryResponse being ACK/NACKed. See above - // discussion on version_info and the DiscoveryResponse nonce comment. This - // may be empty if no nonce is available, e.g. at startup or for non-stream - // xDS implementations. - string response_nonce = 5; - - // This is populated when the previous :ref:`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. - // google.rpc.Status - Status error_detail = 6; - - // Extension to Envoy - allow push - repeated Any resources = 7; -} - -message DiscoveryResponse { - // The version of the response data. - string version_info = 1; - - // The response resources. These resources are typed and depend on the API being called. - // google.protobuf.Any - repeated Any resources = 2; - - // [#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. - bool canary = 3; - - // Type URL for resources. This must be consistent with the type_url in the - // Any messages for resources if resources is non-empty. This effectively - // identifies the xDS API when muxing over ADS. - string type_url = 4; - - // 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. - string nonce = 5; -} - - - diff --git a/proto/xds/lds.proto b/proto/xds/lds.proto deleted file mode 100644 index 121c023..0000000 --- a/proto/xds/lds.proto +++ /dev/null @@ -1,420 +0,0 @@ -syntax = "proto3"; - -package xds; -option go_package="github.com/costinm/grpc-mesh/gen/proto/go/xds"; -option java_generic_services = true; - -import "xds/base.proto"; -import "xds/envoy_base.proto"; - - -message Listener { - // 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 ` a unique name must be provided. - // By default, the maximum length of a listener's name is limited to 60 characters. This limit can - // be increased by setting the :option:`--max-obj-name-len` command line argument to the desired - // value. - string name = 1; - - // 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 address = 2; - - // A list of filter chains to consider for this listener. The - // :ref:`FilterChain ` with the most specific - // :ref:`FilterChainMatch ` criteria is used on a - // connection. - // - // .. attention:: - // - // In the current version, multiple filter chains are supported **only** so that SNI can be - // configured. See the :ref:`FAQ entry ` on how to configure SNI for more - // information. When multiple filter chains are configured, each filter chain must have an - // **identical** set of :ref:`filters `. If the - // filters differ, the configuration will fail to load. In the future, this limitation will be - // relaxed such that different filters can be used depending on which filter chain matches - // (based on SNI or some other parameter). - repeated FilterChain filter_chains = 3; - - // 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 ` - // :ref:`listener filter ` instead. - // - // Note that hand off to another listener is *NOT* performed without this flag. Once - // :ref:`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. - BoolValue use_original_dst = 4 [deprecated = true]; - - // Soft limit on size of the listener’s new connection read and write buffers. - // If unspecified, an implementation defined default is applied (1MiB). - UInt32Value per_connection_buffer_limit_bytes = 5; - - // Listener metadata. - Metadata metadata = 6; - - // [#not-implemented-hide:] - message DeprecatedV1 { - // 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. - // - // [V2-API-DIFF] 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. - BoolValue bind_to_port = 1; - } - - // [#not-implemented-hide:] - DeprecatedV1 deprecated_v1 = 7; - - enum DrainType { - // Drain in response to calling /healthcheck/fail admin endpoint (along with the health check - // filter), listener removal/modification, and hot restart. - DEFAULT = 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. - MODIFY_ONLY = 1; - } - - // The type of draining to perform at a listener-wide level. - DrainType drain_type = 8; - - // 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 `. Order matters as the - // filters are processed sequentially right after a socket has been accepted by the listener, and - // before a connection is created. - //repeated ListenerFilter listener_filters = 9; - - // 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. Requires Envoy to run with the *CAP_NET_ADMIN* capability. Defaults to false. - bool transparent = 10; -} - -// A filter chain wraps a set of match criteria, an option TLS context, a set of filters, and -// various other parameters. -message FilterChain { - // The criteria to use when matching a connection to this filter chain. - FilterChainMatch filter_chain_match = 1; - - // The TLS context for this filter chain. - DownstreamTlsContext tls_context = 2; - - // 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. - repeated Filter filters = 3; - - // 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. - BoolValue use_proxy_proto = 4; - - // [#not-implemented-hide:] filter chain metadata. - Metadata metadata = 5; - - // See :ref:`base.TransportSocket` description. - TransportSocket transport_socket = 6; -} - -// Specifies the match criteria for selecting a specific filter chain for a -// listener. -message FilterChainMatch { - // If non-empty, the SNI domains to consider. May contain a wildcard prefix, - // e.g. ``*.example.com``. - // - // .. attention:: - // - // See the :ref:`FAQ entry ` on how to configure SNI for more - // information. - repeated string sni_domains = 1; - - // 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. - // [#not-implemented-hide:] - repeated CidrRange prefix_ranges = 3; - - // 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:] - string address_suffix = 4; - - // [#not-implemented-hide:] - UInt32Value suffix_len = 5; - - // 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. - // [#not-implemented-hide:] - repeated CidrRange source_prefix_ranges = 6; - - // 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. - // [#not-implemented-hide:] - repeated UInt32Value source_ports = 7; - - // Optional destination port to consider when use_original_dst is set on the - // listener in determining a filter chain match. - // [#not-implemented-hide:] - UInt32Value destination_port = 8; -} - -message Filter { - // The name of the filter to instantiate. The name must match a supported - // filter. The built-in filters are: - // - // [#comment:TODO(mattklein123): Auto generate the following list] - // * :ref:`envoy.client_ssl_auth` - // * :ref:`envoy.echo ` - // * :ref:`envoy.http_connection_manager ` - // * :ref:`envoy.mongo_proxy ` - // * :ref:`envoy.ratelimit ` - // * :ref:`envoy.redis_proxy ` - // * :ref:`envoy.tcp_proxy ` - string name = 1; - - // Filter specific configuration which depends on the filter being - // instantiated. See the supported filters for further documentation. - Struct config = 2; - - // [#not-implemented-hide:] - message DeprecatedV1 { - string type = 1; - } - - // [#not-implemented-hide:] - DeprecatedV1 deprecated_v1 = 3 [deprecated = true]; -} - -// Configuration for transport socket in :ref:`listeners ` and -// :ref:`clusters `. If the configuration is -// empty, a default transport socket implementation and configuration will be -// chosen based on the platform and existence of tls_context. -message TransportSocket { - // The name of the transport socket to instantiate. The name must match a supported transport - // socket implementation. - string name = 1; - - // Implementation specific configuration which depends on the implementation being instantiated. - // See the supported transport socket implementations for further documentation. - Struct config = 2; -} - -message DownstreamTlsContext { - // Common TLS context settings. - CommonTlsContext common_tls_context = 1; - - // If specified, Envoy will reject connections without a valid client - // certificate. - BoolValue require_client_certificate = 2; - - // If specified, Envoy will reject connections without a valid and matching SNI. - // [#not-implemented-hide:] - BoolValue require_sni = 3; - - // oneof session_ticket_keys_type { - // // TLS session ticket key settings. - // TlsSessionTicketKeys session_ticket_keys = 4; - // - // // [#not-implemented-hide:] - // SdsSecretConfig session_ticket_keys_sds_secret_config = 5; - // } -} - -// TLS context shared by both client and server TLS contexts. -message CommonTlsContext { - // TLS protocol versions, cipher suites etc. - TlsParameters tls_params = 1; - - // Multiple TLS certificates can be associated with the same context. - // E.g. to allow both RSA and ECDSA certificates, two TLS certificates can be configured. - // - // .. attention:: - // - // Although this is a list, currently only a single certificate is supported. This will be - // relaxed in the future. - repeated TlsCertificate tls_certificates = 2; - - // [#not-implemented-hide:] - //repeated SdsSecretConfig tls_certificate_sds_secret_configs = 6; - - // How to validate peer certificates. - CertificateValidationContext validation_context = 3; - - // 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 ` 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. - repeated string alpn_protocols = 4; - - // These fields are deprecated and only are used during the interim v1 -> v2 - // transition period for internal purposes. They should not be used outside of - // the Envoy binary. [#not-implemented-hide:] - message DeprecatedV1 { - string alt_alpn_protocols = 1; - } - - // [#not-implemented-hide:] - DeprecatedV1 deprecated_v1 = 5 [deprecated = true]; -} - -message CertificateValidationContext { - // 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 - // `, - // :ref:`verify_certificate_hash - // `, or - // :ref:`verify_subject_alt_name - // `) is also - // specified. - // - // See :ref:`the TLS overview ` for a list of common - // system CA locations. - DataSource trusted_ca = 1; - - // If specified, Envoy will verify (pin) the hex-encoded SHA-256 hash of - // the presented certificate. - repeated string verify_certificate_hash = 2; - - // If specified, Envoy will verify (pin) base64-encoded SHA-256 hash of - // the Subject Public Key Information (SPKI) of the presented certificate. - // This is the same format as used in HTTP Public Key Pinning. - // [#not-implemented-hide:] - repeated string verify_spki_sha256 = 3; - - // An optional list of subject alternative names. If specified, Envoy will verify that - // the certificate’s subject alternative name matches one of the specified values. - repeated string verify_subject_alt_name = 4; - - // [#not-implemented-hide:] Must present a signed time-stamped OCSP response. - BoolValue require_ocsp_staple = 5; - - // [#not-implemented-hide:] Must present signed certificate time-stamp. - BoolValue require_signed_certificate_timestamp = 6; - - // An optional `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. - DataSource crl = 7; -} - - -message TlsCertificate { - // The TLS certificate chain. - DataSource certificate_chain = 1; - - // The TLS private key. - DataSource private_key = 2; - - // [#not-implemented-hide:] - DataSource password = 3; - - // [#not-implemented-hide:] - DataSource ocsp_staple = 4; - - // [#not-implemented-hide:] - repeated DataSource signed_certificate_timestamp = 5; -} - -// Data source consisting of either a file or an inline value. -message DataSource { - oneof specifier { - - // Local filesystem data source. - string filename = 1; - - // Bytes inlined in the configuration. - bytes inline_bytes = 2; - - // String inlined in the configuration. - string inline_string = 3; - } -} - - -message TlsParameters { - enum TlsProtocol { - // Envoy will choose the optimal TLS version. - TLS_AUTO = 0; - - // TLS 1.0 - TLSv1_0 = 1; - - // TLS 1.1 - TLSv1_1 = 2; - - // TLS 1.2 - TLSv1_2 = 3; - - // TLS 1.3 - TLSv1_3 = 4; - } - - // Minimum TLS protocol version. - TlsProtocol tls_minimum_protocol_version = 1; - - // Maximum TLS protocol version. - TlsProtocol tls_maximum_protocol_version = 2; - - // If specified, the TLS listener will only support the specified `cipher list - // `_. - // If not specified, the default list: - // - // .. code-block:: none - // - // [ECDHE-ECDSA-AES128-GCM-SHA256|ECDHE-ECDSA-CHACHA20-POLY1305] - // [ECDHE-RSA-AES128-GCM-SHA256|ECDHE-RSA-CHACHA20-POLY1305] - // ECDHE-ECDSA-AES128-SHA256 - // ECDHE-RSA-AES128-SHA256 - // ECDHE-ECDSA-AES128-SHA - // ECDHE-RSA-AES128-SHA - // AES128-GCM-SHA256 - // AES128-SHA256 - // AES128-SHA - // ECDHE-ECDSA-AES256-GCM-SHA384 - // ECDHE-RSA-AES256-GCM-SHA384 - // ECDHE-ECDSA-AES256-SHA384 - // ECDHE-RSA-AES256-SHA384 - // ECDHE-ECDSA-AES256-SHA - // ECDHE-RSA-AES256-SHA - // AES256-GCM-SHA384 - // AES256-SHA256 - // AES256-SHA - // - // will be used. - repeated string cipher_suites = 3; - - // If specified, the TLS connection will only support the specified ECDH - // curves. If not specified, the default curves (X25519, P-256) will be used. - repeated string ecdh_curves = 4; -} diff --git a/store/conf.go b/store/conf.go new file mode 100644 index 0000000..bb5e89b --- /dev/null +++ b/store/conf.go @@ -0,0 +1,211 @@ +package store + +import ( + "log" + "os" + "path/filepath" + "strconv" + "strings" + "sync" + "time" + + "github.com/costinm/meshauth" + "sigs.k8s.io/yaml" +) + +// TODO: map FOO_BAR to foo.bar, construct yaml equivalent +// Reload the files +// Dynamic Flags - https://github.com/mwitkow/go-flagz, fortio: + +// Simple file-based config and secret store. +// +// Implements a Store interface with List/Get/Set interface. +// +// TODO: Watch interface - using messages/pubsub !!! +// +// TODO: switch to yaml, support K8S style +// +// TODO: integrate with krun, use the REST as a config source, possibly with watcher + +// Conf impplements a ConfSource and is used for bootstrap info. +// It may be used for general configuration of the app as well. +type Conf struct { + // Base directory. If not set, no config will be saved and read + // will only return env or in-memory configs. First will be used for write. + base []string + + // Flattened config - can be backed by env variables. + // It is configured from Android side with the config (settings) + // ssid, pass, vpn_ext. + Conf map[string]string `json:"Conf,omitempty"` + + // additional stores. Key is the prefix for the name. + //stores map[string]ugatesvc.Store + + m sync.RWMutex + // if base is empty, this will be used to persist the configs. + inMemory map[string][]byte + + // Additional/federated sources + Sources []meshauth.Store +} + + +func (c *Conf) List(name string, tp string) ([]string, error) { + res := []string{} + + return res, nil +} + +// Secrets - pem, acl +// From config dir, fallback to .ssh, .lego and /etc/certs +// +// "name" may be a hostname +func (c *Conf) Get(name string) ([]byte, error) { + c.m.RLock() + inmd := c.inMemory[name] + c.m.RUnlock() + if inmd != nil { + return inmd, nil + } + + envName := strings.ReplaceAll(name, ".", "_") + envName = strings.ReplaceAll(envName, "/", "_") + envd := os.Getenv(envName) + if envd != "" { + return []byte(envd), nil + } + + for _, b := range c.base { + l := filepath.Join(b, name) + + if _, err := os.Stat(l); err == nil { // || !os.IsNotExist(err) + res, err := os.ReadFile(l) + if err == nil { + return res, nil + } + } + if _, err := os.Stat(l + ".json"); err == nil { // || !os.IsNotExist(err) + res, err := os.ReadFile(l + ".json") + if err == nil { + return res, nil + } + } + if _, err := os.Stat(l + ".yaml"); err == nil { // || !os.IsNotExist(err) + res, err := os.ReadFile(l + ".yaml") + if err == nil { + return res, nil + } + } + } + + // name may be a hostname - use it to load ACME certificate for the host. + + return nil, nil +} + +func (c *Conf) Set(conf string, data []byte) error { + if c == nil || c.base == nil || len(c.base) == 0 { + // In memory + c.m.Lock() + c.inMemory[conf] = data + c.m.Unlock() + + return nil + } + err := os.WriteFile(c.base[0]+conf, data, 0700) + if err != nil { + log.Println("Error saving ", err, c.base, conf) + } + return err +} + +// Store is a minimal store for small number of small objects. +// Good for configs in a namespace. +type Store interface { + // Get an object blob + Get(name string) ([]byte, error) + + // Save a blob. + Set(conf string, data []byte) error + + // List the configs starting with a prefix, of a given type. + // Not suitable for large collections - use a database ! + List(name string, tp string) ([]string, error) +} + +type BlobStore interface { + + GetChunk(id string, off int, len int) ([]byte, error) + + SaveChunk(id string, off int, data []byte) +} + +type BlockStore interface { + + GetBlock(id string, nr int) ([]byte, error) + + SaveBlock(id string, nr int, data []byte) + +} + +type Record struct { + Data []byte + + Expiration time.Time + + Id string + +} + + + +func Get(h2 Store, name string, to interface{}) error { + raw, err := h2.Get(name) + if err != nil { + log.Println("name:", err) + raw = []byte("{}") + //return nil + } + if len(raw) > 0 { + // TODO: detect yaml or proto ? + //if err := json.Unmarshal(raw, to); err != nil { + // log.Println(err) + // return err + //} + if err := yaml.Unmarshal(raw, to); err != nil { + log.Println(err) + return err + } + } + + return nil +} + +// ConfInt returns an string setting, with default value, from the Store. +func ConfStr(cs meshauth.Store, name, def string) string { + if cs == nil { + return def + } + b, _ := cs.Get(name) + if b == nil { + return def + } + return string(b) +} + +// ConfInt returns an int setting, with default value, from the Store. +func ConfInt(cs meshauth.Store, name string, def int) int { + if cs == nil { + return def + } + b, _ := cs.Get(name) + if b == nil { + return def + } + v, err := strconv.Atoi(string(b)) + if err != nil { + return def + } + return v +} diff --git a/test/e2e.go b/test/e2e.go deleted file mode 100644 index 0553b85..0000000 --- a/test/e2e.go +++ /dev/null @@ -1,283 +0,0 @@ -package test - -import ( - "bytes" - "errors" - "fmt" - "io" - "net" - - "github.com/costinm/hbone" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/cfgfs" - "github.com/costinm/ugate/pkg/ugatesvc" -) - -// WIP: The e2e tests should work with either 'external' (already setup) servers or start -// an equivalent set. The config and keys in this file are matching the -// cmd/ugate/testdata/{alice,bob,carol}. -// If tests need the status, they should use the debug endpoints. -// For events, they should use the messaging endpoints. -// -// Some tests may start additional uGates for internal functionality testing. -// - -// WIP: updating the ports and scenarios -var ( - // Base port 6000 - // Uses H2R to connect to Gate - Alice *ugatesvc.UGate - - // 6100 - // Uses QUIC to connect to Gate - Bob *ugatesvc.UGate - - // Client - in process. - // 6200 - Carol *ugatesvc.UGate - - // Gateway/control plane for Bob and Alice - // 6300 - Gate *ugatesvc.UGate - - // Echo - acts as a 'server' providing the echo service. - // 6400 - Echo *ugatesvc.UGate -) - -func InitEcho(port int) *ugatesvc.UGate { - cs := cfgfs.NewConf() - ug := ugatesvc.NewGate(&net.Dialer{}, nil, &ugate.MeshSettings{ - BasePort: port, - }, cs) - - // Echo - TCP - ug.StartListener(&hbone.Listener{ - Address: fmt.Sprintf("0.0.0.0:%d", port+12), - Handler: &ugatesvc.EchoHandler{}, - }) - ug.Mux.Handle("/", &ugatesvc.EchoHandler{}) - return ug -} - -// InitTestServer creates a node with the given config. -func InitTestServer(kubecfg string, cfg *ugate.MeshSettings, ext func(*ugatesvc.UGate)) *ugatesvc.UGate { - basePort := cfg.BasePort - cfg.Domain = "test.cluster.local" - cs := cfgfs.NewConf() - cs.Set("secret/"+cfg.Name+"."+cfg.Domain, []byte(kubecfg)) - - ug := ugatesvc.NewGate(&net.Dialer{}, nil, cfg, cs) - - // Similar with the cmd, add extensions to avoid deps in core. - if ext != nil { - ext(ug) - } - - // Echo - TCP - ug.StartListener(&hbone.Listener{ - Address: fmt.Sprintf("0.0.0.0:%d", basePort+11), - Protocol: "tls", - Handler: &ugatesvc.EchoHandler{}, - }) - ug.StartListener(&hbone.Listener{ - Address: fmt.Sprintf("0.0.0.0:%d", basePort+12), - Handler: &ugatesvc.EchoHandler{}, - }) - ug.Mux.Handle("/", &ugatesvc.EchoHandler{}) - return ug -} - -var chunk1 = []byte("Hello world") -var chunk2 = []byte("chunk2") - -// CheckEcho will verify the behavior of the echo server. -// - write chunk1 (to verify we don't hang ) -// - read response from server - should include metadata for the request plus chunk1 -// - -func CheckEcho(in io.Reader, out io.Writer) (string, error) { - - d := make([]byte, 2048) - // RoundTripStart with a write - client send first (echo will wait, to verify that body is not cached) - _, err := out.Write(chunk1) - if err != nil { - return "", err - } - - //ab.SetDeadline(time.Now().StartListener(5 * time.Second)) - n, err := in.Read(d) - if err != nil { - return "", err - } - - idx := bytes.IndexByte(d[0:n], '\n') - if idx < 0 { - return string(d[0:n]), errors.New("missing header") - } - js := string(d[0:idx]) - idx++ // skip \n - // Server writes 2 chunkes - the header and what we wrote. There is a flush, but - // the transports don't guarantee boundary. - start := 0 - if idx < n { - copy(d[0:], d[idx:n]) - start = n - idx - n = start - } else { - n = 0 - } - if n < len(chunk1) { - n, err = in.Read(d[start:]) - if err != nil { - return "", err - } - n += start - } - - if !bytes.Equal(chunk1, d[0:n]) { - return js, errors.New("miss-matched result1 " + string(d[0:n])) - } - - _, err = out.Write(chunk2) - if err != nil { - return "", err - } - - n, err = in.Read(d) - if err != nil { - return "", err - } - - if !bytes.Equal(chunk2, d[0:n]) { - return js, errors.New("miss-matched result " + string(d[0:n])) - } - - /* _, err = out.Write([]byte("close\n")) - if err != nil { - return "", err - } - */ - if cw, ok := out.(ugate.CloseWriter); ok { - cw.CloseWrite() - } else { - out.(io.Closer).Close() - } - // Possible issue: the server has sent FIN, but reader (h3 response body) did not - // receive it. - - n, err = in.Read(d) - if err != io.EOF { - return "", err - } - - return js, nil -} - -// The tests will use 3 fixed identies, to keep things simple. - -// Alice runs on 14000 ( testdata/alice for standalone debug ). -const ALICE_ID = "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ" -const ALICE_PORT = 6007 -const ALICE_VIP = "fd00::f054:f1ab:89ed:c146" - -const BOB_ID = "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA" -const BOB_PORT = 6107 -const BOB_VIP = "fd00::156:6388:1fdf:cb69" - -const CAROL_PORT = 6207 -const CAROL_ID = "IN7E4J4VZ66TJZFY4ZABEM6STXIBEU7GVAVOE5NCM5DLVRIDJNFQ" -const CAROL_VIP = "fd00::e524:71c0:d68e:f0ce" - -const ALICE_KEYS = ` -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwekNDQVhtZ0F3SUJBZ0lSQUxRSWhRdytlL1h2RGhabjFjZkxwZkF3Q2dZSUtvWkl6ajBFQXdJd09URVcKTUJRR0ExVUVDaE1OYUM1M1pXSnBibVl1YVc1bWJ6RWZNQjBHQTFVRUF4TVdZMjl6ZEdsdU1UWXVhQzUzWldKcApibVl1YVc1bWJ6QWVGdzB5TVRBME1UVXhNekUwTXpsYUZ3MHlNakEwTVRVeE16RTBNemxhTURreEZqQVVCZ05WCkJBb1REV2d1ZDJWaWFXNW1MbWx1Wm04eEh6QWRCZ05WQkFNVEZtTnZjM1JwYmpFMkxtZ3VkMlZpYVc1bUxtbHUKWm04d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUU0ROL1UwZEk3UGpIdWx1V3BSdzR5akxmagpJblZiNE9uSEVRTGlVTkVUZW94SlZXQUVzRitCamo5Yzk2RU1YRElibitVZ3cvYVRldkJVOGF1SjdjRkdvMkl3CllEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUdDQ3NHQVFVRkJ3TUMKTUF3R0ExVWRFd0VCL3dRQ01BQXdJUVlEVlIwUkJCb3dHSUlXWTI5emRHbHVNVFl1YUM1M1pXSnBibVl1YVc1bQpiekFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUJWcGNQUG94cjV4ZS8vSUdCcUVLVUsvZEhXNXlvc203RFdPNFN0CndVRkFaQUloQUp3NjExSXNBMmN1NFpQczdSQ2NmQ29EUlh2UWpQeUZQV1VZSzFFT1dOdTIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2FmWGdCYzkwVVBGNWJ4QjMKeC9JMWFTUXdGVkR0OXFlSmVIUjRLQ0NPUmlTaFJBTkNBQVRTRE4vVTBkSTdQakh1bHVXcFJ3NHlqTGZqSW5WYgo0T25IRVFMaVVORVRlb3hKVldBRXNGK0JqajljOTZFTVhESWJuK1Vndy9hVGV2QlU4YXVKN2NGRwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ" - } - } - ], - "current-context": "default" -} -` - -const BOB_KEYS = ` -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwekNDQVhpZ0F3SUJBZ0lRS1RXUlp4WWUyTzIxa2doRkNnL1Z0VEFLQmdncWhrak9QUVFEQWpBNU1SWXcKRkFZRFZRUUtFdzF0TG5kbFltbHVaaTVwYm1adk1SOHdIUVlEVlFRREV4WmpiM04wYVc0eE5pNXRMbmRsWW1sdQpaaTVwYm1adk1CNFhEVEl4TURReU5ERXpORGt3TlZvWERUSXlNRFF5TkRFek5Ea3dOVm93T1RFV01CUUdBMVVFCkNoTU5iUzUzWldKcGJtWXVhVzVtYnpFZk1CMEdBMVVFQXhNV1kyOXpkR2x1TVRZdWJTNTNaV0pwYm1ZdWFXNW0KYnpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQlBWUUVCRjBMMWZnTzlrQVpUS0RwdzZ5ZlI5WgpzWVh1dGJwY0trTUhoV3BJTkw0SDFxcDgxc0VOZ21KbmdIbnA4VU50NWxvbHA3VU5BVlpqaUIvZnkybWpZakJnCk1BNEdBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXcKREFZRFZSMFRBUUgvQkFJd0FEQWhCZ05WSFJFRUdqQVlnaFpqYjNOMGFXNHhOaTV0TG5kbFltbHVaaTVwYm1adgpNQW9HQ0NxR1NNNDlCQU1DQTBrQU1FWUNJUUMrbytLbDZ4cklaNEtUeVNTQWczd0p4L2pZOFFzWGlOb2VUZ1lrCmdYeTl4QUloQVBORlpHRm44UTBiMkFuSUI4LzFHR0Z0bzcwT3VWczF3cG1qRzByK3lQZnAKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ3o1YXFiMmhIUDlkcjQ5QXMKMXRuM0Vwclg0TmdSbHQ1QS9qL1d2cjIxY2p1aFJBTkNBQVQxVUJBUmRDOVg0RHZaQUdVeWc2Y09zbjBmV2JHRgo3clc2WENwREI0VnFTRFMrQjlhcWZOYkJEWUppWjRCNTZmRkRiZVphSmFlMURRRldZNGdmMzh0cAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA" - } - } - ], - "current-context": "default" -} -` - -const CAROL_KEYS = ` -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "default", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVhtZ0F3SUJBZ0lSQU5zVzZ2ZHMzc051WEZkc3FYODRzNFV3Q2dZSUtvWkl6ajBFQXdJd09URVcKTUJRR0ExVUVDaE1OYUM1M1pXSnBibVl1YVc1bWJ6RWZNQjBHQTFVRUF4TVdZMjl6ZEdsdU1UWXVhQzUzWldKcApibVl1YVc1bWJ6QWVGdzB5TVRBME1UVXhNekV4TWpCYUZ3MHlNakEwTVRVeE16RXhNakJhTURreEZqQVVCZ05WCkJBb1REV2d1ZDJWaWFXNW1MbWx1Wm04eEh6QWRCZ05WQkFNVEZtTnZjM1JwYmpFMkxtZ3VkMlZpYVc1bUxtbHUKWm04d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUalVId0ZzZmh5VjlsUGJOU3RqYThod3RCQQpTQS9QQVlyM3lBSTZLTlppS0tqVTQyVjZyOWJOaDN4R2xMYmJOcDdVbis4NmJEZ2p3ZVVrY2NEV2p2RE9vMkl3CllEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUdDQ3NHQVFVRkJ3TUMKTUF3R0ExVWRFd0VCL3dRQ01BQXdJUVlEVlIwUkJCb3dHSUlXWTI5emRHbHVNVFl1YUM1M1pXSnBibVl1YVc1bQpiekFLQmdncWhrak9QUVFEQWdOSkFEQkdBaUVBNWkwZXZ1TTU0M1hVVldkOFhpRjRrVDdFWnA0TEQ0ODFxeXNsCk5VUzAycElDSVFDMml5NmRLUzlTZmNYdStNYVcxVSt1QWV5WGRTZWhnWTU4QXJYTHI5aDUzUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2dsTm9MbVhxN3c0OTduTEEKVFg3TDQyQ283cDVHSVNyOFgvek1yVldTYUo2aFJBTkNBQVRqVUh3RnNmaHlWOWxQYk5TdGphOGh3dEJBU0EvUApBWXIzeUFJNktOWmlLS2pVNDJWNnI5Yk5oM3hHbExiYk5wN1VuKzg2YkRnandlVWtjY0RXanZETwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "default" - } - } - ], - "current-context": "default" -}` - -// Helpers for setting up a ugate test env. - -func BasicGate() *ugatesvc.UGate { - config := ugatesvc.NewConf(".", "./var/lib/dmesh") - cfg := &ugate.MeshSettings{ - BasePort: 12000, - Domain: "h.webinf.info", - } - // RoundTripStart a Gate. Basic H2 and H2R services enabled. - ug := ugatesvc.NewGate(&net.Dialer{}, nil, cfg, config) - - return ug -} diff --git a/testdata/alice/ugate.yaml b/testdata/alice/ugate.yaml new file mode 100644 index 0000000..a58988c --- /dev/null +++ b/testdata/alice/ugate.yaml @@ -0,0 +1,125 @@ +# Minimal settings, for a client - has one cluster for bob + +name: alice +domain: test.m.internal + +id: + # Derived from the public key + # id: GYDMH5NWKZNCBWLR73D5E5Q7SBM4YUSHHMRBOKUDSPC2H3FG4S4Q + namespace: test + serviceaccount: default + location: us-central1 + trustDomain: dmeshgate.id.goog + labels: + projectid: dmeshgate + + +# Replaced by ID +namespace: test +serviceaccount: default +projectid: dmeshgate +location: us-central1 + + +listeners: + 15108: + protocol: hbone + 15120: + protocol: metrics + 15109: + protocol: hbonec + 15103: + protocol: sni + 15106: + protocol: tproxy + "127.0.0.1:15100": + protocol: admin + 1180: + protocol: socks + 6113: + protocol: tcp-echo + 6114: + protocol: grpc-echo + "@hbonec-alice": + protocol: hbonec + "/tmp/hbonec-alice": + protocol: hbonec + +# localforward are ports on localhost, forwarded to clusters or addresses. +# For convenience, egress defines localhost listeners ( not intercepted by tproxy !) +# The value is a URL or hostOrService:port. +# egress: +localforward: + # proxy to Istiod, similar to agent + 19999: istiod.istio-system.svc:15012 + + # mTLS iperf3 + 15201: bob.bob.svc:5201 + + # Plain text iperf3 + 15202: bob.bob.svc:5202 + + 6411: GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ:5201 + + 6415: echo:// + +# ---------------- Networks ---------------------- + +# Network CIDR ranges +networks: + vpc: + - 10.1.10.0/24 + - "fd::/8" + gateways: + - 10.1.12.0/24 + mesh: + - 10.0.0.0/8 + - 192.168.0.0/16 + # Remaining is egress (internet) + +# -------------------- Egress ------------------------- + +connecttimeout: 5s + + +# discovery: +# clusters: +# egeress: +# out: +# mesh: +clusters: + GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ: + addr: 127.0.0.1:6007 + labels: + h2r: 1 + bob.bob.svc:5201: + addr: 127.0.0.1:5201 + endpoints: + - address: 127.0.0.1:5201 + hboneaddress: 127.0.0.1:15208 + + bob.bob.svc:5202: + addr: 127.0.0.1:5202 + endpoints: + - address: 127.0.0.1:5201 + hboneaddress: 127.0.0.1:15209 + secure: true + + istiod.istio-system.svc:15012: + addr: "-" + + # If not set, will be loaded from mesh-env in default k8s cluster + # The addr should be a gateway address with SNI routing support or hbone + xistiod.istio-system.svc:15012: + #addr: "-" + addr: 34.69.72.163:15012 + SNI: istiod.istio-system.svc + + h2r: + addr: 127.0.0.1:15441 + + example.test.svc:8080: + id: example.test.svc:8080 + addr: 1.2.3.4:8080 + + diff --git a/testdata/bob/ugate.yaml b/testdata/bob/ugate.yaml new file mode 100644 index 0000000..5c2d494 --- /dev/null +++ b/testdata/bob/ugate.yaml @@ -0,0 +1,181 @@ +# Most settings enabled, for a server +name: bob +domain: test.m.internal + +priv: | + -----BEGIN EC PRIVATE KEY----- + MHcCAQEEIG0y/ACuY0grzpMCZRWs/mUCgXY/vaMFN5MZOY+X901IoAoGCCqGSM49 + AwEHoUQDQgAE51wdYyA7nhXKgUzvruRo4ZchJLNgJTlSkKRLpNYHhLrBjHivC4A4 + HgysDlU4frwsTSg6qPOiXkTkA8VZJzdHMg== + -----END EC PRIVATE KEY----- + +cert: | + -----BEGIN CERTIFICATE----- + MIIBejCCASCgAwIBAgIRAK9oRInSJbAZDLpCWQX/UN8wCgYIKoZIzj0EAwIwFzEJ + MAcGA1UEChMAMQowCAYDVQQDEwEuMB4XDTIyMTEwNDE0MjgxMFoXDTIzMTEwNDE0 + MjgxMFowFzEJMAcGA1UEChMAMQowCAYDVQQDEwEuMFkwEwYHKoZIzj0CAQYIKoZI + zj0DAQcDQgAE51wdYyA7nhXKgUzvruRo4ZchJLNgJTlSkKRLpNYHhLrBjHivC4A4 + HgysDlU4frwsTSg6qPOiXkTkA8VZJzdHMqNNMEswDgYDVR0PAQH/BAQDAgWgMB0G + A1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMAwGA1Ud + EQQFMAOCAS4wCgYIKoZIzj0EAwIDSAAwRQIhALQoenr80BTUkIeFKyqOJTQM75sx + 31/cQyVaS0hZfTRsAiBPnuyNeeLFuQ7+2ogMB2FQsg8oIjFEcd781XFEjJWMDg== + -----END CERTIFICATE----- + + +basePort: 12200 + +## Port-based listeners. +# +# - 'whitebox' egress - listen on 127.0.0.1, forwardTo +# - forward: listen on :port, forwardTo dest +# - 'input': listen on :port, forwardTo localhost or empty +listeners: + # ======= Admin/debug/pperf port - DefaultMux in http + admin: + port: 12200 + protocol: admin + + debug: + port: 12204 + protocol: http + + # Health and prom + health: + port: 12221 + protocol: http + + mqtt: + port: 12205 + protocol: mqtt + + # ======= HBone / multiplexed ingress + + # SSH-secured inbound connections + # Will forward to local ports just like HBone. + ssh: + port: 12222 + protocol: ssh + + # TLS - H2 or H1 + hbone: + port: 12208 + protocol: hbone + + # Plain text HTTP/2 - admin commands support HTTP/1.1 + hbonec: + port: 12209 + protocol: hbonec + + tproxy-inbound: + port: 12206 + protocol: tproxy + + # /ip4/127.0.0.1/tcp/12207 + # PeerID: QmXpb6CSoNP6nMgq4kwY9Zd3Gysws1BzjXQd9cYN8CU3y9 + # + # CID: bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba + # https://cid.ipfs.tech/#bafzbeiem4fnfiqwrhlt7scybi6bdnmommmtsdfwb5mcvsssqgl43xbiuba + ipfs: + port: 12207 + protocol: ipfs + + + # ======== Egress capture and ports + # Local traffic, will send to original dst or secure depending on dst. + + # Tproxy and REDIRECT capture 'egress outbound' in istio. + tproxy: + port: 12201 + protocol: tproxy + + tproxy_udp: + port: 12201 + protocol: tproxy_udp + + socks: + port: 12202 + protocol: socks + + http_proxy: + port: 12203 + protocol: http_proxy + + + # ======== Regular listeners for http, udp + + udp: + port: 12230 + protocol: udp + + http: + port: 12238 + protocol: http + + https: + port: 12233 + protocol: https + + echo: + port: 12240 + protocol: echo + + # ============ Forwarding ports ========== + + # Control plane redirect + xds-h2: + port: 12210 + protocol: https + + xds-h2c: + port: 12212 + protocol: http + + # direct TCP connect to local iperf3 and fortio (or HTTP on default port) + tcp-12201: + #port: 12201 + forwardTo: 127.0.0.1:5201 + + # Accept using TLS - client must use TLS as well + tls-12215: + port: 15102 + forwardTo: localhost:5201 + + # The equivalent for 2 sidecars - out TLS, in TLS + tcp-12216: + # The TLS server forwarding to iperf3 + forwardTo: localiperf + + # Virtual ports, captured via iptables-in +# "-:443": +# proto: https +# +# "-:8111": +# forwardTo: localhost:15007 +# +# "-:8112": +# proto: https + +# Hosts represents pre-configured nodes. +# Key is the DNS name or VIP. +# If a host is not found here, discovery will be used ( DNS, control plane) +hosts: + localiperf: + addr: localhost:15102 + + # Live test server + h.webinf.info: + addr: h.webinf.info:443 +# id: B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA +# +# c1.webinf.info: +# addr: c1.webinf.info:15007 + +# Remote accept request (reverse forward, "-R") +# Will also include relays, stun, etc. +# TODO: could also be part of the hosts: definition, include a list +# of ports. This way we don't dup the public key. +#remoteAccept: +# h.webinf.info: "B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA" +# +# c1.webinf.info: "" + diff --git a/testdata/clusterloadasignment.json b/testdata/clusterloadasignment.json new file mode 100644 index 0000000..547dcc2 --- /dev/null +++ b/testdata/clusterloadasignment.json @@ -0,0 +1,40 @@ +{ + "endpoint_config": { + "@type": "type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment", + "cluster_name": "outbound|9080||echo-local.test.svc.cluster.local", + "endpoints": [ + { + "locality": {}, + "lb_endpoints": [ + { + "endpoint": { + "address": { + "socket_address": { + "address": "127.0.0.1", + "port_value": 9080 + } + }, + "health_check_config": {} + }, + "health_status": "HEALTHY", + "metadata": { + "filter_metadata": { + "envoy.transport_socket_match": { + "tlsMode": "istio" + }, + "istio": { + "workload": "echo-local;test;;;Kubernetes" + } + } + }, + "load_balancing_weight": 2 + } + ], + "load_balancing_weight": 2 + } + ], + "policy": { + "overprovisioning_factor": 140 + } + } +} diff --git a/testdata/gcp_cluster.json b/testdata/gcp_cluster.json new file mode 100644 index 0000000..3cbb862 --- /dev/null +++ b/testdata/gcp_cluster.json @@ -0,0 +1,238 @@ +{ + "clusters": [ + { + "name": "istio", + "nodeConfig": { + "machineType": "e2-medium", + "diskSizeGb": 100, + "oauthScopes": [ + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/logging.write", + "https://www.googleapis.com/auth/monitoring", + "https://www.googleapis.com/auth/service.management.readonly", + "https://www.googleapis.com/auth/servicecontrol", + "https://www.googleapis.com/auth/trace.append" + ], + "metadata": { + "disable-legacy-endpoints": "true" + }, + "imageType": "COS_CONTAINERD", + "serviceAccount": "default", + "diskType": "pd-standard", + "workloadMetadataConfig": { + "mode": "GKE_METADATA" + }, + "shieldedInstanceConfig": { + "enableSecureBoot": true, + "enableIntegrityMonitoring": true + } + }, + "masterAuth": { + "clusterCaCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQU1ybVVQd1R6cVhWUitJck92dnlsaG93RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa01EZ3daV0ppT0RJdE56ZzVaaTAwWlRCa0xXSmxPREV0TURRNVptWTRPVE5tTmpBMgpNQ0FYRFRJeE1UQXhOREl5TURVMU5Gb1lEekl3TlRFeE1EQTNNak13TlRVMFdqQXZNUzB3S3dZRFZRUURFeVF3Ck9EQmxZbUk0TWkwM09EbG1MVFJsTUdRdFltVTRNUzB3TkRsbVpqZzVNMlkyTURZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FEWmxkRzJvVGMzNlNFWjIyNk1YdkltNUgvZ2Q2RUxOc2xGaEQycgpjMXJDL3ZFMVNkbjlhV1dnUElUK0NPL1hDZkp1NTR4VUpFRFpsMmVKcHdCUkhVWDlJUmlFVUVXVkFoQjYwaG50CkhUM0t0RThEMVFQV2hYa1h6clNUUGJOWkhmYnRvTDJWVkZUKzFMTFdFUEdHZzBPc1VRcVZzYytMaE1LaytxYnUKN2k5c1NpcGVxZ3ozR2VvLzRkMFR3ajhUMGc1ZTVrR04vb1paN1l1bkxBWnVsd044QlJLREFwTzJTYXdmdU9QcgpEVEdIVEx1YTBoQzEvc1NnNnhOdlMxbnF0UmQwdzhDWG5vMmlJbGlXSE16WStZbGhkbWc2KzNaeEtrVGlnaHhjCjFSQ2JpSkoyOTdieGtQMlZib1NtOGE5UEk1QnZMY3M0N2E5QXRUMHQ0WEJDRkxQb1oxeFZWRzNFN01haVd0ZE4KaEFtRlNLWjlFa2l1WUIrT2Nobkkyek1qalI2ZXJIZkxUazZJbzAzVlVIVzlSbVI1RlZmbjNzSmFmTUVsZ2FuSQpWUXduRjZ2UXM0Z3pXOVdFa0prU2tRT3BoS2FhUXVrWlA3VWhERGc0SkVUbis2Ti9qVlNXS2ZTTEd1YVZOY2NECndHVXNTc2Jrb3ZUZ2FqWjlscEI4cUNXdmpnTUNBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGSGtNbXZFdExxWDN0eFl1dkxURytleG5UcDZ6TUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQVNIYXluNXVNbEdNeE96YW1nZmYwcncxaS9uTzJvb0paa0VIajJ4NWViCjdaNVFRWm9pY2FrdDVlSk1MR3g4ZlVLVTQ5WC9kZnZRd204Z0hiNUlxcVFXSW9ITEhoYldCVDkrT2xaT085LzYKVTR0ejU5Rk8zcytzOUVONlVFZ2dzQlhPS05nNGpaNHhLQTJpelVmd0E4ckVDU2ZIenduRXZPWXVOaGV6MzlZYwpLLzZMSmd2Y09WbGhZaTM1enNhcDhOcmpkeVozVXF4ZFpuSXNGaHhhdTdWWjQvdHNQWFZKbnVjcU1LR1gvMjhVCkMxK2s1NU5QSk1Pa0V1R2dmL0xUckF1NFU1RVRXZG9iNXBhS0QxTVZIMkNlMkNacWtrTmxUN0FwWWpuU0VTRncKZEhvbzRBZW1JOUE4clVHZWNibU9ZUUhrWGhFUC91Y0Z4NmdTMDN4bktpYVdUTkx6VHE0b1V5VzlwemhaUEpOOApOZDZ4dFdnVXQ0UVB6TE5PTm4rMk4zaFQ0UURVditPMnBjVmtadHZvZzBFeEZ0ZDZ6ZDA5c1N1V2ovUE9WQnQ0ClBEU3JrUGZ3WmVtaWR1MjVNamxpVWV1NDJrSjlRZVdvRmdNaVQvY1ZLTVh3QUo5bU8va2JEY3lPWmRQUmp6cEMKNmVYb09iUGdiTUswZUhuY0hFeW43RW89Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + }, + "loggingService": "logging.googleapis.com/kubernetes", + "monitoringService": "monitoring.googleapis.com/kubernetes", + "network": "default", + "clusterIpv4Cidr": "10.48.128.0/17", + "addonsConfig": { + "httpLoadBalancing": {}, + "horizontalPodAutoscaling": {}, + "kubernetesDashboard": { + "disabled": true + }, + "networkPolicyConfig": { + "disabled": true + }, + "dnsCacheConfig": { + "enabled": true + }, + "gcePersistentDiskCsiDriverConfig": { + "enabled": true + } + }, + "subnetwork": "default", + "nodePools": [ + { + "name": "default-pool", + "config": { + "machineType": "e2-medium", + "diskSizeGb": 100, + "oauthScopes": [ + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/logging.write", + "https://www.googleapis.com/auth/monitoring", + "https://www.googleapis.com/auth/service.management.readonly", + "https://www.googleapis.com/auth/servicecontrol", + "https://www.googleapis.com/auth/trace.append" + ], + "metadata": { + "disable-legacy-endpoints": "true" + }, + "imageType": "COS_CONTAINERD", + "serviceAccount": "default", + "diskType": "pd-standard", + "workloadMetadataConfig": { + "mode": "GKE_METADATA" + }, + "shieldedInstanceConfig": { + "enableSecureBoot": true, + "enableIntegrityMonitoring": true + } + }, + "initialNodeCount": 1, + "autoscaling": { + "enabled": true, + "maxNodeCount": 1000, + "autoprovisioned": true + }, + "management": { + "autoUpgrade": true, + "autoRepair": true + }, + "maxPodsConstraint": { + "maxPodsPerNode": "32" + }, + "podIpv4CidrSize": 26, + "locations": [ + "us-west1-b", + "us-west1-a" + ], + "networkConfig": { + "podRange": "gke-istio-pods-290b29a3", + "podIpv4CidrBlock": "10.48.128.0/17" + }, + "selfLink": "https://container.googleapis.com/v1/projects/wlhe-cr/locations/us-west1/clusters/istio/nodePools/default-pool", + "version": "1.20.10-gke.1600", + "instanceGroupUrls": [ + "https://www.googleapis.com/compute/v1/projects/wlhe-cr/zones/us-west1-b/instanceGroupManagers/gk3-istio-default-pool-a13bd571-grp", + "https://www.googleapis.com/compute/v1/projects/wlhe-cr/zones/us-west1-a/instanceGroupManagers/gk3-istio-default-pool-86024aa2-grp" + ], + "status": "RUNNING", + "upgradeSettings": { + "maxSurge": 1 + } + } + ], + "locations": [ + "us-west1-a", + "us-west1-b", + "us-west1-c" + ], + "resourceLabels": { + "istio": "config" + }, + "labelFingerprint": "a9dc16a7", + "legacyAbac": {}, + "ipAllocationPolicy": { + "useIpAliases": true, + "clusterIpv4Cidr": "10.48.128.0/17", + "servicesIpv4Cidr": "10.48.16.0/22", + "clusterSecondaryRangeName": "gke-istio-pods-290b29a3", + "servicesSecondaryRangeName": "gke-istio-services-290b29a3", + "clusterIpv4CidrBlock": "10.48.128.0/17", + "servicesIpv4CidrBlock": "10.48.16.0/22" + }, + "masterAuthorizedNetworksConfig": {}, + "maintenancePolicy": { + "resourceVersion": "e3b0c442" + }, + "autoscaling": { + "enableNodeAutoprovisioning": true, + "resourceLimits": [ + { + "resourceType": "cpu", + "maximum": "1000000000" + }, + { + "resourceType": "memory", + "maximum": "1000000000" + } + ], + "autoscalingProfile": "OPTIMIZE_UTILIZATION", + "autoprovisioningNodePoolDefaults": { + "oauthScopes": [ + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/logging.write", + "https://www.googleapis.com/auth/monitoring", + "https://www.googleapis.com/auth/service.management.readonly", + "https://www.googleapis.com/auth/servicecontrol", + "https://www.googleapis.com/auth/trace.append" + ], + "serviceAccount": "default", + "upgradeSettings": { + "maxSurge": 1 + }, + "management": { + "autoUpgrade": true, + "autoRepair": true + }, + "imageType": "COS_CONTAINERD" + } + }, + "networkConfig": { + "network": "projects/wlhe-cr/global/networks/default", + "subnetwork": "projects/wlhe-cr/regions/us-west1/subnetworks/default", + "enableIntraNodeVisibility": true, + "defaultSnatStatus": {} + }, + "defaultMaxPodsConstraint": { + "maxPodsPerNode": "110" + }, + "databaseEncryption": { + "state": "DECRYPTED" + }, + "verticalPodAutoscaling": { + "enabled": true + }, + "shieldedNodes": { + "enabled": true + }, + "releaseChannel": { + "channel": "REGULAR" + }, + "workloadIdentityConfig": { + "workloadPool": "wlhe-cr.svc.id.goog" + }, + "notificationConfig": { + "pubsub": {} + }, + "selfLink": "https://container.googleapis.com/v1/projects/wlhe-cr/locations/us-west1/clusters/istio", + "zone": "us-west1", + "endpoint": "34.83.148.180", + "initialClusterVersion": "1.20.10-gke.301", + "currentMasterVersion": "1.20.10-gke.1600", + "currentNodeVersion": "1.20.10-gke.1600", + "createTime": "2021-10-14T23:05:54+00:00", + "status": "RUNNING", + "servicesIpv4Cidr": "10.48.16.0/22", + "instanceGroupUrls": [ + "https://www.googleapis.com/compute/v1/projects/wlhe-cr/zones/us-west1-b/instanceGroupManagers/gk3-istio-default-pool-a13bd571-grp", + "https://www.googleapis.com/compute/v1/projects/wlhe-cr/zones/us-west1-a/instanceGroupManagers/gk3-istio-default-pool-86024aa2-grp" + ], + "currentNodeCount": 6, + "location": "us-west1", + "autopilot": { + "enabled": true + }, + "id": "290b29a3fba948319b856202b60f8985209bd9f7c6ad409f97458adeea0cd336", + "nodePoolDefaults": { + "nodeConfigDefaults": {} + }, + "loggingConfig": { + "componentConfig": { + "enableComponents": [ + "SYSTEM_COMPONENTS", + "WORKLOADS" + ] + } + }, + "monitoringConfig": { + "componentConfig": { + "enableComponents": [ + "SYSTEM_COMPONENTS" + ] + } + } + } + ] +} diff --git a/testdata/iam.sh b/testdata/iam.sh new file mode 100644 index 0000000..8892369 --- /dev/null +++ b/testdata/iam.sh @@ -0,0 +1,60 @@ +PROJECT_ID=${PROJECT_ID:-costin-asm1} +CONFIG_PROJECT_ID=${CONFIG_PROJECT_ID:-costin-asm1} +WORKLOAD_NAMESPACE=${WORKLOAD_NAMESPACE:-default} + +function initGSA() { + + gcloud --project ${PROJECT_ID} iam service-accounts create k8s-${WORKLOAD_NAMESPACE} \ + --display-name "Service account with access to ${WORKLOAD_NAMESPACE} k8s namespace" || true + + + + # Workload identity - MDS can also impersonate the GSA + gcloud iam service-accounts add-iam-policy-binding \ + --role roles/iam.workloadIdentityUser \ + --member "serviceAccount:${CONFIG_PROJECT_ID}.svc.id.goog[${WORKLOAD_NAMESPACE}/default]" \ + k8s-${WORKLOAD_NAMESPACE}@${PROJECT_ID}.iam.gserviceaccount.com + + # K8S side of the mapping. + kubectl annotate serviceaccount \ + --namespace ${WORKLOAD_NAMESPACE} default \ + iam.gke.io/gcp-service-account=k8s-${WORKLOAD_NAME}@${PROJECT_ID}.iam.gserviceaccount.com + +} +# ========= Grant the GCP equivalent SA permissions ============= + +function grantRole() { + local r=$1 + + gcloud projects add-iam-policy-binding ${PROJECT_ID} \ + --member="serviceAccount:k8s-${WORKLOAD_NAMESPACE}@${PROJECT_ID}.iam.gserviceaccount.com" \ + --role="roles/${r}" +} + +function grantServiceRole() { + local r=$1 + + gcloud run services add-iam-policy-binding ${SERVICE} \ + --member="serviceAccount:k8s-${WORKLOAD_NAMESPACE}@${PROJECT_ID}.iam.gserviceaccount.com" \ + --role="roles/${r}" +} + +function grantRoles() { + #grantServiceRole run.invoker + + # Also allow the use of TD + grantRole trafficdirector.client + # This allows the GSA to use the GKE and other APIs in the 'config cluster' project. + grantRole serviceusage.serviceUsageConsumer + # Grant the GSA running the workload permission to connect to the config clusters in the config project. + # Will use the 'SetQuotaProject' - otherwise the GKE API must be enabled in the workload project. + grantRole container.clusterViewer + + # Connect to hub connector, view hub + grantRole gkehub.connect + + grantRole gkehub.viewer + +} + +initGSA diff --git a/tools/dev/Dockerfile b/tools/dev/Dockerfile deleted file mode 100644 index f917e0a..0000000 --- a/tools/dev/Dockerfile +++ /dev/null @@ -1,70 +0,0 @@ -FROM golang:latest - -# golang latest is based on BUSTER - 317M ( vs 108M for alpine ) - -ENV GO111MODULE=on -ENV CGO_ENABLED=0 -ENV GOOS=linux -ENV GOPROXY=https://proxy.golang.org -LABEL org.opencontainers.image.source https://github.com/costinm/ugate - -RUN apt-get update && \ - apt install -y --no-install-recommends \ - less net-tools openssh-server sudo \ - lsof netcat tcpdump iptables iproute2 git syncthing && \ - apt-get clean && \ - rm -rf /var/log/*log /var/lib/apt/lists/* /var/log/apt/* /var/lib/dpkg/*-old /var/cache/debconf/*-old - -RUN useradd -u 1000 -U -d /work -s /bin/bash build && \ - usermod -G users build && \ - echo "build ALL=NOPASSWD: ALL" >> /etc/sudoers - -RUN useradd -u 1337 -U -d /var/run/istio -s /bin/bash istio-proxy && \ - usermod -G users istio-proxy && \ - echo "istio-proxy ALL=NOPASSWD: ALL" >> /etc/sudoers - -#RUN curl -fsSL https://code-server.dev/install.sh > /tmp/install.sh && \ -# sh /tmp/install.sh - -RUN mkdir -p /etc/certs && \ - mkdir -p /run/ssh && \ - mkdir -p /etc/istio/proxy && \ - mkdir -p /etc/istio/config && \ - mkdir -p /var/lib/istio/envoy && \ - mkdir -p /var/lib/istio/config && \ - mkdir -p /var/lib/istio/proxy && \ - chown -R 1337 /etc/certs /etc/istio /var/lib/istio && \ - mkdir /run/ugate && \ - mkdir /run/sshd && \ - chmod 700 /run/sshd - -# Binaries to /go/bin -#RUN go get github.com/githubnemo/CompileDaemon - -RUN go install github.com/go-delve/delve/cmd/dlv@latest && \ - rm -rf /root/.cache && rm -rf /go/pkg && go clean -cache - -# Default is /go directory, which is set a GOPATH -# That doesn't work with go.mod -WORKDIR /ws - -EXPOSE 8080 -EXPOSE 15007 - -COPY sshd_config /etc/ssh/sshd_config - -# Test only -#RUN echo 'root:test' | chpasswd - -RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd - -COPY run.sh /usr/local/bin/ - -# Runs in /go directory -#COPY . . -#RUN cd cmd/ugate && go build -a -gcflags='all=-N -l' -ldflags '-extldflags "-static"' \ -# -o /usr/local/bin/ugate ./ - -# Priv separataion dir - -ENTRYPOINT /usr/local/bin/run.sh diff --git a/tools/dev/dev-deployment.yaml b/tools/dev/dev-deployment.yaml deleted file mode 100644 index 1f24a08..0000000 --- a/tools/dev/dev-deployment.yaml +++ /dev/null @@ -1,96 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: dev ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: src - namespace: dev -spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: 30Gi - ---- -# Runs a docker-mounted dev image. -# Can build images in the node's docker. -#apiVersion: v1 -#kind: ReplicationController -apiVersion: apps/v1 -kind: Deployment -metadata: - name: dev - namespace: dev - labels: - app: dev -spec: - replicas: 1 - # strategy: - # rollingUpdate: - # maxSurge: 1 - # maxUnavailable: 0 - selector: - matchLabels: - app: dev - strategy: - type: Recreate - template: - metadata: - labels: - app: dev - annotations: - sidecar.istio.io/proxyImage: gcr.io/istio-testing/proxyv2:latest - #sidecar.istio.io/proxyImage: costinm/proxyv2:latest - spec: - terminationGracePeriodSeconds: 1 - securityContext: - runAsUser: 1000 - containers: - - name: ubuntu - image: ghcr.io/costinm/ugate/ugate-dev:latest - #command: ["/usr/bin/code-server"] - #args: ["--auth", "none"] - volumeMounts: -# - mountPath: /var/run/docker.sock -# name: docker-socket-volume - - mountPath: /work - name: src - securityContext: - privileged: true - ports: - - containerPort: 8080 - name: https - protocol: TCP - - - name: sync - image: syncthing/syncthing - # Entrypoint expects to run as root - command: [ "/bin/syncthing", "-home", "/var/syncthing/config"] - ports: - - containerPort: 22000 - name: http - protocol: TCP - - containerPort: 8384 - name: tcp-sync - protocol: TCP - volumeMounts: - - mountPath: /var/syncthing - name: src - volumes: - - name: envcfg - configMap: - name: codeenv - optional: true -# - name: docker-socket-volume -# hostPath: -# path: /var/run/docker.sock -# type: File - - name: src - persistentVolumeClaim: - claimName: src ---- -# TODO: Service, TcpGateway diff --git a/tools/dev/dev.sh b/tools/dev/dev.sh deleted file mode 100644 index d64cd3e..0000000 --- a/tools/dev/dev.sh +++ /dev/null @@ -1,14 +0,0 @@ - -function dbg_start() { - dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /go/bin/ugate -} - -function compiled() { - # CompileDaemon -log-prefix=false -build="go build -o /app" -command="/app" - #dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient exec /app - #https://www.reddit.com/r/golang/comments/i7hvco/compiledaemon_with_delve_debugging_while_auto/ - - CompileDaemon -build="echo 1" \ - -command="dlv --listen=:40000 --headless=true --api-version=2 --accept-multiclient ./cmd/ugate" -} - diff --git a/tools/dev/run.sh b/tools/dev/run.sh deleted file mode 100755 index fda794b..0000000 --- a/tools/dev/run.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash - -# Startup for the dev image -# This includes tools to help debug and even source code to make changes. -# It includes a sshd server, to allow access even without kube. - -set -x - -function start_ssh() { - # Check if host keys are present, else create them - # /etc dir may be RO, use var/run - - mkdir -p /run/ssh /run/sshd - - # TODO: custom call to get a cert for SSH. - # File will exist in k8s if a secret is mounted -# if ! test -f /run/ssh/ssh_host_rsa_key; then -# ssh-keygen -q -f /run/ssh/ssh_host_rsa_key -N '' -t rsa -# fi - - if ! test -f /run/ssh/ssh_host_ecdsa_key; then - ssh-keygen -q -f /run/ssh/ssh_host_ecdsa_key -N '' -t ecdsa - fi - -# if ! test -f /var/run/ssh/ssh_host_ed25519_key; then -# ssh-keygen -q -f /var/run/ssh/ssh_host_ed25519_key -N '' -t ed25519 -# fi - - # TODO: support certificates for client auth - if ! test -f /run/ssh/authorized_keys; then - echo ${SSH_AUTH} >> /run/ssh/authorized_keys - fi - - # Set correct right to ssh keys - chown -R root:root /run/ssh /run/sshd - chmod 0700 /run/ssh - chmod 0600 /run/ssh/* - - chmod 700 /run/sshd - - echo "======== Starting SSHD with ${SSH_AUTH}" - - /usr/sbin/sshd -} - -start_ssh - -cd / -env -#/ko-app/ugate -sleep infinity diff --git a/tools/dev/sshd_config b/tools/dev/sshd_config deleted file mode 100644 index 493ff12..0000000 --- a/tools/dev/sshd_config +++ /dev/null @@ -1,27 +0,0 @@ -Port 22 -AddressFamily any -ListenAddress 0.0.0.0 -ListenAddress :: -Protocol 2 -LogLevel INFO - -#HostKey /run/ssh/ssh_host_rsa_key -#HostKey /run/ssh/ssh_host_dsa_key -HostKey /run/ssh/ssh_host_ecdsa_key -#HostKey /run/ssh/ssh_host_ed25519_key - -PermitRootLogin yes - -AuthorizedKeysFile /run/ssh/authorized_keys - -PasswordAuthentication yes -PermitUserEnvironment yes - -AcceptEnv LANG LC_* -PrintMotd no -#UsePAM no - -Subsystem sftp /usr/lib/openssh/sftp-server - -# TODO: use CA certificate, add it in the script -# Use JWT/IstioCA to get a SSH cert for the 'canonical service'. diff --git a/tools/genkube.go b/tools/genkube.go deleted file mode 100644 index 02bc122..0000000 --- a/tools/genkube.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - "github.com/costinm/meshauth" -) - -// Test program to generate a kube config, as used in ugate. -func main() { - - // In memory - _ = meshauth.NewAuth("", "") - return - -} diff --git a/tools/jwtdecode.go b/tools/jwtdecode.go deleted file mode 100644 index 05aec57..0000000 --- a/tools/jwtdecode.go +++ /dev/null @@ -1,60 +0,0 @@ -package main - -import ( - "crypto" - "crypto/rsa" - "crypto/x509" - "encoding/base64" - "encoding/pem" - "flag" - "fmt" - "io/ioutil" - "log" - "strings" - - "github.com/costinm/meshauth" -) - -var ( - jwt = flag.String("jwt", "", "JWT to decode") - aud = flag.String("aud", "", "Aud to check") -) - -func main() { - flag.Parse() - decode(*jwt, *aud) -} - -// Decode a JWT. -// If crt is specified - verify it using that cert -func decode(jwt, aud string) { - // TODO: verify if it's a VAPID - parts := strings.Split(jwt, ".") - p1b, err := base64.RawURLEncoding.DecodeString(parts[1]) - if err != nil { - log.Println(err) - return - } - fmt.Println(string(p1b)) - - scrt, _ := ioutil.ReadFile("server.crt") - block, _ := pem.Decode(scrt) - xc, _ := x509.ParseCertificate(block.Bytes) - log.Printf("Cert subject: %#v\n", xc.Subject) - pubk1 := xc.PublicKey - - h, t, txt, sig, _ := meshauth.JwtRawParse(jwt) - log.Printf("%#v %#v\n", h, t) - - if h.Alg == "RS256" { - rsak := pubk1.(*rsa.PublicKey) - hasher := crypto.SHA256.New() - hasher.Write(txt) - hashed := hasher.Sum(nil) - err = rsa.VerifyPKCS1v15(rsak, crypto.SHA256, hashed, sig) - if err != nil { - log.Println("Root Certificate not a signer") - } - } - -} diff --git a/tools/provision_ca.sh b/tools/provision_ca.sh deleted file mode 100644 index ae35e9b..0000000 --- a/tools/provision_ca.sh +++ /dev/null @@ -1,22 +0,0 @@ - - -CA_DIR?=${HOME}/.secure/ca -mkdir -p ${CA_DIR} - -# Should return all roots in the cluster, including from MeshConfig -kubectl get cm istio-ca-root-cert -o "jsonpath={.data['root-cert\.pem']}" > ${CA_DIR}/root-cert.pem - -kubectl get secret istio-ca-secret -n istio-system -o "jsonpath={.data['ca-cert\.pem']}" | base64 -d > ${CA_DIR}/ca-cert.pem -kubectl get secret istio-ca-secret -n istio-system -o "jsonpath={.data['ca-key\.pem']}" | base64 -d > ${CA_DIR}/ca-key.pem - -# For 'plug-in' certificates: - -# Use -# kubectl create secret generic cacerts -n istio-system \ - # --from-file=cluster1/ca-cert.pem \ - # --from-file=cluster1/ca-key.pem \ - # --from-file=cluster1/root-cert.pem \ - # --from-file=cluster1/cert-chain.pem - -#kubectl get secret cacerts -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-cert\.pem']}" | base64 -d > ca-cert.pem -#kubectl get secret cacerts -n $(ISTIO_NAMESPACE) -o "jsonpath={.data['ca-key\.pem']}" | base64 -d > ca-key.pem diff --git a/tools/vapid.go b/tools/vapid.go deleted file mode 100644 index e497d94..0000000 --- a/tools/vapid.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/costinm/meshauth" -) - -// Generate a self-signed VAPID token -// First param is the audience -func main() { - aud := "example.com" - if len(os.Args) > 0 { - aud = os.Args[0] - } - - authz := meshauth.NewAuth("", "") - fmt.Println(authz.VAPIDToken(aud)) -} diff --git a/tools/watcher.go b/tools/watcher.go index f6a9044..c0289d2 100644 --- a/tools/watcher.go +++ b/tools/watcher.go @@ -15,12 +15,14 @@ import ( "strings" "time" - "github.com/costinm/meshauth" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" + + "github.com/costinm/meshauth" msgs "github.com/costinm/ugate/webpush" ) +// TODO: rewrite using K8s API style + var ( addr = flag.String("addr", "127.0.0.1:15007", "address:port for the node") @@ -45,10 +47,10 @@ var hc *http.Client func main() { flag.Parse() - config := ugatesvc.NewConf("./", "./var/lib/dmesh/") - authz := meshauth.NewAuth("", "") + //config := meshauth.NewConf("./", "./var/lib/dmesh/") + authz := meshauth.NewMeshAuth(nil).InitSelfSigned("") - ug := ugatesvc.New(config, authz, nil) + ug := ugate.New(authz, nil) hc = &http.Client{ Transport: ug, @@ -62,7 +64,7 @@ var watchers = map[uint64]*watcher{} // Track a single node type watcher struct { - Node *ugate.Cluster + Node *ugate.MeshCluster Path []string @@ -80,7 +82,7 @@ type watcher struct { // Connect to all known nodes and watch them. // Uses the internal debug endpoint for getting connected nodes, // and crawls the mesh. -func watchNodes(ug *ugatesvc.UGate) { +func watchNodes(ug *ugate.UGate) { ctx := context.Background() if *recurse { @@ -115,15 +117,17 @@ func watchNodes(ug *ugatesvc.UGate) { return } - n0 := &ugate.Cluster{ - Addr: *addr, + n0 := &ugate.MeshCluster{ + Dest: meshauth.Dest{ + Addr: *addr, + }, } ug.DialMUX(ctx, "quic", n0, nil) } // Get neighbors from a node. Side effect: updates the watchers table. -func neighbors(url string, path []string) map[uint64]*ugate.Cluster { +func neighbors(url string, path []string) map[uint64]*ugate.MeshCluster { req, err := http.NewRequest("GET", url, nil) if err != nil { log.Print("HTTP_ERROR1", url, err) @@ -143,7 +147,7 @@ func neighbors(url string, path []string) map[uint64]*ugate.Cluster { } cnodes, _ := ioutil.ReadAll(res.Body) - connectedNodes := map[uint64]*ugate.Cluster{} + connectedNodes := map[uint64]*ugate.MeshCluster{} err = json.Unmarshal(cnodes, &connectedNodes) if err != nil { log.Println("HTTP_ERROR_RES", url, err, string(cnodes)) @@ -221,7 +225,7 @@ func crawl() { for _, v := range watchers { if v.New { - log.Println("Node", v.idhex, v.Path, v.Node.NodeAnnounce.UA, v.Node.GWs()) + log.Println("Node", v.idhex, v.Path, v.Node.Hosts) } } } @@ -261,7 +265,7 @@ func toIP6(k uint64) *net.IPAddr { return ip6 } -func (w *watcher) monitor(ug *ugatesvc.UGate, addr *net.IPAddr) { +func (w *watcher) monitor(ug *ugate.UGate, addr *net.IPAddr) { req, err := http.NewRequest("GET", "http://["+addr.String()+"]:5227/debug/events", nil) if err != nil { diff --git a/ugate.go b/ugate.go index f671824..f6ebf97 100644 --- a/ugate.go +++ b/ugate.go @@ -2,76 +2,60 @@ package ugate import ( "context" + "crypto/tls" + "crypto/x509" "encoding/json" + "errors" "expvar" + "fmt" "io" + "log" "net" "net/http" + "net/http/httputil" + "net/url" + "runtime/debug" "strconv" + "strings" + "sync" "time" - "github.com/costinm/hbone" - "github.com/costinm/hbone/nio" -) - -var ( - StreamId = uint32(0) -) - -var ( - VarzAccepted = expvar.NewInt("ugate.accepted") - VarzAcceptErr = expvar.NewInt("ugate.acceptErr") - - // Proxy behavior - VarzReadFrom = expvar.NewInt("ugate.sReadFrom") - VarzReadFromC = expvar.NewInt("ugate.cReadFrom") + "log/slog" - VarzSErrRead = expvar.NewInt("ugate.sErrRead") - VarzSErrWrite = expvar.NewInt("ugate.sErrWrite") - VarzCErrRead = expvar.NewInt("ugate.cErrRead") - VarzCErrWrite = expvar.NewInt("ugate.cErrWrite") + "github.com/costinm/meshauth" + sshd "github.com/costinm/ssh-mesh" + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate/pkg/httpwrapper" + msgs "github.com/costinm/ugate/webpush" - VarzMaxRead = expvar.NewInt("ugate.maxRead") - - // Managed by 'NewTCPProxy' - before dial. - TcpConTotal = expvar.NewInt("gate:tcp:total") - - // Managed by updateStatsOnClose - including error cases. - TcpConActive = expvar.NewInt("gate:tcp:active") + "github.com/costinm/ssh-mesh/nio/syscall" ) -// Configuration for the micro Gateway. -type MeshSettings struct { - hbone.MeshSettings - - // BasePort is the first port used for the virtual/control ports. - // For Istio interop, it defaults to 15000 and uses same offsets. - // Primarily used for testing, or if Istio is also used. - BasePort int `json:"basePort,omitempty"` +// Debug for dev support, will log verbose info. +// Avoiding dependency on logging - eventually a trace interface will be provided +// so any logger can be used. +var Debug = false - // Name of the node, defaults to hostname or POD_NAME - Name string `json:"name,omitempty"` +// MeshSettings holds the settings for a mesh node. +type MeshSettings struct { + // SSHConfig includes MeshCfg - which defines the authentication. + // + // Current ugate mesh 'core' protocol is SSH, other protocols are bridged/gateway-ed + // The config is shared with the ssh-mesh project. + sshd.SSHConfig `json:inline` - // Domain name, also default control plane and gateway. - // If not set, the test/open domain is used, expect poor behavior - // (c1.webinf.info). If set to "-", no parent control plane. - // This also acts as 'trust domain' and 'mesh id'. - Domain string `json:"domain,omitempty"` - // TODO: other trusted domains/meshes (federation, migration, etc) - DomainAliases []string `json:"domainAliases,omitempty"` + // Most settings should go to 'mesh' and are common. + // 'Dest' and identities configs are in MeshCfg. - // Additional port listeners. - // Routes: listen on 127.0.0.1:port - // Ingress: listen on 0.0.0.0:port (or actual IP) - // - // Port proxies: will register a listener for each port, forwarding to the - // given address. - Listeners map[string]*hbone.Listener `json:"listeners,omitempty"` + // Additional defaults for outgoing connections. + // Probably belong to Dest. + ConnectTimeout Duration `json:"connect_timeout,omitempty"` - //Local map[string]*Route `json:"local,omitempty"` + TCPUserTimeout time.Duration - Routes map[string]*nio.Route `json:"routes,omitempty"` + // Timeout used for TLS or SSH handshakes. If not set, 3 seconds is used. + HandsahakeTimeout time.Duration // Configured hosts, key is a domain name without port. // This includes public keys, active addresses. Discovery and on-demand @@ -79,299 +63,254 @@ type MeshSettings struct { // [namespace]/Node/[WorkloadID] // WorkloadID can be 32B SHA256(cert), 16 or 8B (VIP6) or 'trusted' IP (if infra is // secure - Wireguard or IPsec equivalent). - Clusters map[string]*Cluster `json:"hosts,omitempty"` - - // Routes gateways for reverse H2 - key is the domain name, value is the - // pubkey or root CA. If IsEmpty, public certificates are required. - H2R map[string]string `json:"remoteAccept,omitempty"` - - // NoAccessLog enables logging HTTP and stream close stats (sort of access log) - NoAccessLog bool `json:"noAccessLog,omitempty"` -} -const ( - // Offsets from BasePort for the default ports. - - PORT_IPTABLES = 1 - PORT_IPTABLES_IN = 6 - PORT_SOCKS = 5 - // SNI and HTTP could share the same port - would also - // reduce missconfig risks - PORT_HTTP_PROXY = 2 - - // TLS/SNI, HTTPS (no client certs) - PORT_HTTPS = 4 - - // H2, HTTPS, H2R - PORT_BTS = 7 - - // H2C - PORT_BTSC = 8 -) - -// Statistics for streams and hosts -type Stats struct { - Open time.Time + // Clusters by hostname. The key is primarily a hostname:port, matching Istio/K8S Service name and ports. + // TODO: do we need the port ? With ztunnel all endpoins can be reached, and the service selector applies + // to all ports. + // + // Generally MeshClusters have different public keys/certs. + // Includes Nodes, Pods and Services - the key can be the hash of the public key. + Clusters map[string]*MeshCluster `json:clusters,omitempty"` - // last receive from local (and send to remote) - LastWrite time.Time - // last receive from remote (and send to local) - LastRead time.Time + // Internal ports - // Sent from client to server ( client is initiator of the proxy ) - SentBytes int - SentPackets int + // BasePort is the first port used for the virtual/control ports. + // For Istio interop, it defaults to 15000 and uses same offsets. + // This port is used for admin/debug/local MDS, bound to localhost, http protocol + // Deprecated - use listeners + BasePort int `json:"basePort,omitempty"` - // Received from server to client - RcvdBytes int - RcvdPackets int } -// Keyed by Hostname:port (if found in dns tables) or IP:port -type HostStats struct { - // First open - Open time.Time - - // Last usage - Last time.Time +type Duration struct { + time.Duration +} - SentBytes int - RcvdBytes int - SentPackets int - RcvdPackets int +func (ms Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(ms.String()) +} - Count int +func (ms *Duration) UnmarshalJSON(data []byte) error { + var v interface{} + if err := json.Unmarshal(data, &v); err != nil { + return err + } + switch value := v.(type) { + case float64: + *ms = Duration{Duration: time.Duration(value)} + return nil + case string: + var err error + s, err := time.ParseDuration(value) + if err != nil { + return err + } + *ms = Duration{Duration: s} + return nil + default: + return errors.New("invalid duration") + } } -// Node information, based on registration info or discovery. +// UGate represents a node using a HTTP/2 or HTTP/3 based overlay network environment. +// This can act as a minimal REST client and server - or can be used as a RoundTripper, Dialer and PortListener +// compatible with HBONE protocol and mesh security. // -// Used for 'mesh' nodes, where we have a public key and other info, as well -// as non-mesh nodes. +// UGate by default uses mTLS, using spiffee identities encoding K8S namespace, KSA and a trust +// domain. Other forms of authentication can be supported - auth is handled via configurable +// interface, not part of the core package. // -// This struct includes statistics about the node and current active association/mux -// connections. -type Cluster struct { - // ID is the (best) primary id known for the node. Format is: - // base32(SHA256(EC_256_pub)) - 32 bytes binary, 52 bytes encoded - // base32(ED_pub) - same size, for nodes with ED keys. - // - // For non-mesh nodes, it is a (real) domain name or IP if unknown. - // It may include port, or even be a URL - the external destinations may - // have different public keys on different ports. - // - // The node may be a virtual IP ( ex. K8S/Istio service ) or name - // of a virtual service. - // - // If IPs are used, they must be either truncated SHA or included - // in the node cert or the control plane must return metadata and - // secure low-level network is used (like wireguard) +// UGate can be used as a client, server or proxy/gateway. +type UGate struct { + *MeshSettings + + // Auth plugs-in mTLS support. The generated configs should perform basic mesh + // authentication. + // Typically a *meshauth.MeshAuth + Auth *meshauth.MeshAuth `json:"-"` + + // AuthProviders - matching kubeconfig user.authProvider.name + // It is expected to return tokens with the given audience - in case of GCP + // returns access tokens. If not set the cluster can't be created. // - // Required for secure communication. + // A number of pre-defined token sources are used: + // - gcp - returns GCP access tokens using MDS or default credentials. Used for example by GKE clusters. + // - k8s - return K8S WorkloadID tokens with the given audience for default K8S cluster. + // - istio-ca - returns K8S tokens with istio-ca audience - used by Citadel and default Istiod + // - sts - federated google access tokens associated with GCP identity pools. + AuthProviders map[string]func(context.Context, string) (string, error) + + // ReverseProxy is used when UGate is used to proxy to a local http/1.1 server. + ReverseProxy *httputil.ReverseProxy + + // h2Server is the server used for accepting HBONE connections + //h2Server *http2.Server + // h2t is the transport used for all h2 connections used. + // UGate is the connection pool, gets notified when con is closed. + //h2t *http2.H2Transport + + // Main HTTP handler - will perform auth, dispatch, etc + H2Handler http.Handler + + // Mux is used for HTTP and gRPC handler exposed externally. // - // Examples: - // - [B32_SHA] - // - [B32_SHA].reviews.bookinfo.svc.example.com - // - IP6 (based on SHA or 'trusted' IP) - // - IP4 ('trusted' IP) + // It is the handler for "hbone" and "hbonec" protocol handlers. // - ID string `json:"id,omitempty"` + // The HTTP server on localhost:15000 uses http.DefaultMux - which is used by pprof + // and others by default. + Mux *http.ServeMux - // IDAlias is a list of alternate identities associated with the - // node. - // - // TODO: implement - //IDAlias []string `json:"alias,omitempty"` - - // Groups is a list of groups and roles the node is associated with. - // - //Groups []string `json:"groups,omitempty"` - - // TODO: rename to node WorkloadID - use truncated or full form. - - // TODO: print Hex form as well, make sure the 8 bytes of the VIP are visible + // MuxDialers are used to create an association with a peer and multiplex connections. + // HBone, SSH, etc can act as mux dialers. + MuxDialers map[string]meshauth.ContextDialer - // Primary/main address and port of the BTS endpoint. - Addr string `json:"addr,omitempty"` + ListenerProto map[string]func(gate *UGate, l *meshauth.PortListener) error - // Alternate addresses, list of URLs - //URLs []string `json:"urls,omitempty"` + // EndpointResolver hooks into the Dial process and return the configured + // EndpointCon object. This integrates with the XDS/config plane, with + // additional local configs. + //EndpointResolver func(sni string) *EndpointCon - // Primary public key of the node. - // EC256: 65 bytes, uncompressed format - // RSA: DER - // ED25519: 32B - // Used for sending encryted webpush message - // If not known, will be populated after the connection. - PublicKey []byte `json:"pub,omitempty"` + m sync.RWMutex - // Auth for webpush. A shared secret known by uGate and remote - // node. - //Auth []byte `json:"auth,omitempty"` + Client *http.Client - // Information from the node - from an announce or message. - // Not trusted, self-signed. - NodeAnnounce *NodeAnnounce `json:"info,omitempty"` + http1SChan chan net.Conn + http1CChan chan net.Conn - Labels map[string]string `json:"l,omitempty"` + Http11Transport *http.Transport - // Will be set if there are problems connecting to the node - // (or if connection duration is too short) - Backoff time.Duration `json:"-"` - - // IP4 address of last announce (link local) or connection - Last4 *net.UDPAddr `json:"-"` - // LastSeen in a multicast announce - LastSeen4 time.Time - - // IP6 address of last announce or connection. - Last6 *net.UDPAddr `json:"-"` - // LastSeen in a multicast announce - LastSeen6 time.Time `json:"-"` + // Default dialer used to connect to host:port extracted from metadata. + // Defaults to net.Dialer, making real connections. + // + // Can be replaced with a mux or egress dialer or router for + // integration. + NetDialer meshauth.ContextDialer - FirstSeen time.Time + // Used for udp proxy, when a captured packet is received. + DNS UDPHandler + UDPHandler UDPHandler - // Last packet or registration from the peer. - LastSeen time.Time `json:"t"` + // Active connection by stream tuple, for MDS and debug. + // This is primarily used for proxied connection, to allow the receiver to get metadata + // (certs, real caller, etc) + ActiveTcp map[string]nio.Stream - // In seconds since first seen, last 100 - Seen []int `json:"-"` + TcpConActive *expvar.Int + TcpConTotal expvar.Int - Stats *HostStats + // template, used for TLS connections and the host WorkloadID + TLSConfig *tls.Config - // Muxer is a HTTP2-like connection to the node. - // Implements RoundTrip, with the semantics of CONNECT (no buffering) - // May be a direct or reverse connection. - Muxer Muxer `json:"-"` + StartFunctions []func(ug *UGate) } -const ProtoTLS = "tls" -const ProtoSNI = "sni" - -// autodetected for TLS. -const ProtoH2 = "h2" -const ProtoHTTP = "http" // 1.1 -const ProtoHTTPTrusted = "httpTrusted" // behind envoy or trusted gateway -const ProtoBTS = "bts" -const ProtoBTSC = "btsc" +// Modules are used with conditional compiled modules, to reduce deps and binary size. +// The function will be called when the Gate is created - they may initialize. +// gate.StartFunctions will be called during Start(). +var Modules = map[string]func(gate *UGate){} -const ProtoTCPOut = "tcpOut" -const ProtoTCPIn = "tcpIn" - -const ProtoHAProxy = "haproxy" +// New creates a new UGate node. It requires a workload identity, including mTLS certificates. +func New(auth *meshauth.MeshAuth, ms *MeshSettings) *UGate { + // For tests - main() and libraries should initialize the 3 configs. + if ms == nil { + ms = &MeshSettings{} + } -// Egress capture - for dedicated listeners -const ProtoSocks = "socks5" -const ProtoIPTables = "iptables" -const ProtoIPTablesIn = "iptables-in" + ug := &UGate{ + Auth: auth, + MeshSettings: ms, + ListenerProto: map[string]func(gate *UGate, l *meshauth.PortListener) error{}, + Mux: http.NewServeMux(), + + Client: http.DefaultClient, + NetDialer: &net.Dialer{}, + MuxDialers: map[string]meshauth.ContextDialer{}, + ActiveTcp: map[string]nio.Stream{}, + TcpConActive: &expvar.Int{}, + } -// Mapping to Istio: -// - gateway port -> listener conf -// - Remote -> shortcut for a TCP listener with single deset. -// - SNI/Socks -> host extracted from protocol. -// -// + // Init default HTTP handler + ug.H2Handler = &httpwrapper.HttpHandler{ + Handler: ug.Mux, + Logger: slog.With("id", ms.Name), + } -// -------------------- Used by upgate + ug.Http11Transport = &http.Transport{ + DialContext: ug.DialContext, + // If not set, DialContext and TLSClientConfig are used + DialTLSContext: ug.DialContext, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + Proxy: http.ProxyFromEnvironment, + } + if ug.Auth == nil { + ug.Auth = meshauth.NewMeshAuth(&ms.MeshCfg) + if ug.Priv == "" { + ug.Auth.InitSelfSigned("") + } + } -// TODO: use net.Dialer (timeout, keep alive, resolver, etc) + if ms.Listeners == nil { + ms.Listeners = map[string]*meshauth.PortListener{} + } -// TODO: use net.Dialer.DialContext(ctx context.Context, network, address string) (Stream, error) -// Dialer also uses nettrace in context, calls resolver, -// can do parallel or serial calls. Supports TCP, UDP, Unix, IP + if ms.HandsahakeTimeout == 0 { + ms.HandsahakeTimeout = 5 * time.Second + } -// nettrace: internal, uses TraceKey in context used for httptrace, -// but not exposed. Net has hooks into it. -// RoundTripStart, lookup keep track of DNSStart, DNSDone, ConnectStart, ConnectDone + if ms.Clusters == nil { + ms.Clusters = map[string]*MeshCluster{} + //} else { + // for _, c := range ms.Clusters { + // c.UGate = ug + // } + } -// httptrace: -// WithClientTrace(ctx, trace) Context -// ContextClientTrace(ctx) -> *ClientTrace + if ms.ConnectTimeout.Duration == 0 { + ms.ConnectTimeout.Duration = 5 * time.Second + } -// ContextDialer is same with x.net.proxy.ContextDialer -// Used to create the actual connection to an address using the mesh. -// The result may have metadata, and be an instance of nio.Stream. -// -// A uGate implements this interface, it is the primary interface -// for creating streams where the caller does not want to pass custom -// metadata. Based on net and addr and handshake, if destination is -// capable we will upgrade to BTS and pass metadata. This may also -// be sent via an egress gateway. -// -// For compatibility, 'net' can be "tcp" and addr a mangled hostname:port -// Mesh addresses can be identified by the hostname or IP6 address. -// External addresses will create direct connections if possible, or -// use egress server. -// -// TODO: also support 'url' scheme -type ContextDialer interface { - DialContext(ctx context.Context, net, addr string) (net.Conn, error) -} + // Init the HTTP reverse proxy, for apps listening for HTTP/1.1 on 8080 + // This is used for serverless but also support regular pods. + // TODO: customize the port. + // TODO: add a h2 reverse proxy as well on 8082, and grpc on 8081 + u, _ := url.Parse("http://127.0.0.1:8080") + ug.ReverseProxy = httputil.NewSingleHostReverseProxy(u) -// Deprecated - use ContextDialer. Implemented only by Quic -// StreamDialer is used to open a stream by address, optionally passing -// metadata and starting to forward ( possibly as early data ) an input -// stream. Generally implemented by multiplexer protocols that support -// metadata, like H2, H3 or raw multiplexers using a startup header. -type StreamDialer interface { - // DialStream is open the connection to the stream. - // addr is host:port format - // host can be a 32-byte base32 encoded string, or other IP or DNS name - // - // inStream.In, if not nil, will be automatically forwarded to new dialed stream. - // inStream in headers, if set, will be forwarded to the remote host. - // - DialStream(ctx context.Context, addr string, inStream *nio.Stream) (*nio.Stream, error) -} + msgs.InitMux(msgs.DefaultMux, ug.Mux, ug.Auth) -// Muxer is the interface implemented by a multiplexed connection with metadata -type Muxer interface { - http.RoundTripper + ug.Mux.Handle("/debug/", http.DefaultServeMux) - io.Closer + for _, m := range Modules { + m(ug) + } - //Ping(ctx context.Context) error + return ug } -type MuxDialer interface { - // DialMux creates a bi-directional multiplexed association with the node. - // The node must support a multiplexing protocol - the fallback is H2. - // - // Fallback: - // For non-mesh nodes the H2 connection may not allow incoming streams or - // messages. Mesh nodes emulate incoming streams using /h2r/ and send/receive - // messages using /.dm/msg/ - DialMux(ctx context.Context, node *Cluster, meta http.Header, ev func(t string, stream *nio.Stream)) (Muxer, error) -} -// HeaderEncoder abstracts the encoding of metadata. -// Standard HTTP/2 or QUIC, proto, other formats may be used. +//// Handler is a handler for net.Conn with metadata. +//// Lighter alternative to http.Handler - used for TCP listeners. +//type Handler interface { +// // HandleConn will process a received connection. +// // TODO: add a ctx as soon as accept is called, including meta. +// HandleConn(net.Conn) error +//} // -// This interface uses the Stream buffer and encodes/decodes the -// metadata associated with the stream. -type HeaderEncoder interface { - // Marshall will encode the headers into the wBuffer. - // Flush will need to be called to send to s.Out - Marshal(s *nio.Stream) error - - // AddHeader directly to the stream buffer - without adding it to the meta. - AddHeader(s *nio.Stream, k, v []byte) - - // Unmarshall will decode from s.rBuffer. s.Fill() may be called to get - // additional data. The decoded headers will be set on the stream. - Unmarshal(s *nio.Stream) (done bool, err error) -} - -// IPResolver uses DNS cache or lookups to return the name -// associated with an IP, for metrics/stats/logs -type IPResolver interface { - IPResolve(ip string) string -} - -// For integration with TUN -// TODO: use same interfaces. +//// Wrap a function as a stream handler. +//type HandlerFunc func(conn net.Conn) error +// +//func (c HandlerFunc) HandleConn(conn net.Conn) error { +// return c(conn) +//} -// Used by the TUN interface +// UDPHandler is used to abstract the handling of incoming UDP packets on a UDP +// listener or TUN. type UDPHandler interface { HandleUdp(dstAddr net.IP, dstPort uint16, localAddr net.IP, localPort uint16, data []byte) } @@ -384,131 +323,417 @@ type UdpWriter interface { WriteTo(data []byte, dstAddr *net.UDPAddr, srcAddr *net.UDPAddr) (int, error) } -// IPFS: -// http:///ipfs/CID/path -// http://.ipfs./ -// http://gateway/ipns/IPNDS_ID/path -// ipfs:///, ipns:///, and dweb:// -// -// Multiaddr: TLV -// CloseWriter is one of possible interfaces implemented by Out to send a FIN, without closing -// the input. Some writers only do this when Close is called. -type CloseWriter interface { - CloseWrite() error +// All streams must call this method once a connection is made, and defer OnStreamDone +func (ug *UGate) OnStream(s nio.Stream) { + ug.TcpConActive.Add(1) + ug.TcpConTotal.Add(1) } -// Interface for very simple configuration and key loading. -// Can have a simple in-memory, fs implementation, as well -// as K8S, XDS or database backends. -// -// The name is hierachical, in case of K8S or Istio corresponds -// to the type, including namespace. -type ConfStore interface { - // Get a config blob by name - Get(name string) ([]byte, error) +// Called at the end of the connection handling. After this point +// nothing should use or refer to the connection, both proxy directions +// should already be closed for write or fully closed. +func (ug *UGate) OnStreamDone(str nio.Stream) { + + ug.m.Lock() + delete(ug.ActiveTcp, str.State().StreamId) + ug.m.Unlock() + ug.TcpConActive.Add(-1) + // TODO: track multiplexed streams separately. + //if str.ReadErr != nil { + // VarzSErrRead.Add(1) + //} + //if str.WriteErr != nil { + // VarzSErrWrite.Add(1) + //} + //if str.ProxyReadErr != nil { + // VarzCErrRead.Add(1) + //} + //if str.ProxyWriteErr != nil { + // VarzCErrWrite.Add(1) + //} + + if r := recover(); r != nil { + + debug.PrintStack() + + // find out exactly what the error was and set err + var err error + + switch x := r.(type) { + case string: + err = errors.New(x) + case error: + err = x + default: + err = errors.New("Unknown panic") + } + log.Println("AC: Recovered in f", r, err) + } + + //if NoEOF(str.ReadErr) != nil || str.WriteErr != nil { + // log.Println(str.StreamId, "AE:", "Err in:", str.ReadErr, str.WriteErr) + //} + //if NoEOF(str.ProxyReadErr) != nil || str.ProxyWriteErr != nil { + // log.Println(str.StreamId, "AE:", "Err out:", str.ProxyReadErr, str.ProxyWriteErr) + //} + //if !str.Closed { + // str.Close() + //} + + ug.OnSClose(str, str.RemoteAddr()) +} + +func (gw *UGate) OnMuxClose(dm *MeshCluster) { + +} - // Save a config blob - Set(conf string, data []byte) error +func (gw *UGate) OnSClose(s nio.Stream, addr net.Addr) { + //str := s.State() + //if str.ReadErr != nil || str.WriteErr != nil { + // log.Printf("%d AC: src=%s://%v dst=%s rcv=%d/%d snd=%d/%d la=%v ra=%v op=%v %v %v", + // str.StreamId, + // str.Type, addr, + // str.Dest, + // str.RcvdPackets, str.RcvdBytes, + // str.SentPackets, str.SentBytes, + // time.Since(str.LastWrite), + // time.Since(str.LastRead), + // int64(time.Since(str.Open).Seconds()), + // str.ReadErr, str.WriteErr) + // return + //} + //log.Printf("AC: %d src=%s://%v dst=%s rcv=%d/%d snd=%d/%d la=%v ra=%v op=%v", + // str.StreamId, + // str.Type, addr, + // str.Dest, + // str.RcvdPackets, str.RcvdBytes, + // str.SentPackets, str.SentBytes, + // time.Since(str.LastWrite), + // time.Since(str.LastRead), + // int64(time.Since(str.Open).Seconds())) +} - // List the configs starting with a prefix, of a given type - List(name string, tp string) ([]string, error) +func (ug *UGate) RegisterProxyStream(s nio.Stream) { + // TODO: compute StreamId based on meta ( tuple ) + ug.m.Lock() + ug.ActiveTcp[s.State().StreamId] = s + ug.m.Unlock() } -// ConfInt returns an string setting, with default value, from the ConfStore. -func ConfStr(cs ConfStore, name, def string) string { - if cs == nil { - return def +// RemoteID returns the node WorkloadID based on authentication. +func (gw *UGate) RemoteID(s nio.Stream) string { + tls := s.TLSConnectionState() + if tls != nil { + if len(tls.PeerCertificates) == 0 { + return "" + } + pk, err := meshauth.VerifySelfSigned(tls.PeerCertificates) + if err != nil { + return "" + } + + return meshauth.PublicKeyBase32SHA(pk) } - b, _ := cs.Get(name) - if b == nil { - return def + return "" +} + +// StartBHoneD will listen on addr as H2C (typically :15009) +// +// +// Incoming streams for /_hbone/mtls will be treated as a mTLS connection, +// using the Istio certificates and root. After handling mTLS, the clear text +// connection will be forwarded to localhost:8080 ( TODO: custom port ). +// +// TODO: setting for app protocol=h2, http, tcp - initial impl uses tcp +// +// Incoming requests for /_hbone/22 will be forwarded to localhost:22, for +// debugging with ssh. +// + + +// HandleTCPProxy connects and forwards r/w to the hostPort +func (hb *UGate) HandleTCPProxy(w io.Writer, r io.Reader, hostPort string) error { + log.Println("net.RoundTripStart", hostPort) + nc, err := net.Dial("tcp", hostPort) + if err != nil { + log.Println("Error dialing ", hostPort, err) + return err } - return string(b) + + return nio.Proxy(nc, r, w, hostPort) } -// ConfInt returns an int setting, with default value, from the ConfStore. -func ConfInt(cs ConfStore, name string, def int) int { - if cs == nil { - return def +// HttpClient returns a http.Client configured with the specified root CA, and reasonable settings. +// The URest wrapper is added, for telemetry or other interceptors. +func (hb *UGate) HttpClient(caCert []byte) *http.Client { + // The 'max idle conns, idle con timeout, etc are shorter - this is meant for + // fast initial config, not as a general purpose client. + tr := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + + MaxIdleConns: 10, + IdleConnTimeout: 30 * time.Second, } - b, _ := cs.Get(name) - if b == nil { - return def + + if caCert != nil && len(caCert) > 0 { + roots := x509.NewCertPool() + if !roots.AppendCertsFromPEM(caCert) { + log.Println("Failed to decode PEM") + } + tr.TLSClientConfig = &tls.Config{ + RootCAs: roots, + } } - v, err := strconv.Atoi(string(b)) + + return &http.Client{ + Transport: tr, + } +} + + +// Dealing with capture + +// HanldeTUN is called when a TCP egress connection is intercepted via TProxy or TUN (gVisor or lwip) +// target is the destination address, la is the local address (the connection will have it reversed). +func (hb *UGate) HandleTUN(nc net.Conn, target *net.TCPAddr, la *net.TCPAddr) { + log.Println("TUN TCP ", target, la) + dest := target.String() + + rc, err := hb.Dial("tcp", dest) if err != nil { - return def + nc.Close() + return } - return v + nio.Proxy(rc, nc, nc, dest) + return } -// Information about a node. -// Sent periodically, signed by the origin - for example as a JWT, or UDP -// proto. -// TODO: map it to Pod, IPFS announce -// TODO: move Wifi discovery to separate package. -type NodeAnnounce struct { - UA string `json:"UA,omitempty"` +// HandleUdp is the common entry point for UDP capture. +// - tproxy +// - gvisor/lwIP +// WIP +func (hb *UGate) HandleUdp(dstAddr net.IP, dstPort uint16, + localAddr net.IP, localPort uint16, + data []byte) { + log.Println("TProxy UDP ", dstAddr, dstPort, localAddr, localPort, len(data)) +} - // Non-link local IPs from all interfaces. Includes public internet addresses - // and Wifi IP4 address. Used to determine if a node is directly connected. - IPs []*net.UDPAddr `json:"addrs,omitempty"` +type Route struct { + // Addr (ex :8080). This is the requested address. + // + // BTS, SOCKS, HTTP_PROXY and IPTABLES have default ports and bindings, don't + // need to be configured here. + //Addr string `json:"address,omitempty"` - // Set if the node is an active Android AP. - SSID string `json:"ssid,omitempty"` + // How to connect. Default: original dst + //Protocol string `json:"proto,omitempty"` +} - // True if the node is an active Android AP on the interface sending the message. - // Will trigger special handling in link-local - if the receiving interface is also - // an android client. - AP bool `json:"AP,omitempty"` - Ack bool `json:"ACK,omitempty"` - // VIP of the direct parent, if this node is connected. - // Used to determine the mesh topology. - Vpn string `json:"Vpn,omitempty"` +// Start listening on all configured ports. +// This doesn't have to be called if ugate is used in client mode. +func (ug *UGate) Start() error { + // Explicit TCP forwarders. + for k, t := range ug.Listeners { + if t.Name == "" { + t.Name = k + } + err := ug.StartListener(t) + if err != nil { + slog.Warn("Failed to start listener", "name", t.Port, "err", err) + } else { + slog.Info("listener", "addr", t.Address, "proto", t.Protocol) + } + } + + return nil } -// Textual representation of the node registration data. -func (n *Cluster) String() string { - b, _ := json.Marshal(n) - return string(b) +func (ug *UGate) Close() error { + var err error + for _, p := range ug.Listeners { + if p.NetListener != nil { + e := p.NetListener.Close() + if e != nil { + err = err + } + p.NetListener = nil + } + } + return err } -// Return the list of gateways for the node, starting with the link local if any. -func (n *Cluster) GWs() []*net.UDPAddr { - res := []*net.UDPAddr{} +// OnHClose called on http close +func (gw *UGate) OnHClose(s string, id string, san string, r *http.Request, since time.Duration) { + slog.Info("HTTP", "method", r.Method, + "url", r.URL, "proto", r.Proto, "header", r.Header, "id", id, + "san", san, "remote", r.RemoteAddr, "d", since) +} - if n.Last4 != nil { - res = append(res, n.Last4) +var LogClose = true + +// StartListener and Start a real port listener on a port. +// Virtual listeners can be added to ug.Conf or the mux. +// Creates a raw (port) TCP listener. Accepts connections +// on a local port, forwards to a remote destination. +func (ug *UGate) StartListener(ll *meshauth.PortListener) error { + if ll.Protocol == "" { + parts := strings.Split(ll.Name, "-") + ll.Protocol = parts[0] + if ll.Address == "" && ll.Port == 0 { + if len(parts) == 2 { + p, _ := strconv.Atoi(parts[1]) + ll.Port = int32(p) + } else if len(parts) > 2 { + ll.Address = net.JoinHostPort(parts[1], parts[2]) + } + } } - if n.Last6 != nil { - res = append(res, n.Last6) + + if ll.Address == "" && ll.Port != 0 { + ll.Address = fmt.Sprintf(":%d", ll.Port) } - return res + + + f := ug.ListenerProto[ll.Protocol] + if f != nil { + go func() { + err := f(ug, ll) + if err != nil { + slog.Info("Listener error", "err", err, "addr", ll.Address, "name", ll.Name, "proto", ll.Protocol) + } + }() + return nil + } + + slog.Info("Listener error", "err", "missing protocol handler", "addr", ll.Address, "name", ll.Name, "proto", ll.Protocol) + return errors.New("Missing handler" + ll.Protocol) } -func (n *Cluster) BackoffReset() { - n.Backoff = 0 + +// DialTLS dials a TLS connection to addr and does the handshake. +// It opens a direct TLS connection using the dialer for TCP. +// No peer verification - the returned stream will have the certs. +// addr is a real internet address, not a mesh one. +// +// Used internally to create the raw TLS connections to both mesh +// and non-mesh nodes. +// Do a TLS handshake on the plain text nc. +// Verify the server identity using a remotePeerID - based on public key. +// TODO: add syncthing style hash of cert, spiffee, DNS as alternative identities. +// TODO: add root CAs (including public) and SHA of root cert. +func (*UGate) NewTLSConnOut(ctx context.Context, nc net.Conn, + cfg *meshauth.MeshAuth, + remotePeerID string, alpn []string) (nio.Stream, error) { + + tlsc, err := cfg.TLSClient(ctx, nc, &meshauth.Dest{ + Addr: "", + CACertPEM: nil, + TokenProvider: nil, + TokenSource: "", + SNI: remotePeerID, + ALPN: alpn, + }, remotePeerID) + if err != nil { + return nil, err + } + tlsS := tlsc.ConnectionState() + + s := nio.NewStreamConn(tlsc) + s.TLS = &tlsS + //s.State().PeerPublicKey = remotePubKey + + return s, nil } -func (n *Cluster) BackoffSleep() { - if n.Backoff == 0 { - n.Backoff = 5 * time.Second +// DialMUX creates an association with the node, using one of the supported +// transports. +// +// The node should have at least the address or public key or hash populated. +func (ug *UGate) DialMUX(ctx context.Context, net string, node *MeshCluster, ev func(t string, stream nio.Stream)) (http.RoundTripper, error) { + if node.RoundTripper != nil { + return node.RoundTripper, nil } - time.Sleep(n.Backoff) - if n.Backoff < 5*time.Minute { - n.Backoff = n.Backoff * 2 + + return node.HttpClient().Transport, nil +} + +// DialContext dials a destination address (host:port). +// This can be used in applications as a TCP Dial replacement. +// +// It will first attempt to look up the host config, and if it supports 'mesh' will +// use a secure, multiplexed connection. +// +func (hb *UGate) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { + c := hb.GetCluster(addr) + if c == nil { + host, _, _ := net.SplitHostPort(addr) + c = hb.GetCluster(host) } + + + if c!= nil { + + if c.Dialer == nil && c.Proto != "" { + // TODO: set proto based on labels + c.Dialer = hb.MuxDialers[c.Proto] + } + + if c.Dialer != nil { + return c.Dialer.DialContext(ctx, network, addr) + } else { + log.Println("Invalid dialer") + return nil, errors.New("Missing dialer for protocol") + } + + + // TODO: routing, etc - based on endpoints and TcpRoutes + } + + // TODO: if egress gateway is set, use it ( redirect all unknown to egress ) + // TODO: CIDR range of Endpoints, Nodes, VIPs to use hbone + // TODO: if port, use SNI or match clusters + nc, err := hb.NetDialer.DialContext(ctx, "tcp", addr) + if err != nil { + return nil, err + } + + // If net connection is cut, by default the socket may linger for up to 20 min without detecting this. + // Extracted from gRPC - needs to apply at TCP socket level + if c.TCPUserTimeout != 0 { + syscall.SetTCPUserTimeout(nc, c.TCPUserTimeout) + } + + return nc, err } -// === Messaging -// The former messaging interface is mapped to HTTP: -// - incoming messages are treated as HTTP requests. CloudEvents/Pubub/etc are ok. -// - polling results in posting same HTTP requests, internally -// - sending events: using a special HttpClient. +// RoundTrip makes a HTTP request (over some secure transport including ambient and tunnels), over +// a multiplexed or direct connection. +//func (ug *UGate) RoundTrip(req *http.Request) (*http.Response, error) { +// hostPort := req.Host +// if hostPort == "" { +// hostPort = req.URL.Host +// } +// c, err := ug.Cluster(req.Context(), hostPort) +// if err != nil { +// return nil, err +// } // -// Main 'difference' between a message and a regular HTTP is the size of request is limited. -// Webpush is also mapped in the same way - the glue code handles encryption/decryption. -// PubSubMessage is the payload of a Pub/Sub event. +// return c.RoundTrip(req) +//} + + + +// Dial calls @See DialContext +func (hb *UGate) Dial(n, a string) (net.Conn, error) { + return hb.DialContext(context.Background(), n, a) +} + diff --git a/ugated/README.md b/ugated/README.md new file mode 100644 index 0000000..3768039 --- /dev/null +++ b/ugated/README.md @@ -0,0 +1,9 @@ +# Conditional compilation modules + +To plugin extra protocols, add a small adapter in this directory. + +If it needs more code - a package with separate go.mod can be used. + +If the integration has complex dependencies or is specific to a platform - +it can just be imported from specialized main() apps. GVisor/LWIP for TUN +support are examples. diff --git a/ugated/cmd/testdata/alice/kube.json b/ugated/cmd/testdata/alice/kube.json deleted file mode 100755 index 7eb863d..0000000 --- a/ugated/cmd/testdata/alice/kube.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwekNDQVhtZ0F3SUJBZ0lSQUxRSWhRdytlL1h2RGhabjFjZkxwZkF3Q2dZSUtvWkl6ajBFQXdJd09URVcKTUJRR0ExVUVDaE1OYUM1M1pXSnBibVl1YVc1bWJ6RWZNQjBHQTFVRUF4TVdZMjl6ZEdsdU1UWXVhQzUzWldKcApibVl1YVc1bWJ6QWVGdzB5TVRBME1UVXhNekUwTXpsYUZ3MHlNakEwTVRVeE16RTBNemxhTURreEZqQVVCZ05WCkJBb1REV2d1ZDJWaWFXNW1MbWx1Wm04eEh6QWRCZ05WQkFNVEZtTnZjM1JwYmpFMkxtZ3VkMlZpYVc1bUxtbHUKWm04d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUU0ROL1UwZEk3UGpIdWx1V3BSdzR5akxmagpJblZiNE9uSEVRTGlVTkVUZW94SlZXQUVzRitCamo5Yzk2RU1YRElibitVZ3cvYVRldkJVOGF1SjdjRkdvMkl3CllEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUdDQ3NHQVFVRkJ3TUMKTUF3R0ExVWRFd0VCL3dRQ01BQXdJUVlEVlIwUkJCb3dHSUlXWTI5emRHbHVNVFl1YUM1M1pXSnBibVl1YVc1bQpiekFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUJWcGNQUG94cjV4ZS8vSUdCcUVLVUsvZEhXNXlvc203RFdPNFN0CndVRkFaQUloQUp3NjExSXNBMmN1NFpQczdSQ2NmQ29EUlh2UWpQeUZQV1VZSzFFT1dOdTIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2FmWGdCYzkwVVBGNWJ4QjMKeC9JMWFTUXdGVkR0OXFlSmVIUjRLQ0NPUmlTaFJBTkNBQVRTRE4vVTBkSTdQakh1bHVXcFJ3NHlqTGZqSW5WYgo0T25IRVFMaVVORVRlb3hKVldBRXNGK0JqajljOTZFTVhESWJuK1Vndy9hVGV2QlU4YXVKN2NGRwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ" - } - } - ], - "current-context": "default" -} diff --git a/ugated/cmd/testdata/alice/ugate.json b/ugated/cmd/testdata/alice/ugate.json deleted file mode 100644 index 9eb9915..0000000 --- a/ugated/cmd/testdata/alice/ugate.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "domain": "svc.cluster.local", - "tunProto": ["h2r"], - "basePort": 6400, - "listeners": { - "10.10.0.2:6412": { - "forwardTo": "127.0.0.1:5201" - }, - "udp://10.10.0.2:6412": { - "forwardTo": "127.0.0.1:5201" - }, - ":6414": { - "forwardTo": "127.0.0.1:5201" - }, - "udp://:6414": { - "forwardTo": "127.0.0.1:5201" - }, - ":6412": { - "forwardTo": "127.0.0.1:5201" - }, - ":6413": { - "forwardTo": "/echo" - }, - ":6411": { - "forwardTo": "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ:5201" - } - - }, - "hosts": { - "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ": { - "addr": "127.0.0.1:6007" - } - }, - "remoteAccept": { - "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ": "" - } -} diff --git a/ugated/cmd/testdata/bob/kube.json b/ugated/cmd/testdata/bob/kube.json deleted file mode 100755 index a0fe5a0..0000000 --- a/ugated/cmd/testdata/bob/kube.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwekNDQVhpZ0F3SUJBZ0lRS1RXUlp4WWUyTzIxa2doRkNnL1Z0VEFLQmdncWhrak9QUVFEQWpBNU1SWXcKRkFZRFZRUUtFdzF0TG5kbFltbHVaaTVwYm1adk1SOHdIUVlEVlFRREV4WmpiM04wYVc0eE5pNXRMbmRsWW1sdQpaaTVwYm1adk1CNFhEVEl4TURReU5ERXpORGt3TlZvWERUSXlNRFF5TkRFek5Ea3dOVm93T1RFV01CUUdBMVVFCkNoTU5iUzUzWldKcGJtWXVhVzVtYnpFZk1CMEdBMVVFQXhNV1kyOXpkR2x1TVRZdWJTNTNaV0pwYm1ZdWFXNW0KYnpCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQlBWUUVCRjBMMWZnTzlrQVpUS0RwdzZ5ZlI5WgpzWVh1dGJwY0trTUhoV3BJTkw0SDFxcDgxc0VOZ21KbmdIbnA4VU50NWxvbHA3VU5BVlpqaUIvZnkybWpZakJnCk1BNEdBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXcKREFZRFZSMFRBUUgvQkFJd0FEQWhCZ05WSFJFRUdqQVlnaFpqYjNOMGFXNHhOaTV0TG5kbFltbHVaaTVwYm1adgpNQW9HQ0NxR1NNNDlCQU1DQTBrQU1FWUNJUUMrbytLbDZ4cklaNEtUeVNTQWczd0p4L2pZOFFzWGlOb2VUZ1lrCmdYeTl4QUloQVBORlpHRm44UTBiMkFuSUI4LzFHR0Z0bzcwT3VWczF3cG1qRzByK3lQZnAKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ3o1YXFiMmhIUDlkcjQ5QXMKMXRuM0Vwclg0TmdSbHQ1QS9qL1d2cjIxY2p1aFJBTkNBQVQxVUJBUmRDOVg0RHZaQUdVeWc2Y09zbjBmV2JHRgo3clc2WENwREI0VnFTRFMrQjlhcWZOYkJEWUppWjRCNTZmRkRiZVphSmFlMURRRldZNGdmMzh0cAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA" - } - } - ], - "current-context": "default" -} diff --git a/ugated/cmd/testdata/bob/ugate.json b/ugated/cmd/testdata/bob/ugate.json deleted file mode 100644 index 562af01..0000000 --- a/ugated/cmd/testdata/bob/ugate.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "domain": "svc.cluster.local", - "basePort": 6100, - "tunProto": [ - "quic" - ], - "listeners": { - ":6111": { - "forwardTo": "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ:5201" - } - }, - "hosts": { - "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ": { - "addr": "127.0.0.1:6007" - } - }, - "remoteAccept": { - "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ": "" - } -} diff --git a/ugated/cmd/testdata/carol/kube.json b/ugated/cmd/testdata/carol/kube.json deleted file mode 100755 index 7c1974a..0000000 --- a/ugated/cmd/testdata/carol/kube.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "IN7E4J4VZ66TJZFY4ZABEM6STXIBEU7GVAVOE5NCM5DLVRIDJNFQ", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIxRENDQVhtZ0F3SUJBZ0lSQU5zVzZ2ZHMzc051WEZkc3FYODRzNFV3Q2dZSUtvWkl6ajBFQXdJd09URVcKTUJRR0ExVUVDaE1OYUM1M1pXSnBibVl1YVc1bWJ6RWZNQjBHQTFVRUF4TVdZMjl6ZEdsdU1UWXVhQzUzWldKcApibVl1YVc1bWJ6QWVGdzB5TVRBME1UVXhNekV4TWpCYUZ3MHlNakEwTVRVeE16RXhNakJhTURreEZqQVVCZ05WCkJBb1REV2d1ZDJWaWFXNW1MbWx1Wm04eEh6QWRCZ05WQkFNVEZtTnZjM1JwYmpFMkxtZ3VkMlZpYVc1bUxtbHUKWm04d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFUalVId0ZzZmh5VjlsUGJOU3RqYThod3RCQQpTQS9QQVlyM3lBSTZLTlppS0tqVTQyVjZyOWJOaDN4R2xMYmJOcDdVbis4NmJEZ2p3ZVVrY2NEV2p2RE9vMkl3CllEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUdDQ3NHQVFVRkJ3TUMKTUF3R0ExVWRFd0VCL3dRQ01BQXdJUVlEVlIwUkJCb3dHSUlXWTI5emRHbHVNVFl1YUM1M1pXSnBibVl1YVc1bQpiekFLQmdncWhrak9QUVFEQWdOSkFEQkdBaUVBNWkwZXZ1TTU0M1hVVldkOFhpRjRrVDdFWnA0TEQ0ODFxeXNsCk5VUzAycElDSVFDMml5NmRLUzlTZmNYdStNYVcxVSt1QWV5WGRTZWhnWTU4QXJYTHI5aDUzUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ2dsTm9MbVhxN3c0OTduTEEKVFg3TDQyQ283cDVHSVNyOFgvek1yVldTYUo2aFJBTkNBQVRqVUh3RnNmaHlWOWxQYk5TdGphOGh3dEJBU0EvUApBWXIzeUFJNktOWmlLS2pVNDJWNnI5Yk5oM3hHbExiYk5wN1VuKzg2YkRnandlVWtjY0RXanZETwotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "IN7E4J4VZ66TJZFY4ZABEM6STXIBEU7GVAVOE5NCM5DLVRIDJNFQ" - } - } - ], - "current-context": "default" -} diff --git a/ugated/cmd/testdata/carol/ugate.json b/ugated/cmd/testdata/carol/ugate.json deleted file mode 100644 index 78f2b0c..0000000 --- a/ugated/cmd/testdata/carol/ugate.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "basePort": 14200, - "listeners": { - ":15101": { - "forwardTo": "localhost:5201" - }, - ":15108": {}, - ":15102": {} - }, - "accept": { - "h.webinf.info:15007": "" - } -} diff --git a/ugated/cmd/testdata/gate/kube.json b/ugated/cmd/testdata/gate/kube.json deleted file mode 100755 index 997fa9a..0000000 --- a/ugated/cmd/testdata/gate/kube.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "apiVersion": "v1", - "kind": "Config", - "clusters": [], - "users": [ - { - "name": "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ", - "user": { - "client-certificate-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUIwakNDQVhtZ0F3SUJBZ0lSQU0zbk9zMmZCbk52SnVHMWY3WHU0TzR3Q2dZSUtvWkl6ajBFQXdJd09URVcKTUJRR0ExVUVDaE1OYlM1M1pXSnBibVl1YVc1bWJ6RWZNQjBHQTFVRUF4TVdZMjl6ZEdsdU1UWXViUzUzWldKcApibVl1YVc1bWJ6QWVGdzB5TVRBME1qWXhOREEyTWpoYUZ3MHlNakEwTWpZeE5EQTJNamhhTURreEZqQVVCZ05WCkJBb1REVzB1ZDJWaWFXNW1MbWx1Wm04eEh6QWRCZ05WQkFNVEZtTnZjM1JwYmpFMkxtMHVkMlZpYVc1bUxtbHUKWm04d1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFTQWc5S1VnaTFLVTZFMHhZK3VQcmVPUFJ3LwpNQlQyVUFPUTFSd0pqc09uZjQ5cWk5aEJyNkI5WTJFV1JwUkwyY01RS0g2ak5qWkYvcVVSYzBiRG9iK0JvMkl3CllEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUdDQ3NHQVFVRkJ3TUMKTUF3R0ExVWRFd0VCL3dRQ01BQXdJUVlEVlIwUkJCb3dHSUlXWTI5emRHbHVNVFl1YlM1M1pXSnBibVl1YVc1bQpiekFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUJVTm85LzBNclAxRUZmT2YyR3BUUUpuazRNYXNYbTNpNXdEWWlICi9pRGpwQUlnSHkrUEJNTThYdGhQbGJYV0I1SSt0M2poZGtPMVRjYnlYTkFheUtVTzQ5ND0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", - "client-key-data": "LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZ0EwMzVEQzNuMGFqandObkIKRVc0bjVTazFhMkVPTmY4MkFFeWlURlIzOG51aFJBTkNBQVNBZzlLVWdpMUtVNkUweFkrdVByZU9QUncvTUJUMgpVQU9RMVJ3SmpzT25mNDlxaTloQnI2QjlZMkVXUnBSTDJjTVFLSDZqTmpaRi9xVVJjMGJEb2IrQgotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg==" - } - } - ], - "contexts": [ - { - "name": "default", - "context": { - "cluster": "default", - "user": "GJU4ACOW36Q3IBL45T2TRQ63M6FNQYEJMLPJNDJETIOVIEFD7MGQ" - } - } - ], - "current-context": "default" -} diff --git a/ugated/cmd/testdata/gate/ugate.json b/ugated/cmd/testdata/gate/ugate.json deleted file mode 100644 index 5f54380..0000000 --- a/ugated/cmd/testdata/gate/ugate.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "domain": "svc.cluster.local", - "tunProto": ["h2r"], - "basePort": 6000, - "listeners": { - ":6011": { - "forwardTo": "127.0.0.1:5201" - }, - ":6012": { - "forwardTo": "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA:5201" - }, - ":6013": { - "forwardTo": "A3UCXD63FCFXMX7GH64FZM5EAHH3PGLKWRMBHPGY4AA3MGM6SXPQ:5201" - } - - }, - "hosts": { - "BVMXJRUH7FVKYBZBXJ7HQVHDIMDO7ADRUUQLYMDU6X7SARNP5OXA": { - "addr": "127.0.0.1:6107" - } - } -} diff --git a/ugated/cmd/testdata/ugate.json b/ugated/cmd/testdata/ugate.json deleted file mode 100644 index e69de29..0000000 diff --git a/ugated/cmd/testdata/ugate.yaml b/ugated/cmd/testdata/ugate.yaml deleted file mode 100644 index 2ed4dff..0000000 --- a/ugated/cmd/testdata/ugate.yaml +++ /dev/null @@ -1,66 +0,0 @@ -basePort: 15000 - -## Port-based listeners. -# - 'whitebox' egress - listen on 127.0.0.1, forwardTo -# - forward: listen on :port, forwardTo dest -# - 'input': listen on :port, forwardTo localhost or empty -listeners: - # direct TCP connect to local iperf3 and fortio (or HTTP on default port) - ":15101": - forwardTo: 127.0.0.1:5201 - "udp://:15101": - # The TLS server forwarding to iperf3 - forwardTo: 127.0.0.1:5201 - - - # Double forwarding - similar with 2 Istio sidecars - ":15104": - forwardTo: localhost:15101 - # For HTTP (fortio) - ":15108": - forwardTo: localhost:8080 - - # Accept using TLS - client must use TLS as well - ":15102": - forwardTo: localhost:5201 - proto: tls - - # The equivalent for 2 sidecars - out TLS, in TLS - ":15103": - # The TLS server forwarding to iperf3 - forwardTo: localiperf - - # Virtual ports, captured via iptables-in - "-:443": - proto: https - - "-:8111": - forwardTo: localhost:15007 - - "-:8112": - proto: https - -# Hosts represents pre-configured nodes. -# Key is the DNS name or VIP. -# If a host is not found here, discovery will be used ( DNS, control plane) -hosts: - localiperf: - addr: localhost:15102 - - # Live test server - h.webinf.info: - addr: h.webinf.info:443 -# id: B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA -# -# c1.webinf.info: -# addr: c1.webinf.info:15007 - -# Remote accept request (reverse forward, "-R") -# Will also include relays, stun, etc. -# TODO: could also be part of the hosts: definition, include a list -# of ports. This way we don't dup the public key. -remoteAccept: - h.webinf.info: "B5B6KYYUBVKCX4PWPWSWAIHW2X2D3Q4HZPJYWZ6UECL2PAODHTFA" - - c1.webinf.info: "" - diff --git a/ugated/cmd/testdata/www b/ugated/cmd/testdata/www deleted file mode 120000 index 99b786e..0000000 --- a/ugated/cmd/testdata/www +++ /dev/null @@ -1 +0,0 @@ -../../../www \ No newline at end of file diff --git a/ugated/cmd/ugate.go b/ugated/cmd/ugate.go deleted file mode 100644 index c3979cf..0000000 --- a/ugated/cmd/ugate.go +++ /dev/null @@ -1,43 +0,0 @@ -package main - -import ( - "log" - _ "net/http/pprof" - - "github.com/costinm/ugate/pkg/ugatesvc" - - _ "github.com/costinm/ugate/ugated" -) - -// Minimal TCP over H2 Gateway, defaulting to Istio ports and capture behavior. -// There is no envoy - all traffic is upgraded to optional mTLS + H2 and sent to -// a gateway that does additional routing. -// -// This attempts to emulate the 'BTS' design, moving Envoy out of the pod, possibly -// to a shared pool. -// -// - iptables capture -// - option to use mTLS - if the network is secure ( ipsec or equivalent ) no encryption -// - detect TLS and pass it through -// - inbound: extract metadata -// - DNS and DNS capture (if root) -// - control plane using webpush messaging -// - webRTC and H2 for mesh communication -// - convert from H2/H1, based on local port config. -// -// Extras: -// - SOCKS and PROXY -// -// This does not include lwIP, which is now only used with AndroidVPN in -// JNI mode. -func main() { - // Load configs from the current dir and var/lib/dmesh, or env variables - // Writes to current dir. - config := ugatesvc.NewConf("./", "./var/lib/dmesh") - - _, err := ugatesvc.Run(config, nil) - if err != nil { - log.Fatal(err) - } - select {} -} diff --git a/ugated/cmd/ugate_test.go b/ugated/cmd/ugate_test.go deleted file mode 100644 index a312bd1..0000000 --- a/ugated/cmd/ugate_test.go +++ /dev/null @@ -1,54 +0,0 @@ -package main - -import ( - "context" - "fmt" - "testing" - - "github.com/costinm/hbone" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/cfgfs" - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/test" -) - -func TestFull(t *testing.T) { - // Fixed key, config from filesystem. Base is 14000 - alice, err := ugatesvc.Run(cfgfs.NewConf("testdata/alice/"), nil) - if err != nil { - t.Fatal(err) - } - alice.StartListener(&hbone.Listener{ - Address: fmt.Sprintf("0.0.0.0:%d", 14011), - //Protocol: "tls", - Handler: &ugatesvc.EchoHandler{}, - }) - - // In memory config store. All options - config := cfgfs.NewConf() - bob, err := ugatesvc.Run(config, &ugate.MeshSettings{ - BasePort: 14100, - }) - bob.StartListener(&hbone.Listener{ - Address: fmt.Sprintf("0.0.0.0:%d", 14111), - //Protocol: "tls", - Handler: &ugatesvc.EchoHandler{}, - }) - - // Client gateways - don't listen. - cl1 := ugatesvc.New(nil, nil, nil) - cl2 := ugatesvc.New(nil, nil, nil) - - con, err := cl1.DialContext(context.Background(), "tcp", "127.0.0.1:14011") - if err != nil { - t.Fatal(err) - } - _, err = test.CheckEcho(con, con) - - con, err = cl2.DialContext(context.Background(), "tcp", "127.0.0.1:14111") - if err != nil { - t.Fatal(err) - } - _, err = test.CheckEcho(con, con) - -} diff --git a/ugated/debug_handlers.go b/ugated/debug_handlers.go new file mode 100644 index 0000000..dd1bd67 --- /dev/null +++ b/ugated/debug_handlers.go @@ -0,0 +1,98 @@ +package ugated + +import ( + "encoding/json" + "log" + "net/http" + "sync" + "time" + + "github.com/costinm/ugate" +) + +// HTTP handlers for admin, debug and testing + + +// Debug handlers - on default mux, on 15000 + +// curl -v http://s6.webinf.info:15000/... +// - /debug/vars +// - /debug/pprof + +type UGateHandlers struct { + m sync.RWMutex + UGate *ugate.UGate +} + +func InitHandlers(ug *ugate.UGate) { + ugh := &UGateHandlers{UGate: ug} + ug.Mux.HandleFunc("/dmesh/tcpa", ugh.HttpTCP) + ug.Mux.HandleFunc("/dmesh/rd", ugh.HttpNodesFilter) + + //ug.H2Transport.HandleFunc("/h2r/", ugh.HandleH2R) + + ug.Mux.HandleFunc("/_dm/", ugh.HandleID) + +} + +func (gw *UGateHandlers) HttpTCP(w http.ResponseWriter, r *http.Request) { + gw.m.RLock() + defer gw.m.RUnlock() + w.Header().Add("content-type", "application/json") + err := json.NewEncoder(w).Encode(gw.UGate.ActiveTcp) + if err != nil { + log.Println("Error encoding ", err) + } +} + +// HttpNodesFilter returns the list of directly connected nodes. +// +// Optional 't' parameter is a timestamp used to filter recently seen nodes. +// Uses NodeByID table. +func (gw *UGateHandlers) HttpNodesFilter(w http.ResponseWriter, r *http.Request) { + gw.m.RLock() + defer gw.m.RUnlock() + r.ParseForm() + w.Header().Add("content-type", "application/json") + t := r.Form.Get("t") + rec := []*ugate.MeshCluster{} + t0 := time.Now() + for _, n := range gw.UGate.Clusters { + if t != "" { + if t0.Sub(n.LastSeen) < 6000*time.Millisecond { + rec = append(rec, n) + } + } else { + rec = append(rec, n) + } + } + + je := json.NewEncoder(w) + je.SetIndent(" ", " ") + je.Encode(rec) + return +} + +func (gw *UGateHandlers) HttpH2R(w http.ResponseWriter, r *http.Request) { + gw.m.RLock() + defer gw.m.RUnlock() + + json.NewEncoder(w).Encode(gw.UGate.ActiveTcp) +} + +// HandleID is the first request in a MUX connection. +// +// If the request is authenticated, we'll track the node. +// For QUIC, mTLS handshake completes after 0RTT requests are received, so JWT is +// needed. +func (gw *UGateHandlers) HandleID(w http.ResponseWriter, r *http.Request) { + f := r.Header.Get("from") + if f == "" { + w.WriteHeader(http.StatusUnauthorized) + return + } + //n := gw.GetOrAddNode(f) + + w.WriteHeader(200) + w.Write([]byte(gw.UGate.Auth.ID)) +} diff --git a/ugated/full_test.go b/ugated/full_test.go new file mode 100644 index 0000000..8f1b30a --- /dev/null +++ b/ugated/full_test.go @@ -0,0 +1,343 @@ +package ugated + +import ( + "context" + "fmt" + "log" + "testing" + + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ugate" + "github.com/costinm/ugate/pkg/echo" + "github.com/costinm/ugate/pkg/test" + mqtt "github.com/mochi-co/mqtt/server" + + "github.com/costinm/meshauth" + "github.com/golang/protobuf/jsonpb" +) + +// This directory has its own go.mod with all the dependencies, so it can run more complete tests. +// + +func TestFull(t *testing.T) { + alice, err := test.NewClientNode(&meshauth.MeshCfg{CertDir: "../testdata/alice"}, + &ugate.MeshSettings{BasePort: 12000}) + if err != nil { + t.Fatal(err) + } + + alice.StartListener(&meshauth.PortListener{ + Address: fmt.Sprintf("0.0.0.0:%d", 14011), + Protocol: "echo", + + //Handler: &ugatesvc.EchoHandler{}, + }) + + mb := meshauth.NewMeshAuth(&meshauth.MeshCfg{ + CertDir: "testdata/bob", + Listeners: map[string]*meshauth.PortListener{ + "echo": &meshauth.PortListener{ + Address: fmt.Sprintf("0.0.0.0:%d", 14111), + Protocol: "echo", + }, + }, + }) + bob := ugate.New(mb, &ugate.MeshSettings{ + BasePort: 14100, + }) + bob.ListenerProto["echo"] = echo.EchoPortHandler + + bob.Start() + + // Client gateways - don't listen. + cl1 := ugate.New(nil, nil) + cl2 := ugate.New(nil, nil) + + t.Run("Direct", func(t *testing.T) { + // Direct connection, no crypto - verify the echo handlers on bob and alice + con, err := cl1.DialContext(context.Background(), "tcp", "127.0.0.1:14011") + if err != nil { + t.Fatal(err) + } + _, err = test.CheckEcho(con, con) + + con, err = cl2.DialContext(context.Background(), "tcp", "127.0.0.1:14111") + if err != nil { + t.Fatal(err) + } + _, err = test.CheckEcho(con, con) + }) + + t.Run("mqtt", func(t *testing.T) { + mqtt.New() + }) + +} + +// Requires a GSA (either via GOOGLE_APPLICATION_CREDENTIALS, gcloud config, metadata) with hub and +// container access. +// Requires a kube config - the default cluster should be in same project. +// +// Will verify kube config loading and queries to hub and gke. +func TestURest(t *testing.T) { + ctx, cf := context.WithCancel(context.Background()) + defer cf() + + // No certificate by default, but the test may be run with different params + aliceCfg := &ugate.MeshSettings{} + + aliceID := meshauth.NewMeshAuth(nil) + + // TODO: test FromEnv with different options + + alice := ugate.New(aliceID, aliceCfg) + + //otel.InitProm(hb) + //otel.OTelEnable(hb) + //otelC := setup.FileExporter(ctx, os.Stderr) + //defer otelC() + + //gcp.InitDefaultTokenSource(ctx, alice) + + // InitOptionalModules credentials and discovery server. + //k8sService, err := k8s.InitK8S(ctx, alice) + //if err != nil { + // t.Fatal(err) + //} + + //t.Run("get-cert", func(t *testing.T) { + // err = urpc.GetCertificate(ctx, aliceID, istiodC) + // if err != nil { + // t.Fatal(err) + // } + //}) + + //t.Run("xdsc-clusters", func(t *testing.T) { + // err = xdsTest(t, ctx, istiodC, alice) + // if err != nil { + // t.Fatal(err) + // } + //}) + + // Test for 'system' streams + //t.Run("xdsc-system", func(t *testing.T) { + // system := ugate.New(nil, nil) + // //gcp.InitDefaultTokenSource(ctx, system) + // + // catokenSystem := k8sService.NewK8STokenSource("istio-ca") + // catokenSystem.Namespace = "istio-system" + // catokenSystem.KSA = "default" + // + // istiodSystem := system.AddCluster(&ugate.MeshCluster{ + // Dest: meshauth.Dest{Addr: istiodC.Addr, SNI: "istiod.istio-system.svc", + // CACertPEM: istiodC.CACertPEM, + // TokenProvider: catokenSystem, + // }, + // ID: "istiod", + // }) + // + // turl := "istio.io/debug" + // systemXDS, err := urpc.DialContext(ctx, "", &urpc.Config{ + // Cluster: istiodSystem, + // HBone: system, + // Meta: map[string]interface{}{ + // "SERVICE_ACCOUNT": "default", + // "NAMESPACE": "istio-system", + // "GENERATOR": "event", + // // istio.io/debug + // }, + // Namespace: "istio-system", + // InitialDiscoveryRequests: []*xds.DiscoveryRequest{ + // {TypeUrl: turl, ResourceNames: []string{"syncz"}}, + // }, + // }) + // if err != nil { + // t.Fatal(err) + // } + // err = systemXDS.Send(&xds.DiscoveryRequest{ + // TypeUrl: turl, + // ResourceNames: []string{"syncz"}, + // }) + // if err != nil { + // t.Fatal(err) + // } + // + // _, err = systemXDS.Wait(turl, 3*time.Second) + // + // if err != nil { + // t.Fatal(err) + // } + // dr := systemXDS.Received[turl] + // log.Println(dr.Resources) + //}) + + // Used for GCP tokens and calls. + //projectNumber := hb.GetEnv("PROJECT_NUMBER", "") + //projectId := alice.GetEnv("PROJECT_ID", "") + + //hb.ProjectId = projectId + + //t.Run("meshca-cert", func(t *testing.T) { + // meshCAID := meshauth.NewMeshAuth(nil) + // + // meshca := alice.AddCluster(&ugate.MeshCluster{ + // Dest: meshauth.Dest{Addr: "meshca.googleapis.com:443", + // TokenSource: "sts"}, + // }) + // err := urpc.GetCertificate(ctx, meshCAID, meshca) + // + // if err != nil { + // t.Fatal(err) + // } + // log.Println("Cert: ", meshCAID.String()) + //}) + + tok1, err := alice.AuthProviders["gsa"](ctx, "https://example.com") + if err != nil { + t.Fatal("Failed to load k8s", err) + } + tok1J := meshauth.DecodeJWT(tok1) + log.Println("Tok:", tok1J) + + //t.Run("watch", func(t *testing.T) { + // req := k8sService.RequestAll(ctx, "istio-system", "configmap", "", nil, + // "1") + // tr, err := k8sService.HttpClient.Do(req) + // + // if err != nil { + // t.Fatal(err) + // } + // if tr.Status != "200" { + // t.Fatal("Response statuds ", tr.Status, tr.Header) + // } + // fr := urpc.NewFromStream(nil) + // for { + // bb, err := fr.Recv4(tr.Body) + // if err != nil { + // t.Fatal(err) + // } + // log.Println(string(bb.Bytes())) + // + // } + //}) + +} + +var marshal = &jsonpb.Marshaler{OrigName: true, Indent: " "} + +//func xdsTest(t *testing.T, ctx context.Context, istiodC *ugate.MeshCluster, ns *ugate.UGateHandlers) error { +// xdsc, err := urpc.DialContext(ctx, "", &urpc.Config{ +// Cluster: istiodC, +// HBone: ns, +// ResponseHandler: func(con *urpc.ADSC, r *xds.DiscoveryResponse) { +// log.Println("DR:", r.TypeUrl, r.VersionInfo, r.Nonce, len(r.Resources)) +// for _, l := range r.Resources { +// b, err := marshal.MarshalToString(l) +// if err != nil { +// log.Printf("Error in LDS: %v", err) +// } +// +// if false { +// log.Println(b) +// } +// } +// }, +// }) +// +// if err != nil { +// t.Fatal(err) +// } +// +// for { +// res := <-xdsc.Updates +// if res == "eds" { +// break +// } +// } +// +// for _, c := range xdsc.Endpoints { +// +// if len(c.Endpoints) > 0 && len(c.Endpoints[0].LbEndpoints) > 0 { +// log.Println(c.ClusterName, c.Endpoints[0].LbEndpoints[0].Host.Address) +// } +// //log.Println(prototext.MarshalOptions{Multiline: true}.Format(&c)) +// } +// +// return err +//} + + +// UGate tests without a CA ( peer to peer ) +func TestNoCA(t *testing.T) { + // xx07 -> BTS port + // xx12 -> plain text echo + // "/dm/" -> POST-based tunnel ( more portable than CONNECT ) + + // Bob connected to Carol + bob := test.NewTestNode(test.BobMeshAuthCfg, &ugate.MeshSettings{ + BasePort: 6100}) + + // Alice connected to Bob + alice := test.NewTestNode(test.AliceMeshAuthCfg, &ugate.MeshSettings{ + BasePort: 600, + Clusters: map[string]*ugate.MeshCluster{ + "bob": { + Dest: meshauth.Dest{Addr: "127.0.0.1:6107"}, + }, + }, + }) + + //http2.DebugGoroutines = true + + // No other config - should start only the Hbone server + bob.Start() + + t.Run("Echo-tcp", func(t *testing.T) { + ab, err := alice.DialContext(context.Background(), "tcp", + fmt.Sprintf("127.0.0.1:%d", 6112)) + if err != nil { + t.Fatal(err) + } + res, err := test.CheckEcho(ab, ab) + if err != nil { + t.Fatal(err) + } + log.Println("Result ", res) + }) + + // TLS Echo server, on 6111 + t.Run("Echo-tls", func(t *testing.T) { + ab, err := alice.DialContext(context.Background(), "tls", + fmt.Sprintf("127.0.0.1:%d", 6111)) + if err != nil { + t.Fatal(err) + } + // TODO: verify the identity, cert, etc + res, err := test.CheckEcho(ab, ab) + if err != nil { + t.Fatal(err) + } + mc := ab.(nio.Stream) + log.Println("Result ", res, mc) + }) + + // This is a H2 (BTS) request that is forwarded to a TCP stream handler. + // Alice -BTS-> Bob -TCP-> Carol + //t.Run("H2-egress", func(t *testing.T) { + // i, o := io.Pipe() + // r, _ := http.NewRequest("POST", "https://127.0.0.1:6107/dm/"+"127.0.0.1:6112", i) + // res, err := alice.RoundTrip(r) + // if err != nil { + // t.Fatal(err) + // } + // + // res1, err := CheckEcho(res.Body, o) + // if err != nil { + // t.Fatal(err) + // } + // + // log.Println(res1, alice, bob) + //}) + +} + diff --git a/ugated/go.mod b/ugated/go.mod index c6f6427..052a84e 100644 --- a/ugated/go.mod +++ b/ugated/go.mod @@ -1,14 +1,17 @@ module github.com/costinm/ugate/ugated -go 1.19 +go 1.21 require github.com/mochi-co/mqtt v1.3.2 replace github.com/costinm/ugate => ../ replace github.com/costinm/ssh-mesh => ../../ssh-mesh +replace github.com/costinm/ugate/pkg/ext/lwip => ../pkg/ext/lwip -replace github.com/costinm/hbone => ../../hbone +replace github.com/costinm/utel => ../../utel + +//require github.com/quic-go/qtls-go1-20 v0.2.2 replace github.com/costinm/meshauth => ../../meshauth @@ -19,62 +22,50 @@ replace github.com/costinm/meshauth => ../../meshauth replace github.com/eycorsican/go-tun2socks => github.com/costinm/go-tun2socks v1.16.12-0.20210328172757-88f6d54235cb require ( - github.com/costinm/hbone v0.0.0-20221011174620-f25926c0b194 - github.com/costinm/meshauth v0.0.0-20221013185453-bb5aae6632f8 - github.com/costinm/ssh-mesh v0.0.0-20221014163420-3421d7ade346 - github.com/costinm/ugate v0.0.0-20221014040536-984a9753d81c - github.com/eycorsican/go-tun2socks v1.16.12-0.20201107203946-301549c435ff - github.com/gorilla/websocket v1.5.0 - github.com/lucas-clemente/quic-go v0.29.2 - github.com/pion/sctp v1.8.3 - github.com/pion/turn/v2 v2.0.8 - github.com/pion/webrtc/v3 v3.1.47 - github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 - golang.org/x/crypto v0.0.0-20221012134737-56aed061732a - gvisor.dev/gvisor v0.0.0-20221019184736-ae7cca128546 + github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 + github.com/costinm/ugate v0.0.0-20221024013023-789def6d5dde + github.com/golang/protobuf v1.5.3 + github.com/gorilla/websocket v1.5.1 + github.com/pion/sctp v1.8.9 + github.com/pion/turn/v2 v2.1.4 + github.com/pion/webrtc/v3 v3.2.24 + golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc + ) require ( - github.com/creack/pty v1.1.18 // indirect - github.com/kr/fs v0.1.0 // indirect - github.com/miekg/dns v1.1.50 // indirect - github.com/pkg/sftp v1.13.5 // indirect - golang.org/x/net v0.1.0 - golang.org/x/sys v0.1.0 // indirect - golang.org/x/text v0.4.0 // indirect + github.com/miekg/dns v1.1.57 // indirect + golang.org/x/net v0.19.0 + golang.org/x/sys v0.16.0 // indirect + golang.org/x/text v0.14.0 // indirect ) require ( - github.com/bazelbuild/rules_go v0.30.0 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect - github.com/golang/mock v1.6.0 // indirect - github.com/google/btree v1.0.1 // indirect - github.com/google/uuid v1.3.0 // indirect - github.com/marten-seemann/qpack v0.2.1 // indirect - github.com/marten-seemann/qtls-go1-18 v0.1.3 // indirect - github.com/marten-seemann/qtls-go1-19 v0.1.1 // indirect - github.com/nxadm/tail v1.4.8 // indirect - github.com/onsi/ginkgo v1.16.5 // indirect - github.com/pion/datachannel v1.5.2 // indirect - github.com/pion/dtls/v2 v2.1.5 // indirect - github.com/pion/ice/v2 v2.2.11 // indirect - github.com/pion/interceptor v0.1.11 // indirect + github.com/costinm/ssh-mesh v0.0.0-20240101190630-66786111a72d // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/pion/datachannel v1.5.5 // indirect + github.com/pion/dtls/v2 v2.2.9 // indirect + github.com/pion/ice/v2 v2.3.11 // indirect + github.com/pion/interceptor v0.1.25 // indirect github.com/pion/logging v0.2.2 // indirect - github.com/pion/mdns v0.0.5 // indirect + github.com/pion/mdns v0.0.9 // indirect github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.10 // indirect - github.com/pion/rtp v1.7.13 // indirect + github.com/pion/rtcp v1.2.13 // indirect + github.com/pion/rtp v1.8.3 // indirect github.com/pion/sdp/v3 v3.0.6 // indirect - github.com/pion/srtp/v2 v2.0.10 // indirect - github.com/pion/stun v0.3.5 // indirect - github.com/pion/transport v0.13.1 // indirect - github.com/pion/udp v0.1.1 // indirect - github.com/rs/xid v1.4.0 // indirect - golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect - golang.org/x/tools v0.1.12 // indirect - google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + github.com/pion/srtp/v2 v2.0.18 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/transport v0.14.1 // indirect + github.com/pion/transport/v2 v2.2.4 // indirect + github.com/pion/udp v0.1.4 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/rs/xid v1.5.0 // indirect + github.com/stretchr/testify v1.8.4 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/tools v0.16.1 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/ugated/go.sum b/ugated/go.sum index 7cf3efc..ea0f700 100644 --- a/ugated/go.sum +++ b/ugated/go.sum @@ -1,19 +1,13 @@ -github.com/bazelbuild/rules_go v0.30.0 h1:kX4jVcstqrsRqKPJSn2mq2o+TI21edRzEJSrEOMQtr0= -github.com/bazelbuild/rules_go v0.30.0/go.mod h1:MC23Dc/wkXEyk3Wpq6lCqz0ZAYOZDw2DR5y3N1q2i7M= -github.com/costinm/go-tun2socks v1.16.12-0.20210328172757-88f6d54235cb h1:45NOoCcMogx06a16wDX7EZXAoy5gOFAfkFVnkqHrlo8= -github.com/costinm/go-tun2socks v1.16.12-0.20210328172757-88f6d54235cb/go.mod h1:wgB2BFT8ZaPKyKOQ/5dljMG/YIow+AIXyq4KBwJ5sGQ= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/costinm/meshauth v0.0.0-20221024010349-600f57eab6c7 h1:K0ddc3Ja5ZEPzfLuKuriN7XO8a0JdzEKFtqEGsTHeyk= +github.com/costinm/meshauth v0.0.0-20221024010349-600f57eab6c7/go.mod h1:EFhtAAQPQu7Io8m/TO5Ck86sr8xfcyb4gYMUug+CKFo= +github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0 h1:o8CM8eNRGDSFS1QrFN8Wb7pSfEFQFtdIk61smVNxTHQ= +github.com/costinm/meshauth v0.0.0-20240105003042-ccb7c7765ee0/go.mod h1:DyjbOGzDaVKYEQhuv4CrS/wZqplESvKaLCvF11hRgPs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= @@ -22,132 +16,179 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lucas-clemente/quic-go v0.29.2 h1:O8Mt0O6LpvEW+wfC40vZdcw0DngwYzoxq5xULZNzSI8= -github.com/lucas-clemente/quic-go v0.29.2/go.mod h1:g6/h9YMmLuU54tL1gW25uIi3VlBp3uv+sBihplIuskE= -github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0OJOGVs= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-18 v0.1.3 h1:R4H2Ks8P6pAtUagjFty2p7BVHn3XiwDAl7TTQf5h7TI= -github.com/marten-seemann/qtls-go1-18 v0.1.3/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= -github.com/marten-seemann/qtls-go1-19 v0.1.1 h1:mnbxeq3oEyQxQXwI4ReCgW9DPoPR94sNlqWoDZnjRIE= -github.com/marten-seemann/qtls-go1-19 v0.1.1/go.mod h1:5HTDWtVudo/WFsHKRNuOhWlbdjrfs5JHrYb0wIJqGpI= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM= +github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk= github.com/mochi-co/mqtt v1.3.2 h1:cRqBjKdL1yCEWkz/eHWtaN/ZSpkMpK66+biZnrLrHC8= github.com/mochi-co/mqtt v1.3.2/go.mod h1:o0lhQFWL8QtR1+8a9JZmbY8FhZ89MF8vGOGHJNFbCB8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/pion/datachannel v1.5.2 h1:piB93s8LGmbECrpO84DnkIVWasRMk3IimbcXkTQLE6E= github.com/pion/datachannel v1.5.2/go.mod h1:FTGQWaHrdCwIJ1rw6xBIfZVkslikjShim5yr05XFuCQ= +github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= +github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= github.com/pion/dtls/v2 v2.1.5 h1:jlh2vtIyUBShchoTDqpCCqiYCyRFJ/lvf/gQ8TALs+c= github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY= +github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= +github.com/pion/dtls/v2 v2.2.9 h1:K+D/aVf9/REahQvqk6G5JavdrD8W1PWDKC11UlwN7ts= +github.com/pion/dtls/v2 v2.2.9/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/ice/v2 v2.2.11 h1:wiAy7TSrVZ4KdyjC0CcNTkwltz9ywetbe4wbHLKUbIg= github.com/pion/ice/v2 v2.2.11/go.mod h1:NqUDUao6SjSs1+4jrqpexDmFlptlVhGxQjcymXLaVvE= +github.com/pion/ice/v2 v2.3.11 h1:rZjVmUwyT55cmN8ySMpL7rsS8KYsJERsrxJLLxpKhdw= +github.com/pion/ice/v2 v2.3.11/go.mod h1:hPcLC3kxMa+JGRzMHqQzjoSj3xtE9F+eoncmXLlCL4E= github.com/pion/interceptor v0.1.11 h1:00U6OlqxA3FFB50HSg25J/8cWi7P6FbSzw4eFn24Bvs= github.com/pion/interceptor v0.1.11/go.mod h1:tbtKjZY14awXd7Bq0mmWvgtHB5MDaRN7HV3OZ/uy7s8= +github.com/pion/interceptor v0.1.25 h1:pwY9r7P6ToQ3+IF0bajN0xmk/fNw/suTgaTdlwTDmhc= +github.com/pion/interceptor v0.1.25/go.mod h1:wkbPYAak5zKsfpVDYMtEfWEy8D4zL+rpxCxPImLOg3Y= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw= github.com/pion/mdns v0.0.5/go.mod h1:UgssrvdD3mxpi8tMxAXbsppL3vJ4Jipw1mTCW+al01g= +github.com/pion/mdns v0.0.8/go.mod h1:hYE72WX8WDveIhg7fmXgMKivD3Puklk0Ymzog0lSyaI= +github.com/pion/mdns v0.0.9 h1:7Ue5KZsqq8EuqStnpPWV33vYYEH0+skdDN5L7EiEsI4= +github.com/pion/mdns v0.0.9/go.mod h1:2JA5exfxwzXiCihmxpTKgFUpiQws2MnipoPK09vecIc= github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.9/go.mod h1:qVPhiCzAm4D/rxb6XzKeyZiQK69yJpbUDJSF7TgrqNo= github.com/pion/rtcp v1.2.10 h1:nkr3uj+8Sp97zyItdN60tE/S6vk4al5CPRR6Gejsdjc= github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I= +github.com/pion/rtcp v1.2.12/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= +github.com/pion/rtcp v1.2.13 h1:+EQijuisKwm/8VBs8nWllr0bIndR7Lf7cZG200mpbNo= +github.com/pion/rtcp v1.2.13/go.mod h1:sn6qjxvnwyAkkPzPULIbVqSKI5Dv54Rv7VG0kNxh9L4= github.com/pion/rtp v1.7.13 h1:qcHwlmtiI50t1XivvoawdCGTP4Uiypzfrsap+bijcoA= github.com/pion/rtp v1.7.13/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= +github.com/pion/rtp v1.8.2/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= +github.com/pion/rtp v1.8.3 h1:VEHxqzSVQxCkKDSHro5/4IUUG1ea+MFdqR2R3xSpNU8= +github.com/pion/rtp v1.8.3/go.mod h1:pBGHaFt/yW7bf1jjWAoUjpSNoDnw98KTMg+jWWvziqU= github.com/pion/sctp v1.8.0/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s= github.com/pion/sctp v1.8.2/go.mod h1:xFe9cLMZ5Vj6eOzpyiKjT9SwGM4KpK/8Jbw5//jc+0s= github.com/pion/sctp v1.8.3 h1:LWcciN2ptLkw9Ugp/Ks2E76fiWy7yk3Wm79D6oFbFNo= github.com/pion/sctp v1.8.3/go.mod h1:OHbDjdk7kg+L+7TJim9q/qGVefdEJohuA2SZyihccgI= +github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= +github.com/pion/sctp v1.8.8/go.mod h1:igF9nZBrjh5AtmKc7U30jXltsFHicFCXSmWA2GWRaWs= +github.com/pion/sctp v1.8.9 h1:TP5ZVxV5J7rz7uZmbyvnUvsn7EJ2x/5q9uhsTtXbI3g= +github.com/pion/sctp v1.8.9/go.mod h1:cMLT45jqw3+jiJCrtHVwfQLnfR0MGZ4rgOJwUOIqLkI= github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw= github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= github.com/pion/srtp/v2 v2.0.10 h1:b8ZvEuI+mrL8hbr/f1YiJFB34UMrOac3R3N1yq2UN0w= github.com/pion/srtp/v2 v2.0.10/go.mod h1:XEeSWaK9PfuMs7zxXyiN252AHPbH12NX5q/CFDWtUuA= +github.com/pion/srtp/v2 v2.0.18 h1:vKpAXfawO9RtTRKZJbG4y0v1b11NZxQnxRl85kGuUlo= +github.com/pion/srtp/v2 v2.0.18/go.mod h1:0KJQjA99A6/a0DOVTu1PhDSw0CXF2jTkqOoMg3ODqdA= github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg= github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= github.com/pion/transport v0.12.3/go.mod h1:OViWW9SP2peE/HbwBvARicmAVnesphkNkCVZIWJ6q9A= github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g= github.com/pion/transport v0.13.1 h1:/UH5yLeQtwm2VZIPjxwnNFxjS4DFhyLfS4GlfuKUzfA= github.com/pion/transport v0.13.1/go.mod h1:EBxbqzyv+ZrmDb82XswEE0BjfQFtuw1Nu6sjnjWCsGg= +github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40= +github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI= +github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= +github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= +github.com/pion/transport/v2 v2.2.2/go.mod h1:OJg3ojoBJopjEeECq2yJdXH9YVrUJ1uQ++NjXLOUorc= +github.com/pion/transport/v2 v2.2.3/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.4 h1:41JJK6DZQYSeVLxILA2+F4ZkKb4Xd/tFJZRFZQ9QAlo= +github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v3 v3.0.1/go.mod h1:UY7kiITrlMv7/IKgd5eTUcaahZx5oUN3l9SzK5f5xE0= github.com/pion/turn/v2 v2.0.8 h1:KEstL92OUN3k5k8qxsXHpr7WWfrdp7iJZHx99ud8muw= github.com/pion/turn/v2 v2.0.8/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw= +github.com/pion/turn/v2 v2.1.3/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= +github.com/pion/turn/v2 v2.1.4 h1:2xn8rduI5W6sCZQkEnIUDAkrBQNl2eYIBCHMZ3QMmP8= +github.com/pion/turn/v2 v2.1.4/go.mod h1:huEpByKKHix2/b9kmTAM3YoX6MKP+/D//0ClgUYR2fY= github.com/pion/udp v0.1.1 h1:8UAPvyqmsxK8oOjloDk4wUt63TzFe9WEJkg5lChlj7o= github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= +github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8= +github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us= github.com/pion/webrtc/v3 v3.1.47 h1:2dFEKRI1rzFvehXDq43hK9OGGyTGJSusUi3j6QKHC5s= github.com/pion/webrtc/v3 v3.1.47/go.mod h1:8U39MYZCLVV4sIBn01htASVNkWQN2zDa/rx5xisEXWs= -github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go= -github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg= +github.com/pion/webrtc/v3 v3.2.24 h1:MiFL5DMo2bDaaIFWr0DDpwiV/L4EGbLZb+xoRvfEo1Y= +github.com/pion/webrtc/v3 v3.2.24/go.mod h1:1CaT2fcZzZ6VZA+O1i9yK2DU4EOcXVvSbWG9pr5jefs= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/songgao/water v0.0.0-20190725173103-fd331bda3f4b/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= -github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8= -github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20221012134737-56aed061732a h1:NmSIgad6KjE6VvHciPZuNRTKxGhlPfD6OA87W/PLkqg= -golang.org/x/crypto v0.0.0-20221012134737-56aed061732a/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= +golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191021144547-ec77196f6094/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201201195509-5d6afe98e0b7/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -155,24 +196,34 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211201190559-0a0e4e1bb54c/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221004154528-8021a29435af/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0 h1:hZ/3BUoy5aId7sCpA/Tc5lt8DkFgdVS2onTpJsZ/fl0= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -185,29 +236,55 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220608164250-635b8c9b7f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -220,19 +297,16 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gvisor.dev/gvisor v0.0.0-20221019184736-ae7cca128546 h1:yADgBr4fY4HiKrkCdckUJ05H9RUuSNeUV6bLEL8W5mY= -gvisor.dev/gvisor v0.0.0-20221019184736-ae7cca128546/go.mod h1:D0iRe6RVONyvN6uEi/rqBtONyitX5GaHMDDbeMzwgiE= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/ugated/pkg/h2r/h2r.go b/ugated/pkg/h2r/h2r.go deleted file mode 100644 index d7f72eb..0000000 --- a/ugated/pkg/h2r/h2r.go +++ /dev/null @@ -1,249 +0,0 @@ -package h2r - -import ( - "context" - "io" - "io/ioutil" - "log" - "net/http" - "sync" - "time" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - "golang.org/x/net/http2" -) - -// Original prototype - dropped due to lack of forward connection. -// Instead, h2r will be used to indicate the other end supports a modified -// H2 stack that simply allows server to originate requests, like Quic and -// WebRTC. For H2 we will us a POST to channel the reverse direction. -// -// H2R implements a transport using reverse HTTP/2, similar with 'ssh -R'. -// In this mode the 'client' A create a connection to the server 'B'. -// - If the ALPN negotiation result is 'h2r', B will initiate a HTTP/2 conn -// with A acting as server. -// - If ALPN negotiation is 'h2', A will initiate a HTTP/2 conn and issue -// a POST with /_h2r/id/[WorkloadID]. The handler for the POST will wrap a reverse -// HTTP/2 connection, with A acting as server. -// - Else a Websocket connection is attempted, to /_h2r/id/[WorkloadID]. A HTTP/2 conn -// from B to A over ws will be started. -// -// In all cases, B will forward requests for hostname WorkloadID to A. -// -// Authentication/Authorization are not included, a separate middleware or -// policy is required to verify A is authorized to reverse forward [WorkloadID]. -// -// Original code: -// end := make(chan int) -// str.ReadCloser = func() { -// end <- 1 -// } -// -// go func() { -// log.Println("H2R-Client: Reverse accept start ", str.RemoteAddr(), str.LocalAddr(), RemoteID(str)) -// ug.H2Handler.h2Server.ServeConn( -// str, -// &http2.ServeConnOpts{ -// Handler: ug.H2Handler, // Also plain text, needs to be upgraded -// Context: str.Context(), -// -// //Context: // can be used to cancel, pass meta. -// // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) -// }) -// log.Println("H2R-Client: Reverse accept closed") -// }() -// go func() { -// <-end -// log.Println("H2R-Client: Read Context done") -// }() - -type H2R struct { - ug *ugatesvc.UGate - - // Transport object for http2 library - h2t *http2.Transport - h2Server *http2.Server - handler http.Handler -} - -func New(ug *ugatesvc.UGate) *H2R { - h2t := &http2.Transport{ - ReadIdleTimeout: 10000 * time.Second, - StrictMaxConcurrentStreams: false, - AllowHTTP: true, - } - h2r := &H2R{ug: ug, handler: ug.H2Handler, h2t: h2t, h2Server: &http2.Server{}} - ug.Mux.HandleFunc("/h2r/", h2r.HandleH2R) - ug.MuxDialers["h2r"] = h2r - return h2r -} - -// H2RMux is a mux using H2 frames. -// Based on ALPN, may use raw frames. -type H2RMux struct { - *http2.ClientConn - - tlsStr *nio.Stream - dm *ugate.Cluster - - // Raw frame support - m sync.RWMutex - framer *http2.Framer - streams map[uint32]*H2Stream - handleStream func(*H2Stream) - nextStreamID uint32 -} - -// dialH2ClientConn creates one connection to a mesh node, using one of the -// supported multiplex protocols. -func (t *H2R) DialMux(ctx context.Context, dm *ugate.Cluster, meta http.Header, ev func(t string, stream *nio.Stream)) (ugate.Muxer, error) { - // TODO: try all published addresses, including all protos - addr := dm.Addr - - str, err := t.ug.DialTLS(ctx, addr, []string{"h2r", "h2"}) - if err != nil { - log.Println("Failed to connect ", addr, err) - return nil, err - } - - // Callback when the stream is closed, notify end. - str.ReadCloser = func() { - log.Println("H2R-Upstream closed") - } - - proto := str.TLS.NegotiatedProtocol - if proto == "h2r" { - // Future extension, no need for the reverse. - } - // - - // Forward connection to the node. - cc, err := t.h2t.NewClientConn(str) - if err != nil { - log.Println("Failed to initiate h2 conn") - return nil, err - } - - // TODO: use MASQUE to detect support ? - - // Initial message on the connection is to setup the reverse pipe. - // This in turn will call this node, to validate the connection. - r, w := io.Pipe() // pipe.New() - postR, _ := http.NewRequest("POST", - "https://"+addr+"/h2r/", r) - tok := t.ug.Auth.VAPIDToken(addr) - postR.Header.Add("authorization", tok) - - res, err := cc.RoundTrip(postR) - if err != nil { - return nil, err - } - - str = nio.NewStreamRequestOut(postR, w, res, nil) - - log.Println("H2R-Client: POST Reverse accept start ", - str.RemoteAddr(), str.LocalAddr(), ugatesvc.RemoteID(str)) - - go func() { - t.h2Server.ServeConn( - str, - &http2.ServeConnOpts{ - Handler: t.handler, // Also plain text, needs to be upgraded - Context: str.Context(), - - //Context: // can be used to cancel, pass meta. - // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) - }) - log.Println("H2R-Client: Reverse accept closed") - dm.Muxer = nil - t.ug.OnMuxClose(dm) - }() - - h2rm := &H2RMux{dm: dm, tlsStr: str, ClientConn: cc, - // Used for raw streams, in both directions - framer: http2.NewFramer(str, str), - streams: map[uint32]*H2Stream{}, - nextStreamID: 3, - } - dm.Muxer = h2rm - - return h2rm, nil -} - -// HandleH2R takes a POST "/h2r/" request and set the stream as a H2 client connection. -// -// It will start by sending a test "id" request, and associate the muxed connection to the -// node. -// -// Blocks until str.Close(). -func (t *H2R) HandleH2R(w http.ResponseWriter, r *http.Request) { - // This is the H2 in reverse - start a TLS client conn, and keep track of it - // for forwarding to the dest. - str := nio.NewStreamRequest(r, w, nil) - str.TLS = r.TLS // TODO: also get the WorkloadID from JWT - - end := make(chan int) - - // Callback when the stream is closed, notify end. - str.ReadCloser = func() { - end <- 1 - } - - cc, err := t.h2t.NewClientConn(str) - if err != nil { - return - } - - k := ugatesvc.RemoteID(str) // mesh WorkloadID based on client cert. - - n := t.ug.GetOrAddNode(k) - - n.Muxer = cc - - ra := str.RemoteAddr() - // TODO: remember the IP, use it for the node ? Explicit registration may be better. - - // TODO: use new URL - r0, _ := http.NewRequest("GET", "http://localhost/_dm/id/U/"+t.ug.Auth.ID, nil) - tok := t.ug.Auth.VAPIDToken(n.ID) - r0.Header.Add("authorization", tok) - res0, err := cc.RoundTrip(r0) - if err != nil { - log.Println("Reverse accept id err ", err, ra, k) - return - } - upData, _ := ioutil.ReadAll(res0.Body) - res0.Body.Close() - - log.Println(str.StreamId, "H2R start on ", t.ug.Auth.ID, "for", n.ID, k, ra, " -> ", string(upData)) - - //go func() { - // for { - // time.Sleep(20 * time.Second) - // r0, _ := http.NewRequest("GET", "http://localhost/_dm/id/H2RS", nil) - // _, err := cc.RoundTrip(r0) - // if err != nil { - // log.Println("Reverse accept id ", err, ra, k) - // return - // } - // //err := cc.Ping(context.Background()) - // //if err != nil { - // // log.Println("Ping err") - // //} - // } - // - //}() - - //t.ug.RegisterEndpoint(n.WorkloadID) - - // Wait until t.MarkDead is called - or the con is closed - <-end - - // TODO: - //t.ug.UnRegisterEndpoint(n.WorkloadID) - - n.Muxer = nil - return -} diff --git a/ugated/pkg/h2r/h2raw.go b/ugated/pkg/h2r/h2raw.go deleted file mode 100644 index b107678..0000000 --- a/ugated/pkg/h2r/h2raw.go +++ /dev/null @@ -1,212 +0,0 @@ -package h2r - -import ( - "bytes" - "context" - "log" - "net/http" - "strings" - - "github.com/costinm/hbone/nio" - "golang.org/x/net/http2" - "golang.org/x/net/http2/hpack" -) - -// WIP: Low-level H2 - to allow reverse streams and more efficient proxy. -// Based on x/net/http2/transport.go - but with push support -// See h2i, spdystream, etc -// Uses 'spdy' ALPN on TLS, can be used over existing streams to multiplex. -// -// For better stability: -// - use the golang H2 implementation by default, over TLS or websocket (until this file is very stable) -// - client create a POST stream for accepted connections, over H2 -// - - -// NewStream opens a H2 stream. No H2 header (empty) - this matches QUIC streams -func (c *H2RMux) NewStream(ctx context.Context, req *http.Request) (*H2Stream, error) { - c.m.Lock() - id := c.nextStreamID - c.nextStreamID += 2 - c.m.Unlock() - - s := c.stream(id) - - host := req.Host - if host == "" { - host = req.URL.Host - } - - path := req.RequestURI - if path == "" { - path = "/" - } - - // TODO: support for 'PUSH' frames for webpush. - s.henc.WriteField(hpack.HeaderField{Name: ":authority", Value: host}) - s.henc.WriteField(hpack.HeaderField{Name: ":method", Value: req.Method}) - s.henc.WriteField(hpack.HeaderField{Name: ":path", Value: path}) - s.henc.WriteField(hpack.HeaderField{Name: ":scheme", Value: "https"}) - - s.hbuf.Reset() - for k, vv := range req.Header { - lowKey := strings.ToLower(k) - if lowKey == "host" { - continue - } - for _, v := range vv { - s.henc.WriteField(hpack.HeaderField{Name: lowKey, Value: v}) - } - } - err := c.framer.WriteHeaders(http2.HeadersFrameParam{ - StreamID: id, - EndHeaders: true, - BlockFragment: s.hbuf.Bytes(), - }) - - return s, err -} - -func (h2c *H2RMux) serve() error { - // TODO: Settings handshake - - var str *H2Stream - for { - f, err := h2c.framer.ReadFrame() - if err != nil { - return err - } - log.Println("H2 F: ", f.Header().Type) - - switch f := f.(type) { - case *http2.SettingsFrame: - // Sender acknoweldged the SETTINGS frame. No need to write - // SETTINGS again. - if f.IsAck() { - break - } - if err := h2c.framer.WriteSettingsAck(); err != nil { - return nil - } - - case *http2.PingFrame: - - case *http2.PushPromiseFrame: - - case *http2.GoAwayFrame: // not used for server, usually servers send GO_AWAY. - - case *http2.WindowUpdateFrame: - str = h2c.stream(f.StreamID) - - case *http2.DataFrame: - str = h2c.stream(f.StreamID) - // TODO: flow control, see h2 - if f.Length > 0 { - h2c.framer.WriteWindowUpdate(f.StreamID, f.Length) - h2c.framer.WriteWindowUpdate(0, f.Length) - } - if str == nil { - // TODO: RST - continue - } - str.dataChan <- f - - case *http2.RSTStreamFrame: - str = h2c.stream(f.StreamID) - - case *http2.ContinuationFrame: - str = h2c.stream(f.StreamID) - if _, err := str.hdec.Write(f.HeaderBlockFragment()); err != nil { - return nil - } - if f.FrameHeader.Flags&http2.FlagHeadersEndHeaders != 0 { - h2c.handleStream(str) - } - - case *http2.HeadersFrame: - str := h2c.stream(f.StreamID) - if str == nil { - str = h2c.addStream(f.StreamID, f) - } - if _, err := str.hdec.Write(f.HeaderBlockFragment()); err != nil { - return nil - } - if f.FrameHeader.Flags&http2.FlagHeadersEndHeaders != 0 { - h2c.handleStream(str) - } - } - } -} - -func (h2s *H2RMux) closeStream(id uint32) { - h2s.m.Lock() - delete(h2s.streams, id) - h2s.m.Unlock() -} - -func (h2s *H2RMux) addStream(id uint32, f *http2.HeadersFrame) *H2Stream { - h2s.m.Lock() - // TODO: reuse - bb := &bytes.Buffer{} - ss := &H2Stream{ - s: h2s, - hbuf: bb, - henc: hpack.NewEncoder(bb), - hdec: hpack.NewDecoder(uint32(4<<10), func(hf hpack.HeaderField) { - log.Println("Header: ", hf.Name, hf.Value) - }), - } - h2s.streams[id] = ss - h2s.m.Unlock() - - return ss - -} - -func (h2s *H2RMux) stream(id uint32) *H2Stream { - h2s.m.RLock() - if ss, f := h2s.streams[id]; f { - h2s.m.RUnlock() - return ss - } - h2s.m.RUnlock() - return nil -} - -// H2Stream is a multiplexed stream. -type H2Stream struct { - meta *nio.Stream - - id *uint32 - s *H2RMux - - hbuf *bytes.Buffer // HPACK encoder writes into this - hdec *hpack.Decoder - henc *hpack.Encoder - - dataChan chan *http2.DataFrame - // Callback style - if set dataChan and Read will not be used. Not blocking - DataHandlerNB func(*http2.DataFrame) error - - readClosed bool - unread []byte -} - -func (str *H2Stream) Close() error { - return nil -} - -func (str *H2Stream) Write(p []byte) (n int, err error) { - panic("implement me") -} - -func (str *H2Stream) Read(p []byte) (n int, err error) { - if len(str.unread) > 0 { - - } - f := <-str.dataChan - if f.StreamEnded() { - - } - - panic("implement me") -} diff --git a/ugated/pkg/ipfs/cmd/testdata/s1/info.md b/ugated/pkg/ipfs/cmd/testdata/s1/info.md deleted file mode 100644 index e291d2d..0000000 --- a/ugated/pkg/ipfs/cmd/testdata/s1/info.md +++ /dev/null @@ -1,14 +0,0 @@ -IPFS ID: QmcGCepxB4ymJLkWjbaAMRUW6UXjW1KZAu8oBNh3DtfpNS -IPFS CID: bafzbeigo37kn4faud7pazgd6pphlu64pifk6vti7gclc4jj4hdxjigphs4 -[/ip6/2601:647:6100:449c:4ce5:460a:460:92ce/tcp/16100 -/ip6/::1/tcp/16100 -/ip4/10.1.10.228/tcp/16100 -/ip4/127.0.0.1/tcp/16100] - - -# s2 - -2021/03/03 20:24:03 IPFS ID: QmNZpRjHnEGkuHQezWHk4C7XGPfZxF1Kss3nV5JJMkwwVC -2021/03/03 20:24:03 IPFS Addr: [/ip6/2601:647:6100:449c:4ce5:460a:460:92ce/tcp/15100 /ip6/::1/tcp/15100 /ip4/10.1.10.228/tcp/15100 /ip4/127.0.0.1/tcp/15100] -2021/03/03 20:24:03 IPFS CID: bafzbeiadl6e43axbad4hegxivdsg6viv5hn6zopa77eonetyuc5bc4mplm - diff --git a/ugated/pkg/ipfs/cmd/testdata/s1/kube.json b/ugated/pkg/ipfs/cmd/testdata/s1/kube.json deleted file mode 100755 index 878e507..0000000 --- a/ugated/pkg/ipfs/cmd/testdata/s1/kube.json +++ /dev/null @@ -1 +0,0 @@ -{"apiVersion":"v1","kind":"Config","clusters":[],"users":[{"name":"default","user":{"client-certificate-data":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrakNDQVRpZ0F3SUJBZ0lSQUpLenpKQnVob1kwRGhVYXFWdms3TTh3Q2dZSUtvWkl6ajBFQXdJd0h6RUoKTUFjR0ExVUVDaE1BTVJJd0VBWURWUVFERXdsamIzTjBhVzR4Tmk0d0hoY05NakV3TXpBME1ESXlNVEU0V2hjTgpNakl3TXpBME1ESXlNVEU0V2pBZk1Ra3dCd1lEVlFRS0V3QXhFakFRQmdOVkJBTVRDV052YzNScGJqRTJMakJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZUTGZSWDhMSU56bFpRSHZPcytyNUJ2dGQ4U0cxQ0UKMWhuR3NpTll1KzV0dWZLTmVkMFFpVkZCeTFrbWVsN0VubzVuYUs3WktZWmZsMWsyaXk1aE9SMmpWVEJUTUE0RwpBMVVkRHdFQi93UUVBd0lGb0RBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFRWUlLd1lCQlFVSEF3SXdEQVlEClZSMFRBUUgvQkFJd0FEQVVCZ05WSFJFRURUQUxnZ2xqYjNOMGFXNHhOaTR3Q2dZSUtvWkl6ajBFQXdJRFNBQXcKUlFJaEFJampKVi8zeVMyL1NrdkYzSndWQU9NazZRU3ZlYnpLQTY1ZGpkY3lGQWVKQWlBKzRYMmRoMUhVd05aMgpiQWZISGhVbVdEOW5nR2UrM3VMRDlUMVhCOG5qeXc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==","client-key-data":"LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JR0hBZ0VBTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEJHMHdhd0lCQVFRZzJMdDV1a25ZNnk0VTg2UXcKMGNwSGpXUkNhQmtTeTZqbytnajcrQW81TWJLaFJBTkNBQVJVeTMwVi9DeURjNVdVQjd6clBxK1FiN1hmRWh0UQpoTllaeHJJaldMdnViYm55alhuZEVJbFJRY3RaSm5wZXhKNk9aMml1MlNtR1g1ZFpOb3N1WVRrZAotLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCg=="}}],"contexts":[{"name":"default","context":{"cluster":"default","user":"default"}}],"current-context":"default"} \ No newline at end of file diff --git a/ugated/pkg/ipfs/cmd/ugateipfs.go b/ugated/pkg/ipfs/cmd/ugateipfs.go deleted file mode 100644 index d690895..0000000 --- a/ugated/pkg/ipfs/cmd/ugateipfs.go +++ /dev/null @@ -1,34 +0,0 @@ -package main - -import ( - "net" - - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/msgs" - ug "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/wpgate/ipfs" -) - -// RoundTripStart a uGate + IPFS -// Env: -// IPFS_ROOT - connect to this IPFS upstream server. If unset, use bootstrap peers -// DHT - if empty, will use a DHT. Else - in memory Peerstore -func main() { - // Load configs from the current dir and var/lib/dmesh, or env variables - // Writes to current dir. - config := ug.NewConf("./", "./var/lib/dmesh") - - // RoundTripStart a Gate. Basic H2 and H2R services enabled. - ug := ug.NewGate(&net.Dialer{}, nil, &ugate.MeshSettings{ - BasePort: 16000, - }, config) - - msgs.DefaultMux.Auth = ug.Auth - - // RoundTripStart a basic ipfs libp2p service. - ipfsg := ipfs.InitIPFS(ug.Auth, ug.Config.BasePort+100, ug.Mux) - - ug.Mux.Handle("/ipfs/", ipfsg) - - select {} -} diff --git a/ugated/pkg/ipfs/common.go b/ugated/pkg/ipfs/common.go deleted file mode 100644 index 2081771..0000000 --- a/ugated/pkg/ipfs/common.go +++ /dev/null @@ -1,234 +0,0 @@ -package ipfs - -import ( - "context" - "crypto/ed25519" - "fmt" - "log" - "net/http" - "time" - - proto "github.com/gogo/protobuf/proto" - "github.com/ipfs/go-cid" - "github.com/ipfs/go-ipns" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/multiformats/go-multiaddr" - - "github.com/libp2p/go-libp2p-core/control" - "github.com/libp2p/go-libp2p-core/event" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - mh "github.com/multiformats/go-multihash" -) - -/* -DHT notes - -- created as side effect of libp2p.New, via p2pRouting(Host) callback -- implements PeerRouting -- takes a datastore.NewMapDatastore() as param -- - - - -*/ - -// ConnectionGater implementation -// WIP - will implement a policy to allow/deny based on RBAC - -func (p2p *IPFS) InterceptPeerDial(p peer.ID) (allow bool) { - //log.Println("IPFS: peerDial", p) - peerDialCnt++ - return true -} - -var dialCnt = 0 -var peerDialCnt = 0 - -func (p2p *IPFS) InterceptAddrDial(id peer.ID, m multiaddr.Multiaddr) (allow bool) { - dialCnt++ - //log.Println("IPFS: addrDial", id, m) - return true -} - -func (p2p *IPFS) InterceptAccept(multiaddrs network.ConnMultiaddrs) (allow bool) { - t, _ := multiaddrs.RemoteMultiaddr().MarshalText() - t1, _ := multiaddrs.LocalMultiaddr().MarshalText() - log.Println("IPFS: accept", string(t), string(t1)) - return true -} - -func (p2p *IPFS) InterceptSecured(direction network.Direction, id peer.ID, multiaddrs network.ConnMultiaddrs) (allow bool) { - t, _ := multiaddrs.RemoteMultiaddr().MarshalText() - log.Println("IPFS: secured", direction, id, string(t), dialCnt, peerDialCnt) - return true -} - -func (p2p *IPFS) InterceptUpgraded(conn network.Conn) (allow bool, reason control.DisconnectReason) { - t, _ := conn.RemoteMultiaddr().MarshalText() - rmt, _ := conn.RemoteMultiaddr().MarshalText() - log.Println("IPFS: upgraded", conn.RemotePeer(), string(t), - string(rmt), conn.ID()) - return true, 0 -} - -// Track events in the P2P implementation -func (p2p *IPFS) InitEvent() { - h := p2p.Host - log.Println(h.EventBus().GetAllEventTypes()) - sub, err := h.EventBus().Subscribe(event.WildcardSubscription) - if err != nil { - log.Println(err) - } - go func() { - defer sub.Close() - for e := range sub.Out() { - switch v := e.(type) { - case peer.ID: - log.Println("IPFS Peer ", v) - case event.EvtLocalAddressesUpdated: - log.Println("IPFS local ", v) - case event.EvtLocalReachabilityChanged: - log.Println("IPFS reach ", v) - case event.EvtPeerProtocolsUpdated: - log.Println("IPFS PeerProto ", v, v.Added, v.Removed) - case event.EvtPeerIdentificationCompleted: - //log.Println("IPFS Peer ", v) - default: - log.Printf("IPFS Event: %T %v\n", e, e) - } - } - - }() - - log.Println("IPFS WorkloadID: ", h.ID().String()) - log.Println("IPFS Addr: ", h.Addrs()) - log.Println("IPFS CID: ", peer.ToCid(h.ID()).String()) - - //_, ch,routing.RegisterForQueryEvents(context.Background()) -} - -func P2PAddrFromString(c string) (*peer.AddrInfo, error) { - ma, err := multiaddr.NewMultiaddr(c) - if err != nil { - fmt.Printf("Error %v", err) - return nil, err - } - //"/ip4/149.28.196.14/tcp/4001/p2p/12D3KooWLePVbQbv3PqsDZt6obMcWa99YyqRWjeiCtStSydQ6zjH" - pi, err := peer.AddrInfoFromP2pAddr(ma) - if err != nil { - fmt.Printf("Error %v", err) - return nil, err - } - return pi, nil -} - -// StartListener a signed proto, key is the public key. -// 'IPNS' - typically the value is an ipfs address, but can be anything. -func (p2p *IPFS) Put(key ed25519.PrivateKey, v []byte, seq uint64, exp time.Duration) (string, error) { - sk, _ := crypto.UnmarshalEd25519PrivateKey(key) - - rec, err := ipns.Create(sk, v, seq, time.Now().Add(exp)) - //ipns.EmbedPublicKey(sk.GetPublic(), rec) - id, err := peer.IDFromPublicKey(sk.GetPublic()) - data, err := proto.Marshal(rec) - - // Store ipns entry at "/ipns/"+h(pubkey) - err = p2p.DHT.PutValue(context.Background(), ipns.RecordKey(id), data) - - log.Println("Published ", id, err) - - // B58 - return id.String(), nil -} - -func nsToCid(ns string) (cid.Cid, error) { - h, err := mh.Sum([]byte(ns), mh.SHA2_256, -1) - if err != nil { - return cid.Undef, err - } - - return cid.NewCidV1(cid.Raw, h), nil -} - -// Announce this node is a provider for the key. -// Normally used for IPFS, key is the sha of the content. Also -// used for advertise, in Discovery and autorelay.go (/libp2p/relay) -// According to routing.go, 24h is the normal validity, recommended 6hours refresh. -func (p2p *IPFS) Provide(ns string) error { - // Alternative - v, _ := nsToCid(ns) - return p2p.Routing.Provide(context.Background(), v, true) - //return p2p.DHT.WAN.Provide(context.Background(), v, true) -} - -func (p2p *IPFS) Find(ns string) { - v, _ := nsToCid(ns) - rc := p2p.Routing.FindProvidersAsync(context.Background(), v, 10) - - for r := range rc { - log.Println("Got ", r) - } -} - -// IPFS debug/control function -func (p2p *IPFS) ServeHTTP(w http.ResponseWriter, r *http.Request) { - r.ParseForm() - - q := r.Form.Get("q") - if q != "" { - // Get the peer.WorkloadID - pi, err := peer.Decode(q) - if err != nil { - w.Write([]byte(err.Error())) - return - } - if p2p.DHT != nil { - ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) - pchan, err := p2p.DHT.GetClosestPeers(ctx, string(pi)) - for x := range pchan { - log.Println(x) - } - - // Sends FIND_NODE - data, err := p2p.DHT.FindPeer(context.Background(), pi) - - // GetValue accepts /ipns/PEER and /pk/PEER - //pkkey := routing.KeyForPublicKey(pi) - //data, err := p2p.DHT.GetValue(context.Background(), pkkey, dht.Quorum(1)) - if err != nil { - w.Write([]byte(err.Error())) - } else { - fmt.Fprintf(w, "%v", data) - } - } else { - po := p2p.Host.Peerstore().Addrs(pi) - log.Println(po) - } - return - } - h := p2p.Host - - c := r.Form.Get("c") - if q != "" { - //"/ip4/149.28.196.14/tcp/4001/p2p/12D3KooWLePVbQbv3PqsDZt6obMcWa99YyqRWjeiCtStSydQ6zjH" - pi, err := P2PAddrFromString(c) - if err != nil { - return - } - err = h.Connect(context.Background(), *pi) - if err != nil { - fmt.Printf("Error %v", err) - return - } - return - } - - log.Println("Peers: ", h.Peerstore().Peers()) - for _, p := range h.Peerstore().Peers() { - log.Println(h.Peerstore().PeerInfo(p)) - } - - log.Println("Conns: ", h.Network().Conns()) - p2p.DHT.Provide(context.Background(), peer.ToCid(p2p.Host.ID()), true) -} diff --git a/ugated/pkg/ipfs/go.mod b/ugated/pkg/ipfs/go.mod deleted file mode 100644 index 2436473..0000000 --- a/ugated/pkg/ipfs/go.mod +++ /dev/null @@ -1,46 +0,0 @@ -module github.com/costinm/ugate/ext/ipfs - -go 1.15 - -replace github.com/costinm/ugate => ./../../.. -replace github.com/costinm/ugate/ugated => ./../.. - -//replace github.com/libp2p/go-libp2p-webrtc-direct => ../../go-libp2p-webrtc-direct - -require ( - github.com/costinm/ugate v0.0.0-20210221155556-10edd21fadbf - github.com/gogo/protobuf v1.3.1 - github.com/ipfs/go-bitswap v0.3.3 - github.com/ipfs/go-blockservice v0.1.4 - github.com/ipfs/go-cid v0.0.7 - github.com/ipfs/go-datastore v0.4.5 - github.com/ipfs/go-ipfs-blockstore v1.0.3 - github.com/ipfs/go-ipfs-chunker v0.0.5 - github.com/ipfs/go-ipfs-config v0.12.0 - github.com/ipfs/go-ipfs-provider v0.4.3 - github.com/ipfs/go-ipld-cbor v0.0.5 - github.com/ipfs/go-ipld-format v0.2.0 - github.com/ipfs/go-ipns v0.0.2 - github.com/ipfs/go-log v1.0.4 - github.com/ipfs/go-merkledag v0.3.2 - github.com/ipfs/go-unixfs v0.2.4 - github.com/karalabe/xgo v0.0.0-20191115072854-c5ccff8648a7 // indirect - github.com/libp2p/go-libp2p v0.13.0 - github.com/libp2p/go-libp2p-blankhost v0.2.0 - github.com/libp2p/go-libp2p-connmgr v0.2.4 - github.com/libp2p/go-libp2p-core v0.8.0 - github.com/libp2p/go-libp2p-kad-dht v0.11.1 - github.com/libp2p/go-libp2p-mplex v0.4.1 - github.com/libp2p/go-libp2p-peerstore v0.2.6 - github.com/libp2p/go-libp2p-quic-transport v0.10.0 - github.com/libp2p/go-libp2p-record v0.1.3 - github.com/libp2p/go-libp2p-secio v0.2.2 - github.com/libp2p/go-libp2p-swarm v0.4.0 - github.com/libp2p/go-libp2p-tls v0.1.3 - github.com/libp2p/go-libp2p-webrtc-direct v0.0.0-20201219114432-56b02029fbb8 - github.com/libp2p/go-ws-transport v0.4.0 - github.com/multiformats/go-multiaddr v0.3.1 - github.com/multiformats/go-multihash v0.0.14 - github.com/pion/webrtc/v2 v2.2.26 - -) diff --git a/ugated/pkg/ipfs/go.sum b/ugated/pkg/ipfs/go.sum deleted file mode 100644 index 4f610ae..0000000 --- a/ugated/pkg/ipfs/go.sum +++ /dev/null @@ -1,1083 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Stebalien/go-bitfield v0.0.1 h1:X3kbSSPUaJK60wV2hjOPZwmpljr6VGCqdq4cBLhbQBo= -github.com/Stebalien/go-bitfield v0.0.1/go.mod h1:GNjFpasyUVkHMsfEOk8EFLJ9syQ6SI+XWrX9Wf2XH0s= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/benbjohnson/clock v1.0.2 h1:Z0CN0Yb4ig9sGPXkvAQcGJfnrrMQ5QYLCMPRi9iD7YE= -github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.0.0-20190605094302-a0d1e3e36d50/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.2.1-0.20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg= -github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE= -github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0= -github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= -github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= -github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5/go.mod h1:JpoxHjuQauoxiFMl1ie8Xc/7TfLuMZ5eOCONd1sUBHg= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 h1:u/UEqS66A5ckRmS4yNpjmVH56sVtS/RfclBAYocb4as= -github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9 h1:uHTyIjqVhYRhLbJ8nIiOJHkEZZ+5YoOsAbD3sk82NiE= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.18 h1:lum7VRA9kdlvBi7/v2p7/zcbkduHaCH/SVVyurs7OpY= -github.com/google/gopacket v1.1.18/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= -github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/bbloom v0.0.1/go.mod h1:oqo8CVWsJFMOZqTglBG4wydCE4IQA/G2/SEofB0rjUI= -github.com/ipfs/bbloom v0.0.4 h1:Gi+8EGJ2y5qiD5FbsbpX/TMNcJw8gSqr7eyjHa4Fhvs= -github.com/ipfs/bbloom v0.0.4/go.mod h1:cS9YprKXpoZ9lT0n/Mw/a6/aFV6DTjTLYHeA+gyqMG0= -github.com/ipfs/go-bitswap v0.0.9/go.mod h1:kAPf5qgn2W2DrgAcscZ3HrM9qh4pH+X8Fkk3UPrwvis= -github.com/ipfs/go-bitswap v0.1.0/go.mod h1:FFJEf18E9izuCqUtHxbWEvq+reg7o4CW5wSAE1wsxj0= -github.com/ipfs/go-bitswap v0.1.2/go.mod h1:qxSWS4NXGs7jQ6zQvoPY3+NmOfHHG47mhkiLzBpJQIs= -github.com/ipfs/go-bitswap v0.1.3/go.mod h1:YEQlFy0kkxops5Vy+OxWdRSEZIoS7I7KDIwoa5Chkps= -github.com/ipfs/go-bitswap v0.1.8/go.mod h1:TOWoxllhccevbWFUR2N7B1MTSVVge1s6XSMiCSA4MzM= -github.com/ipfs/go-bitswap v0.3.3 h1:CrTO3OiOYFBcdliw074/C7T2QYHEOsPClgvR6RIYcO4= -github.com/ipfs/go-bitswap v0.3.3/go.mod h1:AyWWfN3moBzQX0banEtfKOfbXb3ZeoOeXnZGNPV9S6w= -github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= -github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= -github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= -github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So= -github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= -github.com/ipfs/go-blockservice v0.1.2/go.mod h1:t+411r7psEUhLueM8C7aPA7cxCclv4O3VsUVxt9kz2I= -github.com/ipfs/go-blockservice v0.1.4 h1:Vq+MlsH8000KbbUciRyYMEw/NNP8UAGmcqKi4uWmFGA= -github.com/ipfs/go-blockservice v0.1.4/go.mod h1:OTZhFpkgY48kNzbgyvcexW9cHrpjBYIjSR0KoDOFOLU= -github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cidutil v0.0.2 h1:CNOboQf1t7Qp0nuNh8QMmhJs0+Q//bRL1axtCnIB1Yo= -github.com/ipfs/go-cidutil v0.0.2/go.mod h1:ewllrvrxG6AMYStla3GD7Cqn+XYSLqjK0vc+086tB6s= -github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.0.5/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= -github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= -github.com/ipfs/go-datastore v0.3.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= -github.com/ipfs/go-datastore v0.4.0/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.2/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.5 h1:cwOUcGMLdLPWgu3SlrCckCMznaGADbPqE0r8h768/Dg= -github.com/ipfs/go-datastore v0.4.5/go.mod h1:eXTcaaiN6uOlVCLS9GjJUJtlvJfM3xk23w3fyfrmmJs= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= -github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= -github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= -github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE= -github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= -github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= -github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= -github.com/ipfs/go-ds-leveldb v0.4.1/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= -github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= -github.com/ipfs/go-ipfs-blockstore v0.1.4/go.mod h1:Jxm3XMVjh6R17WvxFEiyKBLUGr86HgIYJW/D/MwqeYQ= -github.com/ipfs/go-ipfs-blockstore v1.0.3 h1:RDhK6fdg5YsonkpMuMpdvk/pRtOQlrIRIybuQfkvB2M= -github.com/ipfs/go-ipfs-blockstore v1.0.3/go.mod h1:MGNZlHNEnR4KGgPHM3/k8lBySIOK2Ve+0KjZubKlaOE= -github.com/ipfs/go-ipfs-blocksutil v0.0.1 h1:Eh/H4pc1hsvhzsQoMEP3Bke/aW5P5rVM1IWFJMcGIPQ= -github.com/ipfs/go-ipfs-blocksutil v0.0.1/go.mod h1:Yq4M86uIOmxmGPUHv/uI7uKqZNtLb449gwKqXjIsnRk= -github.com/ipfs/go-ipfs-chunker v0.0.1/go.mod h1:tWewYK0we3+rMbOh7pPFGDyypCtvGcBFymgY4rSDLAw= -github.com/ipfs/go-ipfs-chunker v0.0.5 h1:ojCf7HV/m+uS2vhUGWcogIIxiO5ubl5O57Q7NapWLY8= -github.com/ipfs/go-ipfs-chunker v0.0.5/go.mod h1:jhgdF8vxRHycr00k13FM8Y0E+6BoalYeobXmUyTreP8= -github.com/ipfs/go-ipfs-config v0.12.0 h1:wxqN3ohBlis1EkhkzIKuF+XLx4YNn9rNpiSOYw3DFZc= -github.com/ipfs/go-ipfs-config v0.12.0/go.mod h1:Ei/FLgHGTdPyqCPK0oPCwGTe8VSnsjJjx7HZqUb6Ry0= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-delay v0.0.1 h1:r/UXYyRcddO6thwOnhiznIAiSvxMECGgtv35Xs1IeRQ= -github.com/ipfs/go-ipfs-delay v0.0.1/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-ds-help v0.0.1/go.mod h1:gtP9xRaZXqIQRh1HRpp595KbBEdgqWFxefeVKOV8sxo= -github.com/ipfs/go-ipfs-ds-help v0.1.1/go.mod h1:SbBafGJuGsPI/QL3j9Fc5YPLeAu+SzOkI0gFwAg+mOs= -github.com/ipfs/go-ipfs-ds-help v1.0.0 h1:bEQ8hMGs80h0sR8O4tfDgV6B01aaF9qeTrujrTLYV3g= -github.com/ipfs/go-ipfs-ds-help v1.0.0/go.mod h1:ujAbkeIgkKAWtxxNkoZHWLCyk5JpPoKnGyCcsoF6ueE= -github.com/ipfs/go-ipfs-exchange-interface v0.0.1 h1:LJXIo9W7CAmugqI+uofioIpRb6rY30GUu7G6LUfpMvM= -github.com/ipfs/go-ipfs-exchange-interface v0.0.1/go.mod h1:c8MwfHjtQjPoDyiy9cFquVtVHkO9b9Ob3FG91qJnWCM= -github.com/ipfs/go-ipfs-exchange-offline v0.0.1 h1:P56jYKZF7lDDOLx5SotVh5KFxoY6C81I1NSHW1FxGew= -github.com/ipfs/go-ipfs-exchange-offline v0.0.1/go.mod h1:WhHSFCVYX36H/anEKQboAzpUws3x7UeEGkzQc3iNkM0= -github.com/ipfs/go-ipfs-files v0.0.3/go.mod h1:INEFm0LL2LWXBhNJ2PMIIb2w45hpXgPjNoE7yA8Y1d4= -github.com/ipfs/go-ipfs-files v0.0.8 h1:8o0oFJkJ8UkO/ABl8T6ac6tKF3+NIpj67aAB6ZpusRg= -github.com/ipfs/go-ipfs-files v0.0.8/go.mod h1:wiN/jSG8FKyk7N0WyctKSvq3ljIa2NNTiZB55kpTdOs= -github.com/ipfs/go-ipfs-posinfo v0.0.1 h1:Esoxj+1JgSjX0+ylc0hUmJCOv6V2vFoZiETLR6OtpRs= -github.com/ipfs/go-ipfs-posinfo v0.0.1/go.mod h1:SwyeVP+jCwiDu0C313l/8jg6ZxM0qqtlt2a0vILTc1A= -github.com/ipfs/go-ipfs-pq v0.0.1/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= -github.com/ipfs/go-ipfs-pq v0.0.2 h1:e1vOOW6MuOwG2lqxcLA+wEn93i/9laCY8sXAw76jFOY= -github.com/ipfs/go-ipfs-pq v0.0.2/go.mod h1:LWIqQpqfRG3fNc5XsnIhz/wQ2XXGyugQwls7BgUmUfY= -github.com/ipfs/go-ipfs-provider v0.4.3 h1:k54OHXZcFBkhL6l3GnPS9PfpaLeLqZjVASG1bgfBdfQ= -github.com/ipfs/go-ipfs-provider v0.4.3/go.mod h1:rcQBVqfblDQRk5LaCtf2uxuKxMJxvKmF5pLS0pO4au4= -github.com/ipfs/go-ipfs-routing v0.0.1/go.mod h1:k76lf20iKFxQTjcJokbPM9iBXVXVZhcOwc360N4nuKs= -github.com/ipfs/go-ipfs-routing v0.1.0 h1:gAJTT1cEeeLj6/DlLX6t+NxD9fQe2ymTO6qWRDI/HQQ= -github.com/ipfs/go-ipfs-routing v0.1.0/go.mod h1:hYoUkJLyAUKhF58tysKpids8RNDPO42BVMgK5dNsoqY= -github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= -github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= -github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= -github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8= -github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= -github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= -github.com/ipfs/go-ipld-format v0.0.2/go.mod h1:4B6+FM2u9OJ9zCV+kSbgFAZlOrv1Hqbf0INGQgiKf9k= -github.com/ipfs/go-ipld-format v0.2.0 h1:xGlJKkArkmBvowr+GMCX0FEZtkro71K1AwiKnL37mwA= -github.com/ipfs/go-ipld-format v0.2.0/go.mod h1:3l3C1uKoadTPbeNfrDi+xMInYKlx2Cvg1BuydPSdzQs= -github.com/ipfs/go-ipns v0.0.2 h1:oq4ErrV4hNQ2Eim257RTYRgfOSV/s8BDaf9iIl4NwFs= -github.com/ipfs/go-ipns v0.0.2/go.mod h1:WChil4e0/m9cIINWLxZe1Jtf77oz5L05rO2ei/uKJ5U= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= -github.com/ipfs/go-log v1.0.4 h1:6nLQdX4W8P9yZZFH7mO+X/PzjN8Laozm/lMJ6esdgzY= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1 h1:G4TtqN+V9y9HY9TA6BwbCVyyBZ2B9MbCjR2MtGx8FR0= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-merkledag v0.0.6/go.mod h1:QYPdnlvkOg7GnQRofu9XZimC5ZW5Wi3bKys/4GQQfto= -github.com/ipfs/go-merkledag v0.2.3/go.mod h1:SQiXrtSts3KGNmgOzMICy5c0POOpUNQLvB3ClKnBAlk= -github.com/ipfs/go-merkledag v0.3.2 h1:MRqj40QkrWkvPswXs4EfSslhZ4RVPRbxwX11js0t1xY= -github.com/ipfs/go-merkledag v0.3.2/go.mod h1:fvkZNNZixVW6cKSZ/JfLlON5OlgTXNdRLz0p6QG/I2M= -github.com/ipfs/go-metrics-interface v0.0.1 h1:j+cpbjYvu4R8zbleSs36gvB7jR+wsL2fGD6n0jO4kdg= -github.com/ipfs/go-metrics-interface v0.0.1/go.mod h1:6s6euYU4zowdslK0GKHmqaIZ3j/b/tL7HTWtJ4VPgWY= -github.com/ipfs/go-path v0.0.7/go.mod h1:6KTKmeRnBXgqrTvzFrPV3CamxcgvXX/4z79tfAd2Sno= -github.com/ipfs/go-peertaskqueue v0.0.4/go.mod h1:03H8fhyeMfKNFWqzYEVyMbcPUeYrqP1MX6Kd+aN+rMQ= -github.com/ipfs/go-peertaskqueue v0.1.0/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= -github.com/ipfs/go-peertaskqueue v0.1.1/go.mod h1:Jmk3IyCcfl1W3jTW3YpghSwSEC6IJ3Vzz/jUmWw8Z0U= -github.com/ipfs/go-peertaskqueue v0.2.0 h1:2cSr7exUGKYyDeUyQ7P/nHPs9P7Ht/B+ROrpN1EJOjc= -github.com/ipfs/go-peertaskqueue v0.2.0/go.mod h1:5/eNrBEbtSKWCG+kQK8K8fGNixoYUnr+P7jivavs9lY= -github.com/ipfs/go-unixfs v0.2.4 h1:6NwppOXefWIyysZ4LR/qUBPvXd5//8J3jiMdvpbw6Lo= -github.com/ipfs/go-unixfs v0.2.4/go.mod h1:SUdisfUjNoSDzzhGVxvCL9QO/nKdwXdr+gbMUdqcbYw= -github.com/ipfs/go-verifcid v0.0.1 h1:m2HI7zIuR5TFyQ1b79Da5N9dnnCP1vcu2QqawmWlK2E= -github.com/ipfs/go-verifcid v0.0.1/go.mod h1:5Hrva5KBeIog4A+UpqlaIU+DEstipcJYQQZc0g37pY0= -github.com/ipfs/interface-go-ipfs-core v0.4.0 h1:+mUiamyHIwedqP8ZgbCIwpy40oX7QcXUbo4CZOeJVJg= -github.com/ipfs/interface-go-ipfs-core v0.4.0/go.mod h1:UJBcU6iNennuI05amq3FQ7g0JHUkibHFAfhfUIy927o= -github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= -github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= -github.com/jbenet/go-cienv v0.1.0 h1:Vc/s0QbQtoxX8MwwSLWWh+xNNZvM3Lw7NsTcHrvvhMc= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/karalabe/xgo v0.0.0-20191115072854-c5ccff8648a7 h1:AYzjK/SHz6m6mg5iuFwkrAhCc14jvCpW9d6frC9iDPE= -github.com/karalabe/xgo v0.0.0-20191115072854-c5ccff8648a7/go.mod h1:iYGcTYIPUvEWhFo6aKUuLchs+AV4ssYdyuBbQJZGcBk= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.0-20180514024734-4a0ed625a78b/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= -github.com/libp2p/go-addr-util v0.0.2 h1:7cWK5cdA5x72jX0g8iLrQWm5TRJZ6CzGdPEhWj7plWU= -github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-conn-security v0.0.1/go.mod h1:bGmu51N0KU9IEjX7kl2PQjgZa40JQWnayTvNMgD/vyk= -github.com/libp2p/go-conn-security-multistream v0.0.2/go.mod h1:nc9vud7inQ+d6SO0I/6dSWrdMnHnzZNHeyUQqrAJulE= -github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= -github.com/libp2p/go-conn-security-multistream v0.2.0 h1:uNiDjS58vrvJTg9jO6bySd1rMKejieG7v45ekqHbZ1M= -github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= -github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p v0.0.30/go.mod h1:XWT8FGHlhptAv1+3V/+J5mEpzyui/5bvFsNuWYs611A= -github.com/libp2p/go-libp2p v0.1.0/go.mod h1:6D/2OBauqLUoqcADOJpn9WbKqvaM07tDw68qHM0BxUM= -github.com/libp2p/go-libp2p v0.1.1/go.mod h1:I00BRo1UuUSdpuc8Q2mN7yDF/oTUTRAX6JWpTiK9Rp8= -github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54= -github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k= -github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= -github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= -github.com/libp2p/go-libp2p v0.12.0/go.mod h1:FpHZrfC1q7nA8jitvdjKBDF31hguaC676g/nT9PgQM0= -github.com/libp2p/go-libp2p v0.13.0 h1:tDdrXARSghmusdm0nf1U/4M8aj8Rr0V2IzQOXmbzQ3s= -github.com/libp2p/go-libp2p v0.13.0/go.mod h1:pM0beYdACRfHO1WcJlp65WXyG2A6NqYM+t2DTVAJxMo= -github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 h1:BM7aaOF7RpmNn9+9g6uTjGJ0cTzWr5j9i9IKeun2M8U= -github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= -github.com/libp2p/go-libp2p-autonat v0.0.6/go.mod h1:uZneLdOkZHro35xIhpbtTzLlgYturpu4J5+0cZK3MqE= -github.com/libp2p/go-libp2p-autonat v0.1.0/go.mod h1:1tLf2yXxiE/oKGtDwPYWTSYG3PtvYlJmg7NeVtPRqH8= -github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= -github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= -github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI= -github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= -github.com/libp2p/go-libp2p-autonat v0.4.0 h1:3y8XQbpr+ssX8QfZUHekjHCYK64sj6/4hnf/awD4+Ug= -github.com/libp2p/go-libp2p-autonat v0.4.0/go.mod h1:YxaJlpr81FhdOv3W3BTconZPfhaYivRdf53g+S2wobk= -github.com/libp2p/go-libp2p-blankhost v0.0.1/go.mod h1:Ibpbw/7cPPYwFb7PACIWdvxxv0t0XCCI10t7czjAjTc= -github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= -github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= -github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-circuit v0.0.9/go.mod h1:uU+IBvEQzCu953/ps7bYzC/D/R0Ho2A9LfKVVCatlqU= -github.com/libp2p/go-libp2p-circuit v0.1.0/go.mod h1:Ahq4cY3V9VJcHcn1SBXjr78AbFkZeIRmfunbA7pmFh8= -github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= -github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= -github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= -github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= -github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w= -github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= -github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= -github.com/libp2p/go-libp2p-core v0.0.2/go.mod h1:9dAcntw/n46XycV4RnlBq3BpgrmyUi9LuoTNdPrbUco= -github.com/libp2p/go-libp2p-core v0.0.3/go.mod h1:j+YQMNz9WNSkNezXOsahp9kwZBKBvxLpKD316QWSJXE= -github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= -github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= -github.com/libp2p/go-libp2p-core v0.2.5/go.mod h1:6+5zJmKhsf7yHn1RbmYDu08qDUpIUxGdqHuEZckmZOA= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= -github.com/libp2p/go-libp2p-core v0.4.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.3/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= -github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.7.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.0 h1:5K3mT+64qDTKbV3yTdbMCzJ7O6wbNsavAEb8iqBvBcI= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= -github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I= -github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= -github.com/libp2p/go-libp2p-discovery v0.0.5/go.mod h1:YtF20GUxjgoKZ4zmXj8j3Nb2TUSBHFlOCetzYdbZL5I= -github.com/libp2p/go-libp2p-discovery v0.1.0/go.mod h1:4F/x+aldVHjHDHuX85x1zWoFTGElt8HnoDzwkFZm29g= -github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg= -github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw= -github.com/libp2p/go-libp2p-discovery v0.5.0 h1:Qfl+e5+lfDgwdrXdu4YNCWyEo3fWuP+WgN9mN0iWviQ= -github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= -github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go= -github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8= -github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= -github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= -github.com/libp2p/go-libp2p-interface-connmgr v0.0.5/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k= -github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k= -github.com/libp2p/go-libp2p-kad-dht v0.11.1 h1:FsriVQhOUZpCotWIjyFSjEDNJmUzuMma/RyyTDZanwc= -github.com/libp2p/go-libp2p-kad-dht v0.11.1/go.mod h1:5ojtR2acDPqh/jXf5orWy8YGb8bHQDS+qeDcoscL/PI= -github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= -github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= -github.com/libp2p/go-libp2p-loggables v0.0.1/go.mod h1:lDipDlBNYbpyqyPX/KcoO+eq0sJYEVR2JgOexcivchg= -github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= -github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= -github.com/libp2p/go-libp2p-metrics v0.0.1/go.mod h1:jQJ95SXXA/K1VZi13h52WZMa9ja78zjyy5rspMsC/08= -github.com/libp2p/go-libp2p-mplex v0.1.1/go.mod h1:KUQWpGkCzfV7UIpi8SKsAVxyBgz1c9R5EvxgnwLsb/I= -github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= -github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= -github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= -github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= -github.com/libp2p/go-libp2p-mplex v0.3.0/go.mod h1:l9QWxRbbb5/hQMECEb908GbS9Sm2UAR2KFZKUJEynEs= -github.com/libp2p/go-libp2p-mplex v0.4.0/go.mod h1:yCyWJE2sc6TBTnFpjvLuEJgTSw/u+MamvzILKdX7asw= -github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-nat v0.0.4/go.mod h1:N9Js/zVtAXqaeT99cXgTV9e75KpnWCvVOiGzlcHmBbY= -github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= -github.com/libp2p/go-libp2p-nat v0.0.6 h1:wMWis3kYynCbHoyKLPBEMu4YRLltbm8Mk08HGSfvTkU= -github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= -github.com/libp2p/go-libp2p-net v0.0.1/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= -github.com/libp2p/go-libp2p-net v0.0.2/go.mod h1:Yt3zgmlsHOgUWSXmt5V/Jpz9upuJBE8EgNU9DrCcR8c= -github.com/libp2p/go-libp2p-netutil v0.0.1/go.mod h1:GdusFvujWZI9Vt0X5BKqwWWmZFxecf9Gt03cKxm2f/Q= -github.com/libp2p/go-libp2p-netutil v0.1.0 h1:zscYDNVEcGxyUpMd0JReUZTrpMfia8PmLKcKF72EAMQ= -github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= -github.com/libp2p/go-libp2p-noise v0.1.1 h1:vqYQWvnIcHpIoWJKC7Al4D6Hgj0H012TuXRhPwSMGpQ= -github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= -github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= -github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es= -github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= -github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= -github.com/libp2p/go-libp2p-peerstore v0.0.6/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20= -github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= -github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= -github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= -github.com/libp2p/go-libp2p-peerstore v0.2.0/go.mod h1:N2l3eVIeAitSg3Pi2ipSrJYnqhVnMNQZo9nkSCuAbnQ= -github.com/libp2p/go-libp2p-peerstore v0.2.1/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= -github.com/libp2p/go-libp2p-peerstore v0.2.2/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= -github.com/libp2p/go-libp2p-peerstore v0.2.6 h1:2ACefBX23iMdJU9Ke+dcXt3w86MIryes9v7In4+Qq3U= -github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-protocol v0.0.1/go.mod h1:Af9n4PiruirSDjHycM1QuiMi/1VZNHYcK8cLgFJLZ4s= -github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEXfQqUgC/1adR2Xtflk= -github.com/libp2p/go-libp2p-quic-transport v0.10.0 h1:koDCbWD9CCHwcHZL3/WEvP2A+e/o5/W5L3QS/2SPMA0= -github.com/libp2p/go-libp2p-quic-transport v0.10.0/go.mod h1:RfJbZ8IqXIhxBRm5hqUEJqjiiY8xmEuq3HUDS993MkA= -github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= -github.com/libp2p/go-libp2p-record v0.1.0/go.mod h1:ujNc8iuE5dlKWVy6wuL6dd58t0n7xI4hAIl8pE6wu5Q= -github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= -github.com/libp2p/go-libp2p-record v0.1.3 h1:R27hoScIhQf/A8XJZ8lYpnqh9LatJ5YbHs28kCIfql0= -github.com/libp2p/go-libp2p-record v0.1.3/go.mod h1:yNUff/adKIfPnYQXgp6FQmNu3gLJ6EMg7+/vv2+9pY4= -github.com/libp2p/go-libp2p-routing v0.0.1/go.mod h1:N51q3yTr4Zdr7V8Jt2JIktVU+3xBBylx1MZeVA6t1Ys= -github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= -github.com/libp2p/go-libp2p-secio v0.0.3/go.mod h1:hS7HQ00MgLhRO/Wyu1bTX6ctJKhVpm+j2/S2A5UqYb0= -github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= -github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= -github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= -github.com/libp2p/go-libp2p-secio v0.2.2 h1:rLLPvShPQAcY6eNurKNZq3eZjPWfU9kXF2eI9jIYdrg= -github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= -github.com/libp2p/go-libp2p-swarm v0.0.6/go.mod h1:s5GZvzg9xXe8sbeESuFpjt8CJPTCa8mhEusweJqyFy8= -github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= -github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= -github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= -github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= -github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= -github.com/libp2p/go-libp2p-swarm v0.3.1/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= -github.com/libp2p/go-libp2p-swarm v0.4.0 h1:hahq/ijRoeH6dgROOM8x7SeaKK5VgjjIr96vdrT+NUA= -github.com/libp2p/go-libp2p-swarm v0.4.0/go.mod h1:XVFcO52VoLoo0eitSxNQWYq4D6sydGOweTOAjJNraCw= -github.com/libp2p/go-libp2p-testing v0.0.1/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= -github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.3.0/go.mod h1:efZkql4UZ7OVsEfaxNHZPzIehtsBXMrXnCfJIgDti5g= -github.com/libp2p/go-libp2p-testing v0.4.0 h1:PrwHRi0IGqOwVQWR3xzgigSlhlLfxgfXgkHxr77EghQ= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-tls v0.1.3 h1:twKMhMu44jQO+HgQK9X8NHO5HkeJu2QbhLzLJpa8oNM= -github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= -github.com/libp2p/go-libp2p-transport v0.0.1/go.mod h1:UzbUs9X+PHOSw7S3ZmeOxfnwaQY5vGDzZmKPod3N3tk= -github.com/libp2p/go-libp2p-transport v0.0.5/go.mod h1:StoY3sx6IqsP6XKoabsPnHCwqKXWUMWU7Rfcsubee/A= -github.com/libp2p/go-libp2p-transport-upgrader v0.0.4/go.mod h1:RGq+tupk+oj7PzL2kn/m1w6YXxcIAYJYeI90h6BGgUc= -github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= -github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= -github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= -github.com/libp2p/go-libp2p-transport-upgrader v0.4.0 h1:xwj4h3hJdBrxqMOyMUjwscjoVst0AASTsKtZiTChoHI= -github.com/libp2p/go-libp2p-transport-upgrader v0.4.0/go.mod h1:J4ko0ObtZSmgn5BX5AmegP+dK3CSnU2lMCKsSq/EY0s= -github.com/libp2p/go-libp2p-webrtc-direct v0.0.0-20201219114432-56b02029fbb8 h1:5365vZIvIF9b0mRzQoY3JUYi6PSAQrtkF8Jafev3KgI= -github.com/libp2p/go-libp2p-webrtc-direct v0.0.0-20201219114432-56b02029fbb8/go.mod h1:gWOBHHtRRlIwkw9URidETELlb045DsHiWffyWSThaMI= -github.com/libp2p/go-libp2p-yamux v0.1.2/go.mod h1:xUoV/RmYkg6BW/qGxA9XJyg+HzXFYkeXbnhjmnYzKp8= -github.com/libp2p/go-libp2p-yamux v0.1.3/go.mod h1:VGSQVrqkh6y4nm0189qqxMtvyBft44MOYYPpYKXiVt4= -github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= -github.com/libp2p/go-libp2p-yamux v0.2.1/go.mod h1:1FBXiHDk1VyRM1C0aez2bCfHQ4vMZKkAQzZbkSQt5fI= -github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw= -github.com/libp2p/go-libp2p-yamux v0.2.5/go.mod h1:Zpgj6arbyQrmZ3wxSZxfBmbdnWtbZ48OpsfmQVTErwA= -github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhLEn0XhIoZ5viCwU= -github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= -github.com/libp2p/go-libp2p-yamux v0.4.0/go.mod h1:+DWDjtFMzoAwYLVkNZftoucn7PelNoy5nm3tZ3/Zw30= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-libp2p-yamux v0.5.1 h1:sX4WQPHMhRxJE5UZTfjEuBvlQWXB5Bo3A2JK9ZJ9EM0= -github.com/libp2p/go-libp2p-yamux v0.5.1/go.mod h1:dowuvDu8CRWmr0iqySMiSxK+W0iL5cMVO9S94Y6gkv4= -github.com/libp2p/go-maddr-filter v0.0.1/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= -github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= -github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= -github.com/libp2p/go-mplex v0.0.4/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= -github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= -github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= -github.com/libp2p/go-mplex v0.2.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.3/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-nat v0.0.3/go.mod h1:88nUEt0k0JD45Bk93NIwDqjlhiOwOoV36GchpcVc1yI= -github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= -github.com/libp2p/go-nat v0.0.5 h1:qxnwkco8RLKqVh1NmjQ+tJ8p8khNLFxuElYG/TwqW4Q= -github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.3 h1:1ngWRx61us/EpaKkdqkMjKk/ufr/JlIFYQAxV2XX8Ig= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= -github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= -github.com/libp2p/go-reuseport v0.0.2 h1:XSG94b1FJfGA01BUrT82imejHQyTxO4jEWqheyCXYvU= -github.com/libp2p/go-reuseport v0.0.2/go.mod h1:SPD+5RwGC7rcnzngoYC86GjPzjSywuQyMVAheVBD9nQ= -github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= -github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= -github.com/libp2p/go-reuseport-transport v0.0.4 h1:OZGz0RB620QDGpv300n1zaOcKGGAoGVf8h9txtt/1uM= -github.com/libp2p/go-reuseport-transport v0.0.4/go.mod h1:trPa7r/7TJK/d+0hdBLOCGvpQQVOU74OXbNCIMkufGw= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= -github.com/libp2p/go-stream-muxer v0.1.0/go.mod h1:8JAVsjeRBCWwPoZeH0W1imLOcriqXJyFvB0mR4A04sQ= -github.com/libp2p/go-stream-muxer-multistream v0.1.1/go.mod h1:zmGdfkQ1AzOECIAcccoL8L//laqawOsO03zX8Sa+eGw= -github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= -github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.0.4/go.mod h1:+E8HvC8ezEVOxIo3V5vCK9l1y/19K427vCzQ+xHKH/o= -github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= -github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= -github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= -github.com/libp2p/go-tcp-transport v0.2.1 h1:ExZiVQV+h+qL16fzCWtd1HSzPsqWottJ8KXwWaVi8Ns= -github.com/libp2p/go-tcp-transport v0.2.1/go.mod h1:zskiJ70MEfWz2MKxvFB/Pv+tPIB1PpPUrHIWQ8aFw7M= -github.com/libp2p/go-testutil v0.0.1/go.mod h1:iAcJc/DKJQanJ5ws2V+u5ywdL2n12X1WbbEG+Jjy69I= -github.com/libp2p/go-testutil v0.1.0/go.mod h1:81b2n5HypcVyrCg/MJx4Wgfp/VHojytjVe/gLzZ2Ehc= -github.com/libp2p/go-ws-transport v0.0.5/go.mod h1:Qbl4BxPfXXhhd/o0wcrgoaItHqA9tnZjoFZnxykuaXU= -github.com/libp2p/go-ws-transport v0.1.0/go.mod h1:rjw1MG1LU9YDC6gzmwObkPd/Sqwhw7yT74kj3raBFuo= -github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= -github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= -github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= -github.com/libp2p/go-ws-transport v0.4.0 h1:9tvtQ9xbws6cA5LvqdE6Ne3vcmGB4f1z9SByggk4s0k= -github.com/libp2p/go-ws-transport v0.4.0/go.mod h1:EcIEKqf/7GDjth6ksuS/6p7R49V4CBY6/E7R/iyhYUA= -github.com/libp2p/go-yamux v1.2.1/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.2.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= -github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux/v2 v2.0.0 h1:vSGhAy5u6iHBq11ZDcyHH4Blcf9xlBhT4WQDoOE90LU= -github.com/libp2p/go-yamux/v2 v2.0.0/go.mod h1:NVWira5+sVUIU6tu1JWvaRn1dRnG+cawOJiflsAM+7U= -github.com/lucas-clemente/quic-go v0.7.1-0.20190401152353-907071221cf9/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= -github.com/lucas-clemente/quic-go v0.19.3 h1:eCDQqvGBB+kCTkA0XrAFtNe81FMa0/fn4QSoeAbmiF4= -github.com/lucas-clemente/quic-go v0.19.3/go.mod h1:ADXpNbTQjq1hIzCpB+y/k5iz4n4z4IwqoLb94Kh5Hu8= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/marten-seemann/qtls v0.10.0 h1:ECsuYUKalRL240rRD4Ri33ISb7kAQ3qGDlrrl55b2pc= -github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= -github.com/marten-seemann/qtls-go1-15 v0.1.1 h1:LIH6K34bPVttyXnUWixk0bzH6/N07VxbSabxn5A5gZQ= -github.com/marten-seemann/qtls-go1-15 v0.1.1/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1 h1:1bxa+W7j9wZKTZREySx1vPMs2TqrYWjVZ7zE6/XLG1I= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= -github.com/multiformats/go-multiaddr-dns v0.2.0 h1:YWJoIDwLePniH7OU5hBnDZV6SWuvJqJ0YtN6pLeH9zA= -github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= -github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= -github.com/multiformats/go-multiaddr-net v0.1.0/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= -github.com/multiformats/go-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= -github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= -github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.2.0 h1:MSXRGN0mFymt6B1yo/6BPnIRpLPEnKgQNvVfCX5VDJk= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.9/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.0.4/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.0 h1:6AuNmQVKUkRnddw2YiDjt5Elit40SFxMJkVnhmETXtU= -github.com/multiformats/go-multistream v0.2.0/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pion/datachannel v1.4.13/go.mod h1:+rBUwEDonA63KXx994DP/ofyyGVAm6AIMvOqQZxjWRU= -github.com/pion/datachannel v1.4.21 h1:3ZvhNyfmxsAqltQrApLPQMhSFNA+aT87RqyCq4OXmf0= -github.com/pion/datachannel v1.4.21/go.mod h1:oiNyP4gHx2DIwRzX/MFyH0Rz/Gz05OgBlayAI2hAWjg= -github.com/pion/dtls/v2 v2.0.0-rc.3/go.mod h1:x0XH+cN5z+l/+/4nYL8r4sB8g6+0d1Zp2Pfkcoz8BKY= -github.com/pion/dtls/v2 v2.0.1/go.mod h1:uMQkz2W0cSqY00xav7WByQ4Hb+18xeQh2oH2fRezr5U= -github.com/pion/dtls/v2 v2.0.2 h1:FHCHTiM182Y8e15aFTiORroiATUI16ryHiQh8AIOJ1E= -github.com/pion/dtls/v2 v2.0.2/go.mod h1:27PEO3MDdaCfo21heT59/vsdmZc0zMt9wQPcSlLu/1I= -github.com/pion/ice v0.7.6/go.mod h1:4xCajahEEvc5w0AM+Ujx/Rr2EczON/fKndi3jLyDdh4= -github.com/pion/ice v0.7.18 h1:KbAWlzWRUdX9SmehBh3gYpIFsirjhSQsCw6K2MjYMK0= -github.com/pion/ice v0.7.18/go.mod h1:+Bvnm3nYC6Nnp7VV6glUkuOfToB/AtMRZpOU8ihuf4c= -github.com/pion/logging v0.2.1/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/mdns v0.0.4 h1:O4vvVqr4DGX63vzmO6Fw9vpy3lfztVWHGCQfyw0ZLSY= -github.com/pion/mdns v0.0.4/go.mod h1:R1sL0p50l42S5lJs91oNdUL58nm0QHrhxnSegr++qC0= -github.com/pion/quic v0.1.1 h1:D951FV+TOqI9A0rTF7tHx0Loooqz+nyzjEyj8o3PuMA= -github.com/pion/quic v0.1.1/go.mod h1:zEU51v7ru8Mp4AUBJvj6psrSth5eEFNnVQK5K48oV3k= -github.com/pion/randutil v0.0.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.1/go.mod h1:a5dj2d6BKIKHl43EnAOIrCczcjESrtPuMgfmL6/K6QM= -github.com/pion/rtcp v1.2.3 h1:2wrhKnqgSz91Q5nzYTO07mQXztYPtxL8a0XOss4rJqA= -github.com/pion/rtcp v1.2.3/go.mod h1:zGhIv0RPRF0Z1Wiij22pUt5W/c9fevqSzT4jje/oK7I= -github.com/pion/rtp v1.1.3/go.mod h1:/l4cvcKd0D3u9JLs2xSVI95YkfXW87a3br3nqmVtSlE= -github.com/pion/rtp v1.1.4/go.mod h1:/l4cvcKd0D3u9JLs2xSVI95YkfXW87a3br3nqmVtSlE= -github.com/pion/rtp v1.6.0 h1:4Ssnl/T5W2LzxHj9ssYpGVEQh3YYhQFNVmSWO88MMwk= -github.com/pion/rtp v1.6.0/go.mod h1:QgfogHsMBVE/RFNno467U/KBqfUywEH+HK+0rtnwsdI= -github.com/pion/sctp v1.7.3/go.mod h1:c6C9jaDGX7f5xeSRVju/140XatpO9sOVe81EwpfzAc8= -github.com/pion/sctp v1.7.10 h1:o3p3/hZB5Cx12RMGyWmItevJtZ6o2cpuxaw6GOS4x+8= -github.com/pion/sctp v1.7.10/go.mod h1:EhpTUQu1/lcK3xI+eriS6/96fWetHGCvBi9MSsnaBN0= -github.com/pion/sdp/v2 v2.3.1/go.mod h1:jccXVYW0fuK6ds2pwKr89SVBDYlCjhgMI6nucl5R5rA= -github.com/pion/sdp/v2 v2.4.0 h1:luUtaETR5x2KNNpvEMv/r4Y+/kzImzbz4Lm1z8eQNQI= -github.com/pion/sdp/v2 v2.4.0/go.mod h1:L2LxrOpSTJbAns244vfPChbciR/ReU1KWfG04OpkR7E= -github.com/pion/srtp v1.2.6/go.mod h1:rd8imc5htjfs99XiEoOjLMEOcVjME63UHx9Ek9IGst0= -github.com/pion/srtp v1.5.1 h1:9Q3jAfslYZBt+C69SI/ZcONJh9049JUHZWYRRf5KEKw= -github.com/pion/srtp v1.5.1/go.mod h1:B+QgX5xPeQTNc1CJStJPHzOlHK66ViMDWTT0HZTCkcA= -github.com/pion/stun v0.3.3/go.mod h1:xrCld6XM+6GWDZdvjPlLMsTU21rNxnO6UO8XsAvHr/M= -github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg= -github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA= -github.com/pion/transport v0.6.0/go.mod h1:iWZ07doqOosSLMhZ+FXUTq+TamDoXSllxpbGcfkCmbE= -github.com/pion/transport v0.8.9/go.mod h1:lpeSM6KJFejVtZf8k0fgeN7zE73APQpTF83WvA1FVP8= -github.com/pion/transport v0.8.10/go.mod h1:tBmha/UCjpum5hqTWhfAEs3CO4/tHSg0MYRhSzR+CZ8= -github.com/pion/transport v0.10.0/go.mod h1:BnHnUipd0rZQyTVB2SBGojFHT9CBt5C5TcsJSQGkvSE= -github.com/pion/transport v0.10.1 h1:2W+yJT+0mOQ160ThZYUx5Zp2skzshiNgxrNE9GUfhJM= -github.com/pion/transport v0.10.1/go.mod h1:PBis1stIILMiis0PewDw91WJeLJkyIMcEk+DwKOzf4A= -github.com/pion/turn v1.4.0 h1:7NUMRehQz4fIo53Qv9ui1kJ0Kr1CA82I81RHKHCeM80= -github.com/pion/turn v1.4.0/go.mod h1:aDSi6hWX/hd1+gKia9cExZOR0MU95O7zX9p3Gw/P2aU= -github.com/pion/turn/v2 v2.0.4 h1:oDguhEv2L/4rxwbL9clGLgtzQPjtuZwCdoM7Te8vQVk= -github.com/pion/turn/v2 v2.0.4/go.mod h1:1812p4DcGVbYVBTiraUmP50XoKye++AMkbfp+N27mog= -github.com/pion/udp v0.1.0 h1:uGxQsNyrqG3GLINv36Ff60covYmfrLoxzwnCsIYspXI= -github.com/pion/udp v0.1.0/go.mod h1:BPELIjbwE9PRbd/zxI/KYBnbo7B6+oA6YuEaNE8lths= -github.com/pion/webrtc/v2 v2.1.18/go.mod h1:m0rKlYgLRZWyhmcMWegpF6xtK1ASxmOg8DAR74ttzQY= -github.com/pion/webrtc/v2 v2.2.26 h1:01hWE26pL3LgqfxvQ1fr6O4ZtyRFFJmQEZK39pHWfFc= -github.com/pion/webrtc/v2 v2.2.26/go.mod h1:XMZbZRNHyPDe1gzTIHFcQu02283YO45CbiwFgKvXnmc= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polydawn/refmt v0.0.0-20190221155625-df39d6c2d992/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= -github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14 h1:2m16U/rLwVaRdz7ANkHtHTodP3zTP3N451MADg64x5k= -github.com/polydawn/refmt v0.0.0-20190408063855-01bf1e26dd14/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= -github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= -github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/warpfork/go-wish v0.0.0-20180510122957-5ad1f5abf436/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830 h1:8kxMKmKzXXL4Ru1nyhvdms/JjWt+3YLpvRb/bAjO/y0= -github.com/warpfork/go-wish v0.0.0-20190328234359-8b3e70f8e830/go.mod h1:x6AKhvSSexNrVSrViXSHUEbICjmGXhtgABaHIySUSGw= -github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158 h1:WXhVOwj2USAXB5oMDwRl3piOux2XMV9TANaYxXHdkoE= -github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158/go.mod h1:Xj/M2wWU+QdTdRbu/L/1dIZY8/Wb2K9pAhtroQuxJJI= -github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= -github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= -github.com/whyrusleeping/go-notifier v0.0.0-20170827234753-097c5d47330f/go.mod h1:cZNvX9cFybI01GriPRMXDtczuvUhgbcYr9iCGaNlRv8= -github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= -github.com/whyrusleeping/mdns v0.0.0-20180901202407-ef14215e6b30/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.0.0 h1:qsup4IcBdlmsnGfqyLl4Ntn3C2XCCuKAE7DwHpScyUo= -go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191029031824-8986dd9e96cf/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b h1:iFwSg7t5GZmB/Q5TjiEAsdoLDrdJRC1RiF2WhuV29Qw= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190302025703-b6889370fb10/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190524122548-abf6ff778158/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190524152521-dbbf3f1254d4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425 h1:VvQyQJN0tSuecqgcIxMWnnfG5kSmgy9KZR9sW3W5QeA= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/ugated/pkg/ipfs/ipfs_blocks.go b/ugated/pkg/ipfs/ipfs_blocks.go deleted file mode 100644 index 1b8ae33..0000000 --- a/ugated/pkg/ipfs/ipfs_blocks.go +++ /dev/null @@ -1,208 +0,0 @@ -//go:build IPFS_FILES -// +build IPFS_FILES - -package ipfs - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "log" - "os" - "strings" - "time" - - ufsio "github.com/ipfs/go-unixfs/io" - - chunker "github.com/ipfs/go-ipfs-chunker" - - "github.com/ipfs/go-bitswap/network" - blockstore "github.com/ipfs/go-ipfs-blockstore" - provider "github.com/ipfs/go-ipfs-provider" - "github.com/ipfs/go-ipfs-provider/queue" - "github.com/ipfs/go-ipfs-provider/simple" - cbor "github.com/ipfs/go-ipld-cbor" - ipld "github.com/ipfs/go-ipld-format" - "github.com/ipfs/go-unixfs/importer/balanced" - "github.com/ipfs/go-unixfs/importer/helpers" - "github.com/ipfs/go-unixfs/importer/trickle" -) - -type IPFS_BS struct { - *IPFS - - // Also provide block - since we pay the DHT price. - // File serving - ipld.DAGService - bstore blockstore.Blockstore - bserv blockservice.BlockService - reprovider provider.System -} - -// Specific to file serving -func init() { - if os.Getenv("IPFS_DIR") != "" { - ipld.Register(cid.DagProtobuf, merkledag.DecodeProtobufBlock) - - ipld.Register(cid.Raw, merkledag.DecodeRawBlock) - ipld.Register(cid.DagCBOR, cbor.DecodeBlock) // need to decode CBOR - - blockInit = func(node *IPFS) { - p2p := &IPFS_BS{IPFS: node} - p2p.setupBlockstore() - p2p.setupBlockService() - p2p.setupDAGService() - p2p.setupReprovider() - // bafybeickrjm6kmamm5obkqszwvqfnstk4diu6e6ztswxoti5ee3jwyt6ym - buf := bytes.NewReader([]byte("IPFS test")) - n, _ := p2p.AddFile(context.Background(), buf, nil) - if n != nil { - log.Println("Added ", n.Cid()) - } - } - } -} - -func (p *IPFS_BS) setupBlockstore() error { - bs := blockstore.NewBlockstore(p.store) - bs = blockstore.NewIdStore(bs) - cachedbs, err := blockstore.CachedBlockstore(p.ctx, bs, blockstore.DefaultCacheOpts()) - if err != nil { - return err - } - p.bstore = cachedbs - return nil -} - -func (p *IPFS_BS) setupBlockService() error { - // Second param is the ContentRouting - - // for the real IPFS net it must be the DHT. - // Used for 'Provide(CID)' and 'FindProvidersAsync' - // local discovery can also provide this. - bswapnet := network.NewFromIpfsHost(p.Host, p.DHT) - bswap := bitswap.New(p.ctx, bswapnet, p.bstore) - p.bserv = blockservice.New(p.bstore, bswap) - return nil -} - -func (p *IPFS_BS) setupDAGService() error { - p.DAGService = merkledag.NewDAGService(p.bserv) - return nil -} - -func (p *IPFS_BS) setupReprovider() error { - // Can also use fsrepo - - queue, err := queue.NewQueue(p.ctx, "repro", p.store) - if err != nil { - return err - } - - prov := simple.NewProvider( - p.ctx, - queue, - p.DHT, - ) - - reprov := simple.NewReprovider( - p.ctx, - 12*time.Hour, - p.DHT, - simple.NewBlockstoreProvider(p.bstore), - ) - - p.reprovider = provider.NewSystem(prov, reprov) - p.reprovider.Run() - return nil -} - -func (p *IPFS_BS) autoclose() { - <-p.ctx.Done() - p.reprovider.Close() - p.bserv.Close() -} - -// Session returns a session-based NodeGetter. -func (p *IPFS_BS) Session(ctx context.Context) ipld.NodeGetter { - ng := merkledag.NewSession(ctx, p.DAGService) - if ng == p.DAGService { - logger.Warn("DAGService does not support sessions") - } - return ng -} - -// AddParams contains all of the configurable parameters needed to specify the -// importing process of a file. -type AddParams struct { - Layout string - Chunker string - RawLeaves bool - Hidden bool - Shard bool - NoCopy bool - HashFun string -} - -// AddFile chunks and adds content to the DAGService from a reader. The content -// is stored as a UnixFS DAG (default for IPFS). It returns the root -// ipld.Node. -func (p *IPFS_BS) AddFile(ctx context.Context, r io.Reader, params *AddParams) (ipld.Node, error) { - if params == nil { - params = &AddParams{} - } - if params.HashFun == "" { - params.HashFun = "sha2-256" - } - - prefix, err := merkledag.PrefixForCidVersion(1) - if err != nil { - return nil, fmt.Errorf("bad CID Version: %s", err) - } - - hashFunCode, ok := multihash.Names[strings.ToLower(params.HashFun)] - if !ok { - return nil, fmt.Errorf("unrecognized hash function: %s", params.HashFun) - } - prefix.MhType = hashFunCode - prefix.MhLength = -1 - - dbp := helpers.DagBuilderParams{ - Dagserv: p, - RawLeaves: params.RawLeaves, - Maxlinks: helpers.DefaultLinksPerBlock, - NoCopy: params.NoCopy, - CidBuilder: &prefix, - } - - chnk, err := chunker.FromString(r, params.Chunker) - if err != nil { - return nil, err - } - dbh, err := dbp.New(chnk) - if err != nil { - return nil, err - } - - var n ipld.Node - switch params.Layout { - case "trickle": - n, err = trickle.Layout(dbh) - case "balanced", "": - n, err = balanced.Layout(dbh) - default: - return nil, errors.New("invalid Layout") - } - return n, err -} - -// GetFile returns a reader to a file as identified by its root CID. The file -// must have been added as a UnixFS DAG (default for IPFS). -func (p *IPFS_BS) GetFile(ctx context.Context, c cid.Cid) (ufsio.ReadSeekCloser, error) { - n, err := p.Get(ctx, c) - if err != nil { - return nil, err - } - return ufsio.NewDagReader(ctx, n, p) -} diff --git a/ugated/pkg/ipfs/ipfs_test.go b/ugated/pkg/ipfs/ipfs_test.go deleted file mode 100644 index 3f2836b..0000000 --- a/ugated/pkg/ipfs/ipfs_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package ipfs - -import ( - "context" - "encoding/base64" - "fmt" - "io/ioutil" - "log" - "testing" - - blankhost "github.com/libp2p/go-libp2p-blankhost" - ic "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/transport" - tpt "github.com/libp2p/go-libp2p-core/transport" - "github.com/libp2p/go-libp2p-peerstore/pstoremem" - swarm "github.com/libp2p/go-libp2p-swarm" - //ws "github.com/costinm/go-ws-transport" - ws "github.com/libp2p/go-ws-transport" - ma "github.com/multiformats/go-multiaddr" -) - -const key = "CAESQDXW7-QhEhXWdgDUg7AvhlJU2eN-2IzMoDOWl_P271npGnwf4KUMcqufSakCfFi373F8C2HqINHxWalQwk3pVrc=" - -func TestBlankHost(t *testing.T) { - kb, _ := base64.URLEncoding.DecodeString(key) - - priv, _ := ic.UnmarshalPrivateKey(kb) - - peerID, err := peer.IDFromPrivateKey(priv) - - tr, err := initTransport("5555", priv) - if err != nil { - t.Fatal(err) - } - ps := pstoremem.NewPeerstore() - // BlankHost is used in testing - usually with a swarm for transport - // Options can provide a non-null ConnMgr - // In addition it has a 'mux', bus, network - currently Swarm is the only non-mock impl - - // The 'swarm' is responsible for handshake in user-space using the protocol WorkloadID. - // No metadata. - n := swarm.NewSwarm(context.Background(), peerID, ps, nil) - n.AddTransport(tr) - h := blankhost.NewBlankHost(n) - - log.Println("XXX", h) -} - -func initTransport(port string, priv ic.PrivKey) (transport.Transport, error) { - addr, err := ma.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%s/ws", port)) - if err != nil { - return nil, err - } - - peerID, err := peer.IDFromPrivateKey(priv) - if err != nil { - return nil, err - } - - t := ws.New(nil) //NewSPDY(priv, nil, nil) - - ln, err := t.Listen(addr) - if err != nil { - return nil, err - } - fmt.Printf("Listening. Now run: go run cmd/client/main.go %s %s\n", ln.Multiaddr(), peerID) - for { - conn, err := ln.Accept() - if err != nil { - return nil, err - } - log.Printf("Accepted new connection from %s (%s)\n", conn.RemotePeer(), conn.RemoteMultiaddr()) - log.Println(conn.RemotePeer().String(), conn.RemoteMultiaddr().String(), - conn.RemotePublicKey()) - - go func() { - if err := handleConn(conn); err != nil { - log.Printf("handling conn failed: %s", err.Error()) - } - }() - } - - return t, nil - -} - -func handleConn(conn tpt.CapableConn) error { - str, err := conn.AcceptStream() - if err != nil { - return err - } - data, err := ioutil.ReadAll(str) - if err != nil { - return err - } - log.Printf("Received: %s\n", data) - if _, err := str.Write([]byte(data)); err != nil { - return err - } - return str.Close() -} diff --git a/ugated/pkg/ipfs/libp2p.go b/ugated/pkg/ipfs/libp2p.go deleted file mode 100644 index d7ad2ab..0000000 --- a/ugated/pkg/ipfs/libp2p.go +++ /dev/null @@ -1,300 +0,0 @@ -//go:build !IPFSLITE -// +build !IPFSLITE - -package ipfs - -import ( - "context" - "crypto/ecdsa" - "fmt" - "log" - "net/http" - "os" - "strings" - "time" - - "github.com/costinm/meshauth" - "github.com/ipfs/go-datastore" - config "github.com/ipfs/go-ipfs-config" - "github.com/ipfs/go-ipns" - ipfslog "github.com/ipfs/go-log" - "github.com/libp2p/go-libp2p" - "github.com/libp2p/go-libp2p/p2p/host/relay" - ws "github.com/libp2p/go-ws-transport" - "github.com/multiformats/go-multiaddr" - - connmgr "github.com/libp2p/go-libp2p-connmgr" - "github.com/libp2p/go-libp2p-core/crypto" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/routing" - record "github.com/libp2p/go-libp2p-record" - - dht "github.com/libp2p/go-libp2p-kad-dht" - libp2pquic "github.com/libp2p/go-libp2p-quic-transport" - secio "github.com/libp2p/go-libp2p-secio" - libp2ptls "github.com/libp2p/go-libp2p-tls" -) - -type IPFSConfig struct { - // If true enable the DHT functionality. - // In this mode, we act as 'control plane'. If false, the node acts - // as a gateway, using a CP for discovery and control. - // The DHT requires maintaining a lot of connections, best for an internet - // connected host - not for mobile. - UseDHT bool -} - -// ConnectionGater, Server -type IPFS struct { - *IPFSConfig - - ctx context.Context - Host host.Host - - // Only set for discovery nodes. - // Mobile/battery powered/clients use Routing - DHT *dht.IpfsDHT - - // Combines ContentRouting, PeerRouting, ValueStore - Routing routing.Routing // may be same as DHT - store datastore.Batching -} - -// DHT: supports putValue(key, value) for exactly 2 key types: -// - /pk/KEYHASH -> public key. Not relevant for ED keys ( key id is the key ) -// - /ipns/KEYID -> proto IpnsEntry containing public key. - -// InitIPFS creates LibP2P compatible transport. -// Identity is based on the EC256 workload identity in auth. -// -// Will use a select set of transports, remotely based on standards: -// - QUIC -// - WS -// -// UGate implements H2, WebRTC variants, with a IPFS transport adapter. -func InitIPFS(auth *meshauth.MeshAuth, p2pport int, mux *http.ServeMux) *IPFS { - p2p := &IPFS{ - ctx: context.Background(), - IPFSConfig: &IPFSConfig{}, - } - p2p.UseDHT = os.Getenv("DHT") == "" - - ctx := context.Background() - //ipfslog.SetLogLevel("*", "debug") - ipfslog.SetLogLevel("*", "warn") - - // Bootstrappers are using 1024 keys. See: - // https://github.com/ipfs/infra/issues/378 - crypto.MinRsaKeyBits = 1024 - - ds := datastore.NewMapDatastore() - p2p.store = ds - - sk, _, _ := crypto.ECDSAKeyPairFromKey(auth.Cert.PrivateKey.(*ecdsa.PrivateKey)) - // crypto.MarshalPrivateKey uses a protobuf - we use our own format. - - la := []multiaddr.Multiaddr{} - listen, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", p2pport)) - la = append(la, listen) - //listen, err := multiaddr.NewMultiaddr(fmt.Sprintf("/ip4/0.0.0.0/udp/%d/quic", p2pport)) - //la = append(la, listen) - //listen, err = multiaddr.NewMultiaddr(fmt.Sprintf("/ip6/::/tcp/%d", p2pport)) - //la = append(la, listen) - listen, _ = multiaddr.NewMultiaddr(fmt.Sprintf("/ip6/::/udp/%d/quic", p2pport)) - la = append(la, listen) - //listen, _ = multiaddr.NewMultiaddr("/ip4/0.0.0.0/udp/4005/quic") - //la = append(la, listen) - //listen, _ = multiaddr.NewMultiaddr("/ip4/0.0.0.0/tcp/4006/ws") - //la = append(la, listen) - //listen, _ = multiaddr.NewMultiaddr("/ip6/::/tcp/4006/ws") - //la = append(la, listen) - - // TODO: set a ConnectionGater ! - // TODO: equivalent StreamGater ? - // TODO: create a ssh proxy - // TODO: SSH transport - - //rtc := direct.NewTransport( - // webrtc.Configuration{}, - // new(mplex.Transport), - //) - - finalOpts := []libp2p.Option{ - libp2p.Identity(sk), - libp2p.ListenAddrs(la...), - libp2p.ChainOptions( - libp2p.Transport(libp2pquic.NewTransport), - libp2p.Transport(ws.New), - //libp2p.Transport(rtc), - //libp2p.DefaultTransports, // TCP, WS - ), - - libp2p.EnableNATService(), - - // If behind NAT, find and use relays - libp2p.EnableAutoRelay(), - // Accept from relay, initiate via relay. Required for auto relay - libp2p.EnableRelay(), // no circuit.OptHop, OptActive - - // Attempt to use UpNP to open port - // mostly uselss. - //libp2p.NATPortMap(), - - libp2p.ConnectionManager(connmgr.NewConnManager( - 100, // Lowwater - 600, // HighWater, - time.Minute, // GracePeriod - )), - - // Used for the /ws/ transport - QUIC is 'capable', has own security - // TODO: ssh over ws built in. - // https://docs.libp2p.io/concepts/stream-multiplexing/#implementations - // Defaults: mplex - no flow control - // yamux - based on h2, but not the same. Problems closing. No JS. - // spdystream - h2, has JS, based on docker/spdystream. Out of date, not core - // - //libp2p.Muxer("/yamux/1.0.0", yamux.DefaultTransport), - // Default: noise, tls - libp2p.Security(libp2ptls.ID, libp2ptls.New), - libp2p.Security(secio.ID, secio.New), - - libp2p.AddrsFactory(func(src []multiaddr.Multiaddr) []multiaddr.Multiaddr { - res := []multiaddr.Multiaddr{} - for _, s := range src { - if strings.HasPrefix(s.String(), "/ip6/fd") { - continue - } - if strings.HasPrefix(s.String(), "/ip4/10.") { - continue - } - res = append(res, s) - } - return src - }), - libp2p.ConnectionGater(p2p), - - // Disables probing for rely, force using only public - //libp2p.ForceReachabilityPublic(), - //libp2p.ForceReachabilityPrivate(), - - } - - relay.DesiredRelays = 2 - - if p2p.UseDHT { - //var ddht *dual.DHT - finalOpts = append(finalOpts, libp2p.Routing(func(h host.Host) (routing.PeerRouting, error) { - ddht, err := newDHT(ctx, h, ds) - p2p.DHT = ddht - //p2p.PeerStore = ddht - p2p.Routing = ddht - return ddht, err - })) - } else { - // in memory peer store - // HTTPS/XDS/etc for discovery, using a discovery server with DHT - // or other backend. - - // This allows the node to be contacted behind NAT - // Set the 'official' relays. - // TODO: get relay dynamically, from discovery server - finalOpts = append(finalOpts, libp2p.DefaultStaticRelays()) - - // TODO: add option, use only if discovery server is local. - finalOpts = append(finalOpts, libp2p.ForceReachabilityPrivate()) - } - - var pi *peer.AddrInfo - // Connects to this node - mostly for testing. - if rt := os.Getenv("IPFS_ROOT"); rt != "" { - pi, err = P2PAddrFromString(rt) - if err != nil { - log.Println("Invalid ", rt, err) - } else { - //finalOpts = append(finalOpts, libp2p.StaticRelays([]peer.AddrInfo{*pi})) - } - } - - // Will register: (see multistream.AddHandlerWithFunc) - // /ipfs/id -> handles peer registration in DHT - // ping - // secio - // tls - // yamux - // mplex - // libp2p/circuit/relay ( AddRelayTranport ) - if cfg.Relay - // autonat - - - // On connect with a node, id is exchanged and the signed address record - // is added to mem (addr_book.go ConsumePeerRecord). - // By connecting to peers they learn the address, and may provide it. - // FindPeer in DHT works by connecting to the actual peer, which must implement DHT - // This is based on FIND_NODE messages. - - h, err := libp2p.New( - ctx, - finalOpts..., - ) - p2p.Host = h - log.Println("IPFS WorkloadID: ", h.ID().String()) - log.Println("IPFS Addr: ", h.Addrs()) - log.Println("IPFS CID: ", peer.ToCid(h.ID()).String()) - - if err != nil { - panic(err) - } - - h.SetStreamHandler(Protocol, streamHandler) - - if pi == nil { - cp, _ := config.DefaultBootstrapPeers() - for _, addr := range cp { - h.Connect(context.Background(), addr) - } - } else { - // Maintain connections to all added peers. - ps := NewPeeringService(h) - ps.AddPeer(*pi) - - err = h.Connect(context.Background(), *pi) - if err != nil { - log.Println("IPFS: Failed to connect to ", *pi) - } else { - log.Println("IPFS: Connected to ", *pi) - } - ps.Start() - - } - - p2p.InitEvent() - - if p2p.DHT != nil && blockInit != nil { - blockInit(p2p) - } - - //p2p.DHT.Provide(context.Background(), peer.ToCid(h.WorkloadID()), true) - return p2p -} - -// Callback to initialize IPFS file handlers. -// Not needed for gateway, only if we want to serve some files. -var blockInit func(*IPFS) - -// DHT results in a lot of connections. To debug, set a break on dial_sync (in swarm), in getActiveDial -// query.spawnQuery is causing the request -func newDHT(ctx context.Context, h host.Host, ds datastore.Batching) (*dht.IpfsDHT, error) { - dhtOpts := []dht.Option{ - dht.NamespacedValidator("pk", record.PublicKeyValidator{}), - dht.NamespacedValidator("ipns", ipns.Validator{KeyBook: h.Peerstore()}), - dht.Concurrency(10), - //dual.DHTOption(dht.Mode(dht.ModeClient)), - //dual.DHTOption(dht.DisableAutoRefresh()), - dht.QueryFilter(dht.PublicQueryFilter), - } - if ds != nil { - dhtOpts = append(dhtOpts, dht.Datastore(ds)) - } - - return dht.New(ctx, h, dhtOpts...) -} diff --git a/ugated/pkg/ipfs/peering.go b/ugated/pkg/ipfs/peering.go deleted file mode 100644 index 88c7c48..0000000 --- a/ugated/pkg/ipfs/peering.go +++ /dev/null @@ -1,295 +0,0 @@ -package ipfs - -// Based on ipfs/peering - -import ( - "context" - "errors" - "log" - "math/rand" - "sync" - "time" - - ilog "github.com/ipfs/go-log" - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/multiformats/go-multiaddr" -) - -// Seed the random number generator. -// -// We don't need good randomness, but we do need randomness. -const ( - // maxBackoff is the maximum time between reconnect attempts. - maxBackoff = 10 * time.Minute - // The backoff will be cut off when we get within 10% of the actual max. - // If we go over the max, we'll adjust the delay down to a random value - // between 90-100% of the max backoff. - maxBackoffJitter = 10 // % - connmgrTag = "ipfs-peering" - // This needs to be sufficient to prevent two sides from simultaneously - // dialing. - initialDelay = 5 * time.Second -) - -var logger = ilog.Logger("peering") - -type state int - -const ( - stateInit state = iota - stateRunning - stateStopped -) - -// peerHandler keeps track of all state related to a specific "peering" peer. -type peerHandler struct { - peer peer.ID - host host.Host - ctx context.Context - cancel context.CancelFunc - - mu sync.Mutex - addrs []multiaddr.Multiaddr - reconnectTimer *time.Timer - - nextDelay time.Duration -} - -// setAddrs sets the addresses for this peer. -func (ph *peerHandler) setAddrs(addrs []multiaddr.Multiaddr) { - // Not strictly necessary, but it helps to not trust the calling code. - addrCopy := make([]multiaddr.Multiaddr, len(addrs)) - copy(addrCopy, addrs) - - ph.mu.Lock() - defer ph.mu.Unlock() - ph.addrs = addrCopy -} - -// getAddrs returns a shared slice of addresses for this peer. Do not modify. -func (ph *peerHandler) getAddrs() []multiaddr.Multiaddr { - ph.mu.Lock() - defer ph.mu.Unlock() - return ph.addrs -} - -// stop permanently stops the peer handler. -func (ph *peerHandler) stop() { - ph.cancel() - - ph.mu.Lock() - defer ph.mu.Unlock() - if ph.reconnectTimer != nil { - ph.reconnectTimer.Stop() - ph.reconnectTimer = nil - } -} - -func (ph *peerHandler) nextBackoff() time.Duration { - if ph.nextDelay < maxBackoff { - ph.nextDelay += ph.nextDelay/2 + time.Duration(rand.Int63n(int64(ph.nextDelay))) - } - - // If we've gone over the max backoff, reduce it under the max. - if ph.nextDelay > maxBackoff { - ph.nextDelay = maxBackoff - // randomize the backoff a bit (10%). - ph.nextDelay -= time.Duration(rand.Int63n(int64(maxBackoff) * maxBackoffJitter / 100)) - } - - return ph.nextDelay -} - -func (ph *peerHandler) reconnect() { - // Try connecting - addrs := ph.getAddrs() - logger.Infow("reconnecting", "peer", ph.peer, "addrs", addrs) - - err := ph.host.Connect(ph.ctx, peer.AddrInfo{ID: ph.peer, Addrs: addrs}) - if err != nil { - logger.Infow("failed to reconnect", "peer", ph.peer, "error", err) - // Ok, we failed. Extend the timeout. - ph.mu.Lock() - if ph.reconnectTimer != nil { - // Only counts if the reconnectTimer still exists. If not, a - // connection _was_ somehow established. - ph.reconnectTimer.Reset(ph.nextBackoff()) - } - // Otherwise, someone else has stopped us so we can assume that - // we're either connected or someone else will start us. - ph.mu.Unlock() - } - - // Always call this. We could have connected since we processed the - // error. - ph.stopIfConnected() -} - -func (ph *peerHandler) stopIfConnected() { - ph.mu.Lock() - defer ph.mu.Unlock() - - if ph.reconnectTimer != nil && ph.host.Network().Connectedness(ph.peer) == network.Connected { - logger.Debugw("successfully reconnected", "peer", ph.peer) - ph.reconnectTimer.Stop() - ph.reconnectTimer = nil - ph.nextDelay = initialDelay - } -} - -// startIfDisconnected is the inverse of stopIfConnected. -func (ph *peerHandler) startIfDisconnected() { - ph.mu.Lock() - defer ph.mu.Unlock() - - if ph.reconnectTimer == nil && ph.host.Network().Connectedness(ph.peer) != network.Connected { - logger.Debugw("disconnected from peer", "peer", ph.peer) - // Always start with a short timeout so we can stagger things a bit. - ph.reconnectTimer = time.AfterFunc(ph.nextBackoff(), ph.reconnect) - } -} - -// PeeringService maintains connections to specified peers, reconnecting on -// disconnect with a back-off. -type PeeringService struct { - host host.Host - - mu sync.RWMutex - peers map[peer.ID]*peerHandler - state state -} - -// NewPeeringService constructs a new peering service. Peers can be added and -// removed immediately, but connections won't be formed until `RoundTripStart` is called. -func NewPeeringService(host host.Host) *PeeringService { - return &PeeringService{host: host, peers: make(map[peer.ID]*peerHandler)} -} - -// Start starts the peering service, connecting and maintaining connections to -// all registered peers. It returns an error if the service has already been -// stopped. -func (ps *PeeringService) Start() error { - ps.mu.Lock() - defer ps.mu.Unlock() - - switch ps.state { - case stateInit: - logger.Infow("starting") - case stateRunning: - return nil - case stateStopped: - return errors.New("already stopped") - } - ps.host.Network().Notify((*netNotifee)(ps)) - ps.state = stateRunning - for _, handler := range ps.peers { - go handler.startIfDisconnected() - } - return nil -} - -// Stop stops the peering service. -func (ps *PeeringService) Stop() error { - ps.host.Network().StopNotify((*netNotifee)(ps)) - - ps.mu.Lock() - defer ps.mu.Unlock() - - switch ps.state { - case stateInit, stateRunning: - logger.Infow("stopping") - for _, handler := range ps.peers { - handler.stop() - } - ps.state = stateStopped - } - return nil -} - -// AddPeer adds a peer to the peering service. This function may be safely -// called at any time: before the service is started, while running, or after it -// stops. -// -// StartListener peer may also be called multiple times for the same peer. The new -// addresses will replace the old. -func (ps *PeeringService) AddPeer(info peer.AddrInfo) { - ps.mu.Lock() - defer ps.mu.Unlock() - - if handler, ok := ps.peers[info.ID]; ok { - logger.Infow("updating addresses", "peer", info.ID, "addrs", info.Addrs) - handler.setAddrs(info.Addrs) - } else { - logger.Infow("peer added", "peer", info.ID, "addrs", info.Addrs) - ps.host.ConnManager().Protect(info.ID, connmgrTag) - - handler = &peerHandler{ - host: ps.host, - peer: info.ID, - addrs: info.Addrs, - nextDelay: initialDelay, - } - handler.ctx, handler.cancel = context.WithCancel(context.Background()) - ps.peers[info.ID] = handler - switch ps.state { - case stateRunning: - go handler.startIfDisconnected() - case stateStopped: - // We still construct everything in this state because - // it's easier to reason about. But we should still free - // resources. - handler.cancel() - } - } -} - -// RemovePeer removes a peer from the peering service. This function may be -// safely called at any time: before the service is started, while running, or -// after it stops. -func (ps *PeeringService) RemovePeer(id peer.ID) { - ps.mu.Lock() - defer ps.mu.Unlock() - - if handler, ok := ps.peers[id]; ok { - logger.Infow("peer removed", "peer", id) - ps.host.ConnManager().Unprotect(id, connmgrTag) - - handler.stop() - delete(ps.peers, id) - } -} - -type netNotifee PeeringService - -func (nn *netNotifee) Connected(_ network.Network, c network.Conn) { - ps := (*PeeringService)(nn) - - p := c.RemotePeer() - ps.mu.RLock() - defer ps.mu.RUnlock() - - if handler, ok := ps.peers[p]; ok { - // use a goroutine to avoid blocking events. - go handler.stopIfConnected() - } -} -func (nn *netNotifee) Disconnected(_ network.Network, c network.Conn) { - ps := (*PeeringService)(nn) - - p := c.RemotePeer() - ps.mu.RLock() - defer ps.mu.RUnlock() - - if handler, ok := ps.peers[p]; ok { - // use a goroutine to avoid blocking events. - go handler.startIfDisconnected() - } -} -func (nn *netNotifee) OpenedStream(n network.Network, s network.Stream) { - log.Println("Peering.OpenedStream", s.ID(), s.Protocol(), s.Conn().RemoteMultiaddr()) -} -func (nn *netNotifee) ClosedStream(network.Network, network.Stream) {} -func (nn *netNotifee) Listen(network.Network, multiaddr.Multiaddr) {} -func (nn *netNotifee) ListenClose(network.Network, multiaddr.Multiaddr) {} diff --git a/ugated/pkg/ipfs/proxy_stream.go b/ugated/pkg/ipfs/proxy_stream.go deleted file mode 100644 index fa7c9cb..0000000 --- a/ugated/pkg/ipfs/proxy_stream.go +++ /dev/null @@ -1,65 +0,0 @@ -package ipfs - -import ( - "bufio" - "fmt" - "log" - "net/http" - "strings" - - //"github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" -) - -const Protocol = "/ugate/0.0.1" - -func streamHandler(stream network.Stream) { - // Remember to close the stream when we are done. - defer stream.Close() - - log.Println("NEW STREAM: ", stream.Conn().RemotePeer(), stream.Conn().RemotePublicKey()) - - // Create a new buffered reader, as ReadRequest needs one. - // The buffered reader reads from our stream, on which we - // have sent the HTTP request (see ServeHTTP()) - buf := bufio.NewReader(stream) - // Read the HTTP request from the buffer - req, err := http.ReadRequest(buf) - if err != nil { - stream.Reset() - log.Println(err) - return - } - defer req.Body.Close() - - // We need to reset these fields in the request - // URL as they are not maintained. - req.URL.Scheme = "http" - hp := strings.Split(req.Host, ":") - if len(hp) > 1 && hp[1] == "443" { - req.URL.Scheme = "https" - } else { - req.URL.Scheme = "http" - } - req.URL.Host = req.Host - - outreq := new(http.Request) - *outreq = *req - - if !strings.Contains(req.URL.Host, "google") { - return - } - - // We now make the request - fmt.Printf("Making request to %s\n", req.URL) - resp, err := http.DefaultTransport.RoundTrip(outreq) - if err != nil { - stream.Reset() - log.Println(err) - return - } - - // resp.Write writes whatever response we obtained for our - // request back to the stream. - resp.Write(stream) -} diff --git a/ugated/pkg/mqtt/mqtt.go b/ugated/pkg/mqtt/mqtt.go deleted file mode 100644 index d36f67e..0000000 --- a/ugated/pkg/mqtt/mqtt.go +++ /dev/null @@ -1,34 +0,0 @@ -package mqtt - -import ( - "log" - - mqtt "github.com/mochi-co/mqtt/server" - "github.com/mochi-co/mqtt/server/listeners/auth" - - "github.com/mochi-co/mqtt/server/listeners" -) - -func InitMqtt() { - options := &mqtt.Options{ - BufferSize: 0, // Use default values - BufferBlockSize: 0, // Use default values - InflightTTL: 60 * 15, // Set an example custom 15-min TTL for inflight messages - } - - server := mqtt.NewServer(options) - tcp := listeners.NewTCP("t1", ":1883") - err := server.AddListener(tcp, &listeners.Config{ - Auth: new(auth.Allow), - }) - if err != nil { - log.Fatal(err) - } - - go func() { - err := server.Serve() - if err != nil { - log.Fatal(err) - } - }() -} diff --git a/ugated/pkg/quic/mux.go b/ugated/pkg/quic/mux.go deleted file mode 100644 index 910ccde..0000000 --- a/ugated/pkg/quic/mux.go +++ /dev/null @@ -1,182 +0,0 @@ -package quic - -import ( - "context" - //"io" - "log" - "net" - "net/http" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ugate" - "github.com/lucas-clemente/quic-go" -) - -// QuicMUX is a mux to a specific node. May be accepted or dialed. -// Equivalent with quic/h3/client.go ( when dialing ), and Quic server when accepting. -type QuicMUX struct { - // Remote - has an WorkloadID and Addr - n *ugate.Cluster - - // Can be accepted or dialed - the protocol is symmetric. - s quic.EarlyConnection - - // quic/http3 client - currently used for sending the headers. - // It is not the most efficient - for TCP we can avoid the extra DATA framing - // and use simpler headers. - rt http.RoundTripper - - // required by client - there is an extra check on the URL - hostname string - client bool -} - -var UseRawStream = true - -const errorNoError = 0x100 - -func (ugs *QuicMUX) Close() error { - if nio.DebugClose { - log.Println("H3: MUX close ", ugs.n.ID) - } - return ugs.s.CloseWithError(0, "") -} - -func (q *Quic) handleRaw(qs quic.Stream) { - str := nio.NewStream() - str.In = qs - str.Out = qs - err := str.ReadHeader(qs) - if err != nil { - log.Println("Receive error ", err) - return - } - str.Dest = str.InHeader.Get("dest") - log.Println("QUIC stream IN", str.StreamId, str.Dest) - - str.PostDialHandler = func(conn net.Conn, err error) { - str.Header().Set("status", "200") - str.SendHeader(qs, str.Header()) - log.Println("QUIC stream IN rcv", str.StreamId, str.InHeader) - } - - q.UG.HandleVirtualIN(str) - -} - -func (ugs *QuicMUX) DialStream(ctx context.Context, addr string, inStream *nio.Stream) (*nio.Stream, error) { - //if UseRawStream { - s, err := ugs.s.OpenStream() - if err != nil { - return nil, err - } - str := nio.NewStream() - // if strarts with /dm/... - str.In = s - str.Out = s - if inStream != nil && inStream.InHeader != nil { - for k, v := range inStream.InHeader { - str.Header()[k] = v - } - } - str.Header().Set("dest", addr) - err = str.SendHeader(s, str.Header()) - if err != nil { - return nil, err - } - // RoundTripStart sending - if inStream != nil { - go func() { - // Equivalent with proxyToClient. - str.CopyBuffered(s, inStream, true) - // TODO: do something on err, done - log.Println("QUIC out - copy reader close ", str.StreamId, addr) - - }() - } - - err = str.ReadHeader(s) - if err != nil { - return nil, err - } - log.Println("QUIC out stream res", str.StreamId, addr, str.InHeader) - - return str, nil - //} else { - //var in io.Reader - //var out io.WriteCloser - //if inStream == nil { - // in, out = io.Pipe() - //} else { - // in = inStream - //} - // - //// Regular TCP stream, upgraded to H2. - //// This is a simple tunnel, so use the right URL - //r1, err := http.NewRequestWithContext(ctx, "POST", - // "https://"+ugs.hostname+"/dm/"+addr, in) - // - //// RoundTrip Transport guarantees this is set - //if r1.Header == nil { - // r1.Header = make(http.Header) - //} - // - //// RT client - forward the request. - //res, err := ugs.RoundTrip(r1) - //if err != nil { - // log.Println("H2R error", addr, err) - // return nil, err - //} - // - //rs := nio.NewStreamRequestOut(r1, out, res, nil) - //if nio.DebugClose { - // log.Println("TUN: ", addr, r1.URL) - //} - //return rs, nil - - //} -} - -// RoundTrip is used for forwarding HTTP connections back to the client (normal) or -// server ( reverse ). -func (ugs *QuicMUX) RoundTrip(request *http.Request) (*http.Response, error) { - // make sure the request will be accepted - request.URL.Scheme = "https" - request.URL.Host = ugs.hostname - if nio.DebugClose { - if ugs.n != nil { - log.Println("H3: RT-start", ugs.n.ID, request.URL, ugs.client) - } else { - log.Println("H3: RT-start", request.URL, ugs.client) - } - } - var res *http.Response - var err error - if ugs.rt != nil { - res, err = ugs.rt.RoundTrip(request) - } else { - // Replacement for the lack of support in QUIC for using the H3 request programmatically. - // This only works with h3s servers. - s := nio.NewStream() - s.Request = request - s.In = request.Body - rs, err1 := ugs.DialStream(request.Context(), request.URL.Host, s) - if err1 != nil { - return nil, err1 - } - res = &http.Response{ - Body: rs.In, - Header: rs.InHeader, - } - } - if nio.DebugClose { - log.Println("H3: RT-done", request.URL, ugs.client, err) - if err == nil { - go func() { - <-request.Context().Done() - log.Println("H3: RT-ctx-done", request.URL) - }() - } - } - return res, err -} diff --git a/ugated/ugate_core.go b/ugated/ugate_core.go index 0524968..156ec5f 100644 --- a/ugated/ugate_core.go +++ b/ugated/ugate_core.go @@ -1,30 +1,366 @@ -//go:build !MIN -// +build !MIN - package ugated import ( - "fmt" + "context" + "crypto/tls" + "io" + "log" + "net" + "net/http" + "strconv" + "time" + "github.com/costinm/meshauth" + sshd "github.com/costinm/ssh-mesh" + "github.com/costinm/ssh-mesh/nio" + "github.com/costinm/ssh-mesh/nio/syscall" + "github.com/costinm/ssh-mesh/sshdebug" "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/http_proxy" - "github.com/costinm/ugate/pkg/socks" + "github.com/costinm/ugate/pkg/dns" + echo "github.com/costinm/ugate/pkg/echo" + "github.com/costinm/ugate/pkg/quic" + "github.com/costinm/ugate/pkg/sni" "github.com/costinm/ugate/pkg/udp" - "github.com/costinm/ugate/pkg/ugatesvc" + "golang.org/x/net/http2" + "golang.org/x/net/http2/h2c" + + "github.com/costinm/ugate/pkg/http_proxy" ) -func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - // Init DNS capture and server, as well as explicit forwarders. - // This is a core functionality, like TCP forwarding. - // UDP Gate is used with TProxy and lwIP. - udp.New(ug) - // Core functionalty - http and socks local forwarding. +const ( + // Offsets from BasePort for the default ports. + + PORT_IPTABLES = 1 + PORT_IPTABLES_IN = 6 + PORT_SOCKS = 5 + PORT_DNS = 3 + // SNI and HTTP could share the same port - would also + // reduce missconfig risks + PORT_HTTP_PROXY = 2 + + // TLS/SNI, HTTPS (no client certs) + PORT_HTTPS = 4 + + // H2, HTTPS, H2R + PORT_BTS = 7 + + // H2C + PORT_BTSC = 8 + + PORT_MQTT = 9 +) + + +// Init will configure the core modules. +// Other files in this package may intialize optional modules +func Init(ug *ugate.UGate) { + // sni is the istio-style e-w gateway, blindly forwarding. + ug.ListenerProto["sni"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + sh := &sni.SNIHandler{ + UGate: ug, + } + nio.ListenAndServe(ll.Address, func(conn net.Conn) { + sh.HandleConn(conn) + }) + return nil + } + + // TLS and https ports - can be 443 or a special port. + ug.ListenerProto["tls"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + nio.ListenAndServe(ll.Address, func(conn net.Conn) { + s := nio.NewBufferReader(conn) + defer conn.Close() + defer s.Buffer.Recycle() + + cn, sni, err := nio.SniffClientHello(s) + if err != nil { + return + } + if cn == nil { + // First bytes are not TLS + return + } + + log.Println("Got SNI", sni) + + // TODO: match against hostnames to get the cert (if any), else look for TLS forwarding rules. + + }) + return nil + } + + // hbone is a HTTPS listener exposing forwarding and other mesh functions, typically on the main port. + // + ug.ListenerProto["hbone"] = func(gate *ugate.UGate, ll *meshauth.PortListener) (err error) { + ll.NetListener, err = nio.ListenAndServe(ll.Address, func(conn net.Conn) { + if ug.TCPUserTimeout != 0 { + syscall.SetTCPUserTimeout(conn, ug.TCPUserTimeout) + } + + conf := ug.Auth.GenerateTLSConfigServer(true) + defer conn.Close() + tlsConn := tls.Server(conn, conf) + ctx, cf := context.WithTimeout(context.Background(), 3 * time.Second) + defer cf() + + err := tlsConn.HandshakeContext(ctx) + if err != nil { + return + } + + alpn := tlsConn.ConnectionState().NegotiatedProtocol + if alpn != "h2" { + log.Println("Invalid alpn") + } + h2s := &http2.Server{ + + } + + h2s.ServeConn(conn, &http2.ServeConnOpts{ + Handler: ug.H2Handler, + Context: context.Background(), + //Context: // can be used to cancel, pass meta. + // h2 adds http.LocalAddrContextKey(NetAddr), ServerContextKey (*Server) + }) + }) + return + } + + // Core functionalty - http local forwarding. + ug.ListenerProto["http_proxy"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { hproxy := http_proxy.NewHTTPProxy(ug) - hproxy.HttpProxyCapture(fmt.Sprintf("127.0.0.1:%d", ug.Config.BasePort+ugate.PORT_HTTP_PROXY)) + hproxy.HttpProxyCapture(l.Address) + return nil + } + + + // TODO: virtual listener - not listening but capable of handling tunneled connections. + + ug.ListenerProto["http"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + // TODO: separate mux for each listener, based on routes + + // TODO: populate options based on listener options + h2s := &http2.Server{ + //MaxHandlers: 0, + //MaxConcurrentStreams: 0, + //MaxDecoderHeaderTableSize: 0, + //MaxEncoderHeaderTableSize: 0, + //MaxReadFrameSize: 0, + //PermitProhibitedCipherSuites: false, + //IdleTimeout: 0, + //MaxUploadBufferPerConnection: 0, + //MaxUploadBufferPerStream: 0, + //NewWriteScheduler: nil, + //CountError: nil, + } + + // implements the H2C protocol - detects requests with PRI and proto HTTP/2.0 and Upgrade - and calls + // ServeConn. + // + // Otherwise, HTTP/1.1 is used. + h2ch := h2c.NewHandler(ug.Mux, h2s) + + //h2s.ServeConn(nil, &http2.ServeConnOpts{ + // Context: nil, + // BaseConfig: nil, + // Handler: nil, + // UpgradeRequest: nil, + // Settings: nil, + // SawClientPreface: false, + //}) + + // TODO: add if hb.TCPUserTimeout != 0 { + // // only for TCPConn - if this is used for tls no effect + // syscall.SetTCPUserTimeout(conn, hb.TCPUserTimeout) + // } - socks.New(ug) + return http.ListenAndServe(ll.Address, h2ch) + } + + ug.ListenerProto["hbonec"] = ug.ListenerProto["http"] + + ug.ListenerProto["tproxy"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { + ll, err := nio.IptablesCapture(l.Address, func(c net.Conn, destA, la *net.TCPAddr) { + //ctx := context.Background() + //t0 := time.Now() + //dest := destA.String() + + //nc, err := ug.Dial("tcp", dest) + //if err != nil { + // slog.Info("tproxy dial error", "dest", dest, "err", err) + // return + //} + // + //util.Proxy(c, nc, nc, dest) + c.Write([]byte("hi")) + c.Close() + return + }) + l.NetListener = ll + return err + } + + ug.ListenerProto["socks"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { + ll, err := nio.Sock5Capture(l.Address, func(s *nio.Socks, c net.Conn) { + //t0 := time.Now() + dest := s.Dest + if dest == "" { + dest = s.DestAddr.String() + } + nc, err := ug.Dial("tcp", s.Dest) + if err != nil { + s.PostDialHandler(nil, err) + return + } + s.PostDialHandler(nc.LocalAddr(), nil) + + nio.Proxy(nc, c, c, s.Dest) + return + + //pp, err := sshTransport.Proxy(ctx, dest, c) + //if err != nil { + // slog.Info("SocksDialError", "err", err, "dest", dest) + //} + // + //go func() { + // pp.ProxyTo(c) + // slog.Info("socks", + // "to", dest, + // "dur", time.Since(t0), + // //"dial", pp.sch.RemoteAddr(), + // "in", pp.InBytes, + // "out", pp.OutBytes, + // "ierr", pp.InErr, + // "oerr", pp.OutErr) + //}() + // + }) + l.NetListener = ll + return err + + } + + ug.ListenerProto["udp"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { + // Core functionalty - http local forwarding. + uh := udp.New(ug, l) + uh.Listener(l) + log.Println("uGate: listen UDP ", l.Address, l.ForwardTo) + return nil + } + + ug.ListenerProto["admin"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + go func() { + err := http.ListenAndServe(":"+strconv.Itoa(int(ll.Port)), http.DefaultServeMux) + if err != nil { + log.Fatal(err) + } + }() + return nil + } + + ug.ListenerProto["tproxy_udp"] = func(gate *ugate.UGate, l *meshauth.PortListener) error { + ul := udp.New(ug, l) + utp, err := udp.StartUDPTProxyListener6(int(l.Port)) + if utp != nil { + go udp.UDPAccept(utp, ul.HandleUdp) + } + + return err + } + + ug.ListenerProto["ssh"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + gate.SSHConfig.Address = ll.Address + sshTransport, err := sshd.NewSSHMesh(&gate.SSHConfig) + if err != nil { + return err + } + + // Start internal SSHD/SFTP, only admin can connect. + // Better option is to install dropbear and start real sshd. + // Will probably remove this - useful for static binary + sshTransport.ChannelHandlers["session"] = sshdebug.SessionHandler + //st.ChannelHandlers["session"] = sshd.SessionHandler + + sshTransport.Forward = func(ctx context.Context, host string, closer io.ReadWriteCloser) { + str := nio.GetStream(closer, closer) + defer ug.OnStreamDone(str) + ug.OnStream(str) + + str.Dest = host + //str.Direction = ugatesvc.StreamTypeOut + // TODO: add sniffing on the outbound + + nc, err := ug.DialContext(ctx, "tcp", str.Dest) + if err != nil { + return + } + + nio.Proxy(nc, str, str, str.Dest) + //defer nc.Close() + //str.ProxyTo(nc) + } + + sshTransport.StayConnected(context.Background()) + + go sshTransport.Start() return nil + } + + ug.ListenerProto["tcp"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + if ll.ForwardTo == "" { + log.Println("No route", ll.Address) + } + l, err := net.Listen("tcp", ll.Address) + if err != nil { + return err + } + go func() { + for { + a, err := l.Accept() + if err != nil { + log.Println("Error accepting", err) + return + } + go func() { + a := a + + ctx := context.Background() + + nc, err := ug.DialContext(ctx, "", ll.ForwardTo) + if err != nil { + log.Println("RoundTripStart error", ll.ForwardTo, err) + a.Close() + return + } + err = nio.Proxy(nc, a, a, ll.ForwardTo) + if err != nil { + log.Println("FWD", ll.Address, a.RemoteAddr(), err) + } else { + log.Println("FWD", ll.Address, a.RemoteAddr()) + } + }() + } + }() + return nil + } + + dnss, _ := dns.NewDmDns(ug.BasePort + 3) // 5223 + + net.DefaultResolver.PreferGo = true + net.DefaultResolver.Dial = dns.DNSDialer(ug.BasePort + 3) + + ug.DNS = dnss + ug.Mux.Handle("/dns/", dnss) + + ug.StartFunctions = append(ug.StartFunctions, func(ug *ugate.UGate) { + go dnss.Serve() }) + + + ug.ListenerProto["echo"] = echo.EchoPortHandler + + quic.InitQuic(ug) + } + diff --git a/ugated/ugate_dns.go b/ugated/ugate_dns.go deleted file mode 100644 index b1318cc..0000000 --- a/ugated/ugate_dns.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:build !MIN -// +build !MIN - -package ugated - -import ( - "net" - - "github.com/costinm/ugate/dns" - "github.com/costinm/ugate/pkg/ugatesvc" -) - -func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - dnss, _ := dns.NewDmDns(5223) - //GW. = dnss - net.DefaultResolver.PreferGo = true - net.DefaultResolver.Dial = dns.DNSDialer(5223) - - ug.DNS = dnss - return func(ug *ugatesvc.UGate) { - go dnss.Serve() - } - }) -} diff --git a/ugated/ugate_h2r.go b/ugated/ugate_h2r.go index e9ae8a9..44637bb 100644 --- a/ugated/ugate_h2r.go +++ b/ugated/ugate_h2r.go @@ -1,17 +1,13 @@ -//go:build !MIN -// +build !MIN - package ugated import ( - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/ugated/pkg/h2r" + "github.com/costinm/ugate" + "github.com/costinm/ugate/pkg/h2r" ) func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { + ugate.Modules["h2r"] = func(ug *ugate.UGate) { // Registers 'h2r' as a mux dialer, /h2r/ as a handler h2r.New(ug) - return nil - }) + } } diff --git a/ugated/ugate_iptables.go b/ugated/ugate_iptables.go deleted file mode 100644 index 26d74c7..0000000 --- a/ugated/ugate_iptables.go +++ /dev/null @@ -1,23 +0,0 @@ -//go:build !MIN -// +build !MIN - -package ugated - -import ( - "fmt" - - "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/iptables" - "github.com/costinm/ugate/pkg/ugatesvc" -) - -// Istio style iptables on 15001 (out) and 15006 (in) -func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - // Init Iptables capture (off by default - android doesn't like it) - // Not on localhost - redirect changes the port, keeps IP - go iptables.IptablesCapture(ug, fmt.Sprintf("0.0.0.0:%d", ug.Config.BasePort+ugate.PORT_IPTABLES), false) - go iptables.IptablesCapture(ug, fmt.Sprintf("0.0.0.0:%d", ug.Config.BasePort+ugate.PORT_IPTABLES_IN), true) - return nil - }) -} diff --git a/ugated/ugate_local.go b/ugated/ugate_local.go index 57fc1d7..44c5dfa 100644 --- a/ugated/ugate_local.go +++ b/ugated/ugate_local.go @@ -4,22 +4,21 @@ package ugated import ( - "os" - + "github.com/costinm/ugate" "github.com/costinm/ugate/pkg/local" - "github.com/costinm/ugate/pkg/ugatesvc" ) +// Multicast discovery of local nodes. +// func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - if os.Getenv("UGATE_LOCAL") == "" { - return nil - } + ugate.Modules["local"] = func(ug *ugate.UGate) { // Discover local nodes using multicast UDP - localgw := local.NewLocal(ug, ug.Auth) + if len(ug.Auth.PublicKey) != 65 { + // Only works for EC256 keys + return + } + localgw := local.NewLocal(ug.BasePort+8, ug.Auth) local.ListenUDP(localgw) - go localgw.PeriodicThread() ug.Mux.HandleFunc("/dmesh/ll/if", localgw.HttpGetLLIf) - return nil - }) + } } diff --git a/ugated/ugate_lwip.go b/ugated/ugate_lwip.go index e6fd435..1c25ce3 100644 --- a/ugated/ugate_lwip.go +++ b/ugated/ugate_lwip.go @@ -1,4 +1,5 @@ -// x+build lwip +//go:build !nolwip +// +build !nolwip package ugated @@ -7,9 +8,9 @@ import ( "log" "os" + "github.com/costinm/ugate" + "github.com/costinm/ugate/pkg/ext/lwip" "github.com/costinm/ugate/pkg/udp" - "github.com/costinm/ugate/pkg/ugatesvc" - tun "github.com/costinm/ugate/ugated/pkg/lwip" "github.com/songgao/water" ) @@ -29,24 +30,25 @@ func openTunLWIP(ifn string) (io.ReadWriteCloser, error) { return ifce.ReadWriteCloser, nil } +// init() will load LWIP if dmesh0 is present +// +// sudo ip tuntap add dev dmesh0 mode tun user build func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { + ugate.Modules["lwip"] = func(ug *ugate.UGate) { dev := os.Getenv("LWIP") if dev == "" { - return nil + dev = "dmesh0" + //return nil } fd, err := openTunLWIP(dev) if err != nil { - return nil + return } log.Println("Using LWIP tun", dev) - return func(ug *ugatesvc.UGate) { - t := tun.NewTUNFD(fd, ug, ug.UDPHandler) - udp.TransparentUDPWriter = t - } - return func(ug *ugatesvc.UGate) { - } - }) + t := lwip.NewTUNFD(fd, ug, ug) + // Use the TUN for transparent UDP write ? + udp.TransparentUDPWriter = t + } } diff --git a/ugated/ugate_mqtt.go b/ugated/ugate_mqtt.go new file mode 100644 index 0000000..c90b61c --- /dev/null +++ b/ugated/ugate_mqtt.go @@ -0,0 +1,101 @@ +package ugated + +import ( + "fmt" + + "github.com/costinm/meshauth" + "github.com/costinm/ugate" + mqtt "github.com/mochi-co/mqtt/server" + "github.com/mochi-co/mqtt/server/events" + "github.com/mochi-co/mqtt/server/listeners" + "github.com/mochi-co/mqtt/server/listeners/auth" + "golang.org/x/exp/slog" +) + +type MqttServer struct { +} + +// mochi is a server for mqtt, using bolt DB for persistence. +// paho is the client. Depends on gorilla/websocket only. + +/* +Other servers exist - for example: + - mosquitto + -emqx - with gateways to stomp,coap,LwM2M, http + - multiple brokers, 2M/node + - API to list nodes, load info for each + - API for clients, subs + - /api/v4/mqtt/publish -topic(s),clientid,payload,retain,properties(expiry) + - nanomq - bridge with cloud mqtt, zeromq, nanomsg,nng +*/ + +func init() { + ugate.Modules["mqtt"] = func(gate *ugate.UGate) { + gate.ListenerProto["mqtt"] = func(gate *ugate.UGate, ll *meshauth.PortListener) error { + options := &mqtt.Options{ + BufferSize: 0, // Use default values + BufferBlockSize: 0, // Use default values + InflightTTL: 60 * 15, // Set an example custom 15-min TTL for inflight messages + } + + server := mqtt.NewServer(options) + + // TODO: all hbone listeners, direct + tcp := listeners.NewTCP("t1", ll.Address) + err := server.AddListener(tcp, &listeners.Config{ + Auth: new(auth.Allow), + }) + if err != nil { + slog.Info("starting mqtt", "err", err) + return err + } + + server.Events.OnConnect = func(client events.Client, packet events.Packet) { + slog.Info("mqtt-connect", "id", client.ID, + "packet", packet) + } + server.Events.OnDisconnect = func(client events.Client, err error) { + slog.Info("mqtt-connect", "id", client.ID, + "err", err) + } + + server.Events.OnSubscribe = func(filter string, cl events.Client, qos byte) { + fmt.Printf("<< OnSubscribe client subscribed %s: %s %v\n", cl.ID, filter, qos) + } + + server.Events.OnUnsubscribe = func(filter string, cl events.Client) { + fmt.Printf("<< OnUnsubscribe client unsubscribed %s: %s\n", cl.ID, filter) + } + + // Add OnMessage Event Hook + server.Events.OnMessage = func(cl events.Client, pk events.Packet) (pkx events.Packet, err error) { + pkx = pk + if string(pk.Payload) == "hello" { + pkx.Payload = []byte("hello world") + fmt.Printf("< OnMessage modified message from client %s: %s\n", cl.ID, string(pkx.Payload)) + } else { + fmt.Printf("< OnMessage received message from client %s: %s\n", cl.ID, string(pkx.Payload)) + } + + // Example of using AllowClients to selectively deliver/drop messages. + // Only a client with the id of `allowed-client` will received messages on the topic. + if pkx.TopicName == "a/b/restricted" { + pkx.AllowClients = []string{"allowed-client"} // slice of known client ids + } + + return pkx, nil + } + + server.Publish("direct/publish", []byte("scheduled message"), true) + + go func() { + err := server.Serve() + if err != nil { + slog.Info("starting mqtt", "err", err) + } + + }() + return nil + } + } +} diff --git a/ugated/ugate_quic.go b/ugated/ugate_quic.go deleted file mode 100644 index 47d150a..0000000 --- a/ugated/ugate_quic.go +++ /dev/null @@ -1,8 +0,0 @@ -//go:build !MIN -// +build !MIN - -package ugated - -import ( - _ "github.com/costinm/ugate/ugated/pkg/quic" -) diff --git a/ugated/ugate_ssh.go b/ugated/ugate_ssh.go deleted file mode 100644 index e85f4cd..0000000 --- a/ugated/ugate_ssh.go +++ /dev/null @@ -1,56 +0,0 @@ -package ugated - -import ( - "context" - "crypto/ecdsa" - "io" - "net" - - "github.com/costinm/hbone/nio" - "github.com/costinm/ssh-mesh/ssh" - "github.com/costinm/ugate/pkg/ugatesvc" - gossh "golang.org/x/crypto/ssh" -) - -func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - ca := &ssh.SSHCA{} - // TODO: if CA_ADDR set get certs from remote - // if root CA present - act as a CA - ca.LoadRoot(ug.Auth.Cert.PrivateKey.(*ecdsa.PrivateKey)) - - signer, _ := gossh.NewSignerFromKey(ug.Auth.Cert.PrivateKey) - - qa, _ := ssh.NewSSHTransport(&ssh.TransportConfig{ - SignerHost: signer, - SignerClient: signer, - }) - - // Forward requests use ugate Dialer. - qa.Forward = func(ctx context.Context, host string, closer io.ReadWriteCloser) { - str := nio.GetStream(closer, closer) - defer ug.OnStreamDone(str) - ug.OnStream(str) - - str.Dest = host - str.Direction = nio.StreamTypeOut - str.PostDialHandler = func(conn net.Conn, err error) { - if err != nil { - //w.WriteHeader(503) - //w.Write([]byte("RoundTripStart error" + err.Error())) - return - } - //proxyClient.Write([]byte("HTTP/1.0 200 OK\r\n\r\n")) - } - // TODO: add sniffing on the outbound - - ug.DialAndProxy(str) - } - - // TODO: hook hbone - forward connections to other side. - - return func(ug *ugatesvc.UGate) { - qa.Start() - } - }) -} diff --git a/ugated/ugate_webrtc.go b/ugated/ugate_webrtc.go index 2e79022..e91dc2b 100644 --- a/ugated/ugate_webrtc.go +++ b/ugated/ugate_webrtc.go @@ -1,18 +1,13 @@ package ugated import ( - "os" + "github.com/costinm/ugate" - "github.com/costinm/ugate/pkg/ugatesvc" - "github.com/costinm/ugate/ugated/pkg/webrtc" + "github.com/costinm/ugate/pkg/webrtc" ) func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { - if os.Getenv("UGATE_RTC") == "" { - return nil - } + ugate.Modules["webrtc"] = func(ug *ugate.UGate) { go webrtc.InitWebRTCS(ug, ug.Auth) - return nil - }) + } } diff --git a/ugated/ugate_ws.go b/ugated/ugate_ws.go index 1dfe978..cf851bf 100644 --- a/ugated/ugate_ws.go +++ b/ugated/ugate_ws.go @@ -3,30 +3,35 @@ package ugated import ( "net/http" - "github.com/costinm/ugate/pkg/ugatesvc" + "github.com/costinm/ugate" + "github.com/gorilla/websocket" ) func init() { - ugatesvc.InitHooks = append(ugatesvc.InitHooks, func(ug *ugatesvc.UGate) ugatesvc.StartFunc { + ugate.Modules["ws"] = func(ug *ugate.UGate) { w := &ws{ug: ug} ug.Mux.Handle("/ws/", w) - - return nil - }) + } } type ws struct { - ug *ugatesvc.UGate + ug *ugate.UGate } // Integrate with Websocket as a server, equvalent with a connect. // This can also be used for SSH over WS instead of HTTPS over WS. func (ws *ws) ServeHTTP(w http.ResponseWriter, r *http.Request) { u := websocket.Upgrader{} - u.Upgrade(w, r, http.Header{}) - + nc, err := u.Upgrade(w, r, http.Header{}) + if err != nil { + w.WriteHeader(500) + return + } + // nc is a raw connection - we still have access to headers. + // For now - just start a SSH connection over ws + nc.Close() } // "golang.org/x/net/websocket" - not supported. RoundTripStart only text frames. diff --git a/webpush/README.md b/webpush/README.md index 4691d4b..5092d15 100644 --- a/webpush/README.md +++ b/webpush/README.md @@ -2,20 +2,32 @@ ## Goals -- support authenticated e2e encrypted messages, for control plane and data plane -- communication between the control plane components, including in-process and same node -- interop with Istio/XDS, CNCF, pubsub, etc +- support push and pubsub using authenticated, e2e encrypted messages + - for data plane, abstracting other pubsub mechanisms or providing minimal storage-less delivery + - for control plane, for distributing config without maintaining long-lived connections. + - interop with Istio/XDS, CNCF, pubsub, etc + +The main design idea is that in a 'mesh' or VPC, each workload (Pod, VM) that subscribes +to a topic is directly reachable. + +This is effectively the same as Webhooks - but using Webpush encryption and auth for +messages that cross multiple hops. + +A per-node agent - similar to Istio Ambient - can handle the crypto and security and +directly send messages to the pod, with network policy restricting the port. ## API -- like CNCF, the 'core' is based on HTTP interface and Mux +- like CNCF Eventing, Webhooks, CloudRun pubsub - the 'core' is based on HTTP interface. - messages are http requests with encrypted body and JWT auth (VAPID) - message 'envelope' - headers, url is not encrypted, treated as a request ## Receiving messages -- each client implements the regular push protocol, acting as server -- reverse H2 over H2, websocket or WebRTC can be used to send. +- each subscriber (client) implements the regular push protocol, acting as Webpush server +- it is assumed that some infrastructure or transport can handle hanging GET equivalent, + outside of the scope of this package. The requirement is that messages are injected as + if the broker/infra made a HTTP call to the subscriber. ## Topics diff --git a/webpush/gate.go b/webpush/gate.go index 3d1a424..f7973ee 100644 --- a/webpush/gate.go +++ b/webpush/gate.go @@ -196,8 +196,8 @@ func (mc *MsgConnection) Close() { // if ev.Time == 0 { // ev.Time = time.Now().Unix() // } -// if ev.Id == "" { -// ev.Id = mux.Id() +// if ev.muxID == "" { +// ev.muxID = mux.muxID() // } // parts := strings.Split(ev.To, "/") // diff --git a/webpush/http.go b/webpush/http.go index 5541711..5eb0d36 100644 --- a/webpush/http.go +++ b/webpush/http.go @@ -12,6 +12,9 @@ import ( "github.com/costinm/meshauth" ) +// Basic HTTP interfaces for a minimal webpush server. +// + type Backoff interface { BackoffSleep() BackoffReset() @@ -91,7 +94,7 @@ func (mux *Mux) HTTPHandlerWebpush(w http.ResponseWriter, r *http.Request) { dest := parts[2] if dest == "" || dest == mux.Auth.Name || dest == mux.Auth.Self() { - ec := meshauth.NewContextUA(mux.Auth.Priv, mux.Auth.PublicKey, SharedWPAuth) + ec := meshauth.NewWebpushDecryption(mux.Auth.EC256Key, mux.Auth.PublicKey, SharedWPAuth) b, err := ioutil.ReadAll(r.Body) if err != nil { w.WriteHeader(http.StatusInternalServerError) @@ -136,7 +139,7 @@ func (mux *Mux) HTTPHandlerWebpush(w http.ResponseWriter, r *http.Request) { mux.HandleMessageForNode(ev) } else { - // Dest is remote, we're just forwarding. + // MeshCluster is remote, we're just forwarding. } @@ -178,41 +181,18 @@ type UA struct { PushService string } -// Subscription holds the useful values from a PushSubscription object acquired -// from the browser. -// -// https://w3c.github.io/push-api/ -// -// Returned as result of /subscribe -type Subscription struct { - // Endpoint is the URL to send the Web Push message to. Comes from the - // endpoint field of the PushSubscription. - Endpoint string - - // Key is the client's public key. From the getKey("p256dh") or keys.p256dh field. - Key []byte - - // Auth is a value used by the client to validate the encryption. From the - // keys.auth field. - // The encrypted aes128gcm will have 16 bytes authentication tag derived from this. - // This is the pre-shared authentication secret. - Auth []byte - - // Used by the UA to receive messages, as PUSH promises - Location string -} // Create a subscription, using the Webpush standard protocol. // // URL is "/subscribe", no header required ( but passing a VAPID or mtls), // response in 'location' for read and Link for sub endpoint. -func (ua *UA) Subscribe() (sub *Subscription, err error) { +func (ua *UA) Subscribe() (sub *meshauth.Subscription, err error) { res, err := http.Post(ua.PushService+"/subscribe", "text/plain", nil) if err != nil { return } - sub = &Subscription{} + sub = &meshauth.Subscription{} sub.Location = res.Header.Get("location") links := textproto.MIMEHeader(res.Header)["Link"] for _, l := range links { diff --git a/webpush/message.go b/webpush/message.go index 7a1057d..6ae8fd9 100644 --- a/webpush/message.go +++ b/webpush/message.go @@ -19,8 +19,6 @@ import ( // On Android side - this is a set of Messages. // Similar: k8s events - rich interface. -// TODO: use grpc library to push, maybe to istio mixer access log - // logrus // glog // zapcore: @@ -60,7 +58,7 @@ type Message struct { //Time int64 `json:"time,omitempty"` // //// WorkloadID of event, to dedup. Included as meta 'id' - //Id string `json:"id,omitempty"` + //muxID string `json:"id,omitempty"` // //// Original destination - can be a group/topic or individual URL //// Called 'type' in cloud events, 'topic' in pubsub. diff --git a/webpush/mux.go b/webpush/mux.go index 14b60d8..95fa020 100644 --- a/webpush/mux.go +++ b/webpush/mux.go @@ -54,7 +54,7 @@ type Mux struct { // http request can be mapped to a Send (not supported yet). ServeMux *http.ServeMux - // Auth holds the private key and Id of this node. Used to encrypt and decrypt. + // Auth holds the private key and muxID of this node. Used to encrypt and decrypt. Auth *meshauth.MeshAuth } diff --git a/webpush/push.go b/webpush/push.go index 042f9e5..d946795 100644 --- a/webpush/push.go +++ b/webpush/push.go @@ -3,12 +3,10 @@ package webpush import ( "bytes" "encoding/base64" - "encoding/json" "fmt" "io/ioutil" "net/http" "strconv" - "strings" "github.com/costinm/meshauth" ) @@ -79,7 +77,7 @@ func NewRequest(dest string, key, authK []byte, // If there is no payload then we don't actually need encryption if message != "" { - ec := meshauth.NewContextSend(key, authK) + ec := meshauth.NewWebpushEncryption(key, authK) payload, err := ec.Encrypt([]byte(message)) if err != nil { return nil, err @@ -96,37 +94,6 @@ func NewRequest(dest string, key, authK []byte, return req, nil } -// SubscriptionFromJSON is a convenience function that takes a JSON encoded -// PushSubscription object acquired from the browser and returns a pointer to a -// node. -func SubscriptionFromJSON(b []byte) (*Subscription, error) { - var sub struct { - Endpoint string - Keys struct { - P256dh string - Auth string - } - } - if err := json.Unmarshal(b, &sub); err != nil { - return nil, err - } - - b64 := base64.URLEncoding.WithPadding(base64.NoPadding) - - // Chrome < 52 incorrectly adds padding when Base64 encoding the values, so - // we need to strip that out - key, err := b64.DecodeString(strings.TrimRight(sub.Keys.P256dh, "=")) - if err != nil { - return nil, err - } - - auth, err := b64.DecodeString(strings.TrimRight(sub.Keys.Auth, "=")) - if err != nil { - return nil, err - } - - return &Subscription{sub.Endpoint, key, auth, ""}, nil -} //// Send a message using the Web Push protocol to the recipient identified by the //// given subscription object. If the client is nil then the default HTTP client diff --git a/webpush/push_test.go b/webpush/push_test.go index bd7aee9..b527b6d 100644 --- a/webpush/push_test.go +++ b/webpush/push_test.go @@ -93,7 +93,7 @@ func TestSendWebPush(t *testing.T) { t.Errorf("Expected Encryption header to have a salt field, got %v", request.Header.Get("Encryption")) } - dc := meshauth.NewContextUA(privkeySub, uaPublic, authSecret) + dc := meshauth.NewWebpushDecryption(privkeySub, uaPublic, authSecret) plain, err := dc.Decrypt(body) if err != nil { @@ -114,7 +114,7 @@ func TestSendWebPush(t *testing.T) { //sub := &Subscription{ts.URL, key, a, ""} message := "I am the walrus" - vapid := meshauth.NewAuth("", "") + vapid := meshauth.NewMeshAuth(nil).InitSelfSigned("") pushReq, err := NewRequest(ts.URL+"/push/", uaPublic, authSecret, message, 0, vapid) if err != nil { t.Fatal(err) @@ -157,7 +157,7 @@ func TestSendTickle(t *testing.T) { //sub := &Subscription{Endpoint: ts.URL} - vapid := meshauth.NewAuth("", "") + vapid := meshauth.NewMeshAuth(nil).InitSelfSigned("") pushReq, err := NewRequest(ts.URL+"/push/", nil, nil, "", 0, vapid) if err != nil { t.Error(err) diff --git a/webpush/realpush_test.go b/webpush/realpush_test.go index 4428b7b..0eb9598 100644 --- a/webpush/realpush_test.go +++ b/webpush/realpush_test.go @@ -30,16 +30,16 @@ func xTestFirefox(t *testing.T) { func send(t *testing.T, epjson string) { ep := []byte(epjson) - sub, err := SubscriptionFromJSON(ep) + sub, err := meshauth.SubscriptionFromJSON(ep) if err != nil { t.Error(err) } message := "I am the testing walrus" - vapid := meshauth.NewMeshAuth() - vapid.SetVapid(vapidPub, vapidPriv) + vapid := meshauth.NewMeshAuth(&meshauth.MeshCfg{EC256Pub: vapidPub, EC256Key: vapidPriv}) vapid.Name = "test@example.com" + req, err := NewRequest(sub.Endpoint, sub.Key, sub.Auth, message, 0, vapid) res, err := http.DefaultClient.Do(req)