Full Code of cilium/proxy for AI

main c2aa94df2bf1 cached
1507 files
22.5 MB
6.0M tokens
121979 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (23,994K chars total). Download the full file to get everything.
Repository: cilium/proxy
Branch: main
Commit: c2aa94df2bf1
Files: 1507
Total size: 22.5 MB

Directory structure:
gitextract__yn3lawc/

├── .bazelrc
├── .bazelversion
├── .clang-format
├── .clang-tidy
├── .clangd
├── .github/
│   ├── CODEOWNERS
│   ├── renovate.json5
│   └── workflows/
│       ├── build-envoy-image-ci.yaml
│       ├── build-envoy-images-release-base.yaml
│       ├── build-envoy-images-release-debug.yaml
│       ├── build-envoy-images-release.yaml
│       ├── ci-check-format.yaml
│       ├── ci-tests.yaml
│       ├── cilium-gateway-api.yaml
│       ├── cilium-integration-tests.yaml
│       ├── codeql.yml
│       ├── renovate-config-validator.yaml
│       └── wait-for-image/
│           └── action.yaml
├── .gitignore
├── BUILD
├── CODEOWNERS
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.builder
├── Dockerfile.tests
├── ENVOY_VERSION
├── LICENSE
├── Makefile
├── Makefile.api
├── Makefile.defs
├── Makefile.dev
├── Makefile.docker
├── Makefile.quiet
├── README.md
├── UPGRADE_ENVOY.md
├── Vagrantfile
├── WORKSPACE
├── bazel/
│   ├── BUILD
│   ├── get_workspace_status
│   ├── local_llvm.bzl
│   ├── platform_mappings
│   ├── setup_clang.sh
│   └── toolchains/
│       ├── BUILD
│       └── cc_toolchain_config.bzl
├── cilium/
│   ├── BUILD
│   ├── accesslog.cc
│   ├── accesslog.h
│   ├── api/
│   │   ├── BUILD
│   │   ├── accesslog.proto
│   │   ├── bpf_metadata.proto
│   │   ├── health_check_sink.proto
│   │   ├── l7policy.proto
│   │   ├── network_filter.proto
│   │   ├── npds.proto
│   │   ├── nphds.proto
│   │   ├── tls_wrapper.proto
│   │   └── websocket.proto
│   ├── bpf.cc
│   ├── bpf.h
│   ├── bpf_metadata.cc
│   ├── bpf_metadata.h
│   ├── conntrack.cc
│   ├── conntrack.h
│   ├── filter_state_cilium_destination.cc
│   ├── filter_state_cilium_destination.h
│   ├── filter_state_cilium_policy.cc
│   ├── filter_state_cilium_policy.h
│   ├── grpc_subscription.cc
│   ├── grpc_subscription.h
│   ├── health_check_sink.cc
│   ├── health_check_sink.h
│   ├── host_map.cc
│   ├── host_map.h
│   ├── ipcache.cc
│   ├── ipcache.h
│   ├── l7policy.cc
│   ├── l7policy.h
│   ├── network_filter.cc
│   ├── network_filter.h
│   ├── network_policy.cc
│   ├── network_policy.h
│   ├── policy_id.h
│   ├── privileged_service_client.cc
│   ├── privileged_service_client.h
│   ├── proxylib.cc
│   ├── proxylib.h
│   ├── secret_watcher.cc
│   ├── secret_watcher.h
│   ├── socket_option_cilium_mark.cc
│   ├── socket_option_cilium_mark.h
│   ├── socket_option_ip_transparent.cc
│   ├── socket_option_ip_transparent.h
│   ├── socket_option_source_address.cc
│   ├── socket_option_source_address.h
│   ├── tls_wrapper.cc
│   ├── tls_wrapper.h
│   ├── uds_client.cc
│   ├── uds_client.h
│   ├── websocket.cc
│   ├── websocket.h
│   ├── websocket_codec.cc
│   ├── websocket_codec.h
│   ├── websocket_config.cc
│   ├── websocket_config.h
│   └── websocket_protocol.h
├── envoy.bazelrc
├── envoy_binary_test.sh
├── envoy_build_config/
│   ├── BUILD
│   ├── WORKSPACE
│   └── extensions_build_config.bzl
├── go/
│   ├── README.md
│   └── cilium/
│       └── api/
│           ├── accesslog.go
│           ├── accesslog.pb.go
│           ├── accesslog.pb.validate.go
│           ├── bpf_metadata.pb.go
│           ├── bpf_metadata.pb.validate.go
│           ├── health_check_sink.pb.go
│           ├── health_check_sink.pb.validate.go
│           ├── l7policy.pb.go
│           ├── l7policy.pb.validate.go
│           ├── network_filter.pb.go
│           ├── network_filter.pb.validate.go
│           ├── npds.pb.go
│           ├── npds.pb.validate.go
│           ├── npds_grpc.pb.go
│           ├── nphds.pb.go
│           ├── nphds.pb.validate.go
│           ├── nphds_grpc.pb.go
│           ├── tls_wrapper.pb.go
│           ├── tls_wrapper.pb.validate.go
│           ├── websocket.pb.go
│           └── websocket.pb.validate.go
├── go.mod
├── go.sum
├── linux/
│   ├── bpf.h
│   ├── bpf_common.h
│   └── type_mapper.h
├── patches/
│   ├── 0001-network-Add-callback-for-upstream-authorization.patch
│   ├── 0002-listener-add-socket-options.patch
│   ├── 0003-original_dst_cluster-Avoid-multiple-hosts-for-the-sa.patch
│   ├── 0004-thread_local-reset-slot-in-worker-threads-first.patch
│   ├── 0005-http-header-expose-attribute.patch
│   ├── 0006-test-integration-Defer-fake-upstream-read-enable-un.patch
│   ├── 0008-repo-Make-yq-dependency-optional-for-CI-config-parsi.patch
│   └── BUILD
├── pkg/
│   └── policy/
│       └── api/
│           └── kafka/
│               ├── doc.go
│               ├── kafka.go
│               └── zz_generated.deepequal.go
├── proxylib/
│   ├── BUILD
│   ├── Makefile
│   ├── accesslog/
│   │   └── client.go
│   ├── cassandra/
│   │   ├── cassandraparser.go
│   │   └── cassandraparser_test.go
│   ├── kafka/
│   │   ├── kafkalib/
│   │   │   ├── doc.go
│   │   │   ├── error.go
│   │   │   ├── policy.go
│   │   │   ├── policy_test.go
│   │   │   ├── request.go
│   │   │   └── response.go
│   │   ├── parser.go
│   │   └── parser_test.go
│   ├── libcilium/
│   │   ├── helpers_test.go
│   │   ├── proxylib.go
│   │   ├── proxylib_memcached_test.go
│   │   └── proxylib_test.go
│   ├── libcilium.h
│   ├── memcached/
│   │   ├── binary/
│   │   │   ├── parser.go
│   │   │   └── parser_test.go
│   │   ├── meta/
│   │   │   └── meta.go
│   │   ├── parser.go
│   │   └── text/
│   │       └── parser.go
│   ├── npds/
│   │   ├── backoff.go
│   │   └── client.go
│   ├── proxylib/
│   │   ├── connection.go
│   │   ├── input_test.go
│   │   ├── instance.go
│   │   ├── parserfactory.go
│   │   ├── policymap.go
│   │   ├── reader.go
│   │   ├── test_util.go
│   │   └── types.go
│   ├── proxylib.go
│   ├── r2d2/
│   │   ├── r2d2parser.go
│   │   └── r2d2parser_test.go
│   ├── test/
│   │   ├── accesslog_server.go
│   │   └── tmpdir.go
│   ├── testparsers/
│   │   ├── blockparser.go
│   │   ├── headerparser.go
│   │   ├── headerparser.policy
│   │   ├── lineparser.go
│   │   └── passer.go
│   └── types.h
├── starter/
│   ├── BUILD
│   ├── main.cc
│   ├── privileged_service_protocol.cc
│   ├── privileged_service_protocol.h
│   ├── privileged_service_server.cc
│   └── privileged_service_server.h
├── tests/
│   ├── BUILD
│   ├── accesslog_server.cc
│   ├── accesslog_server.h
│   ├── accesslog_test.cc
│   ├── bpf_metadata.cc
│   ├── bpf_metadata.h
│   ├── bpf_metadata.proto
│   ├── bpf_metadata_config_test.cc
│   ├── bpf_metadata_integration_test.cc
│   ├── cilium_http_integration.cc
│   ├── cilium_http_integration.h
│   ├── cilium_http_integration_test.cc
│   ├── cilium_http_upstream_integration_test.cc
│   ├── cilium_network_policy_test.cc
│   ├── cilium_tcp_integration.cc
│   ├── cilium_tcp_integration.h
│   ├── cilium_tcp_integration_test.cc
│   ├── cilium_tls_http_integration_test.cc
│   ├── cilium_tls_integration.cc
│   ├── cilium_tls_integration.h
│   ├── cilium_tls_tcp_integration_test.cc
│   ├── cilium_websocket_codec_integration_test.cc
│   ├── cilium_websocket_decap_integration_test.cc
│   ├── cilium_websocket_encap_integration_test.cc
│   ├── cilium_websocket_policy_integration_test.cc
│   ├── health_check_sink_server.cc
│   ├── health_check_sink_server.h
│   ├── health_check_sink_test.cc
│   ├── uds_server.cc
│   └── uds_server.h
├── tools/
│   ├── BUILD
│   ├── check_repositories.sh
│   ├── code_format/
│   │   └── config.yaml
│   ├── gen_compilation_database.py
│   ├── install_bazelisk.sh
│   ├── push_manifest.sh
│   ├── stack_decode.py
│   └── update_version_matrix.sh
└── vendor/
    ├── cel.dev/
    │   └── expr/
    │       ├── .bazelversion
    │       ├── .gitignore
    │       ├── BUILD.bazel
    │       ├── CODE_OF_CONDUCT.md
    │       ├── CONTRIBUTING.md
    │       ├── GOVERNANCE.md
    │       ├── LICENSE
    │       ├── MAINTAINERS.md
    │       ├── MODULE.bazel
    │       ├── README.md
    │       ├── WORKSPACE
    │       ├── WORKSPACE.bzlmod
    │       ├── checked.pb.go
    │       ├── cloudbuild.yaml
    │       ├── eval.pb.go
    │       ├── explain.pb.go
    │       ├── regen_go_proto.sh
    │       ├── regen_go_proto_canonical_protos.sh
    │       ├── syntax.pb.go
    │       └── value.pb.go
    ├── github.com/
    │   ├── cilium/
    │   │   └── kafka/
    │   │       ├── LICENSE
    │   │       └── proto/
    │   │           ├── doc.go
    │   │           ├── errors.go
    │   │           ├── messages.go
    │   │           ├── serialization.go
    │   │           ├── snappy.go
    │   │           └── utils.go
    │   ├── cncf/
    │   │   └── xds/
    │   │       └── go/
    │   │           ├── LICENSE
    │   │           ├── udpa/
    │   │           │   └── annotations/
    │   │           │       ├── migrate.pb.go
    │   │           │       ├── migrate.pb.validate.go
    │   │           │       ├── security.pb.go
    │   │           │       ├── security.pb.validate.go
    │   │           │       ├── sensitive.pb.go
    │   │           │       ├── sensitive.pb.validate.go
    │   │           │       ├── status.pb.go
    │   │           │       ├── status.pb.validate.go
    │   │           │       ├── versioning.pb.go
    │   │           │       └── versioning.pb.validate.go
    │   │           └── xds/
    │   │               ├── annotations/
    │   │               │   └── v3/
    │   │               │       ├── migrate.pb.go
    │   │               │       ├── migrate.pb.validate.go
    │   │               │       ├── security.pb.go
    │   │               │       ├── security.pb.validate.go
    │   │               │       ├── sensitive.pb.go
    │   │               │       ├── sensitive.pb.validate.go
    │   │               │       ├── status.pb.go
    │   │               │       ├── status.pb.validate.go
    │   │               │       ├── versioning.pb.go
    │   │               │       └── versioning.pb.validate.go
    │   │               ├── core/
    │   │               │   └── v3/
    │   │               │       ├── authority.pb.go
    │   │               │       ├── authority.pb.validate.go
    │   │               │       ├── cidr.pb.go
    │   │               │       ├── cidr.pb.validate.go
    │   │               │       ├── collection_entry.pb.go
    │   │               │       ├── collection_entry.pb.validate.go
    │   │               │       ├── context_params.pb.go
    │   │               │       ├── context_params.pb.validate.go
    │   │               │       ├── extension.pb.go
    │   │               │       ├── extension.pb.validate.go
    │   │               │       ├── resource.pb.go
    │   │               │       ├── resource.pb.validate.go
    │   │               │       ├── resource_locator.pb.go
    │   │               │       ├── resource_locator.pb.validate.go
    │   │               │       ├── resource_name.pb.go
    │   │               │       └── resource_name.pb.validate.go
    │   │               └── type/
    │   │                   ├── matcher/
    │   │                   │   └── v3/
    │   │                   │       ├── cel.pb.go
    │   │                   │       ├── cel.pb.validate.go
    │   │                   │       ├── domain.pb.go
    │   │                   │       ├── domain.pb.validate.go
    │   │                   │       ├── http_inputs.pb.go
    │   │                   │       ├── http_inputs.pb.validate.go
    │   │                   │       ├── ip.pb.go
    │   │                   │       ├── ip.pb.validate.go
    │   │                   │       ├── matcher.pb.go
    │   │                   │       ├── matcher.pb.validate.go
    │   │                   │       ├── range.pb.go
    │   │                   │       ├── range.pb.validate.go
    │   │                   │       ├── regex.pb.go
    │   │                   │       ├── regex.pb.validate.go
    │   │                   │       ├── string.pb.go
    │   │                   │       └── string.pb.validate.go
    │   │                   └── v3/
    │   │                       ├── cel.pb.go
    │   │                       ├── cel.pb.validate.go
    │   │                       ├── range.pb.go
    │   │                       ├── range.pb.validate.go
    │   │                       ├── typed_struct.pb.go
    │   │                       └── typed_struct.pb.validate.go
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── envoyproxy/
    │   │   ├── go-control-plane/
    │   │   │   └── envoy/
    │   │   │       ├── LICENSE
    │   │   │       ├── annotations/
    │   │   │       │   ├── deprecation.pb.go
    │   │   │       │   ├── deprecation.pb.validate.go
    │   │   │       │   ├── resource.pb.go
    │   │   │       │   ├── resource.pb.validate.go
    │   │   │       │   └── resource_vtproto.pb.go
    │   │   │       ├── config/
    │   │   │       │   ├── common/
    │   │   │       │   │   └── mutation_rules/
    │   │   │       │   │       └── v3/
    │   │   │       │   │           ├── mutation_rules.pb.go
    │   │   │       │   │           ├── mutation_rules.pb.validate.go
    │   │   │       │   │           └── mutation_rules_vtproto.pb.go
    │   │   │       │   ├── core/
    │   │   │       │   │   └── v3/
    │   │   │       │   │       ├── address.pb.go
    │   │   │       │   │       ├── address.pb.validate.go
    │   │   │       │   │       ├── address_vtproto.pb.go
    │   │   │       │   │       ├── backoff.pb.go
    │   │   │       │   │       ├── backoff.pb.validate.go
    │   │   │       │   │       ├── backoff_vtproto.pb.go
    │   │   │       │   │       ├── base.pb.go
    │   │   │       │   │       ├── base.pb.validate.go
    │   │   │       │   │       ├── base_vtproto.pb.go
    │   │   │       │   │       ├── cel.pb.go
    │   │   │       │   │       ├── cel.pb.validate.go
    │   │   │       │   │       ├── cel_vtproto.pb.go
    │   │   │       │   │       ├── config_source.pb.go
    │   │   │       │   │       ├── config_source.pb.validate.go
    │   │   │       │   │       ├── config_source_vtproto.pb.go
    │   │   │       │   │       ├── event_service_config.pb.go
    │   │   │       │   │       ├── event_service_config.pb.validate.go
    │   │   │       │   │       ├── event_service_config_vtproto.pb.go
    │   │   │       │   │       ├── extension.pb.go
    │   │   │       │   │       ├── extension.pb.validate.go
    │   │   │       │   │       ├── extension_vtproto.pb.go
    │   │   │       │   │       ├── grpc_method_list.pb.go
    │   │   │       │   │       ├── grpc_method_list.pb.validate.go
    │   │   │       │   │       ├── grpc_method_list_vtproto.pb.go
    │   │   │       │   │       ├── grpc_service.pb.go
    │   │   │       │   │       ├── grpc_service.pb.validate.go
    │   │   │       │   │       ├── grpc_service_vtproto.pb.go
    │   │   │       │   │       ├── health_check.pb.go
    │   │   │       │   │       ├── health_check.pb.validate.go
    │   │   │       │   │       ├── health_check_vtproto.pb.go
    │   │   │       │   │       ├── http_service.pb.go
    │   │   │       │   │       ├── http_service.pb.validate.go
    │   │   │       │   │       ├── http_service_vtproto.pb.go
    │   │   │       │   │       ├── http_uri.pb.go
    │   │   │       │   │       ├── http_uri.pb.validate.go
    │   │   │       │   │       ├── http_uri_vtproto.pb.go
    │   │   │       │   │       ├── protocol.pb.go
    │   │   │       │   │       ├── protocol.pb.validate.go
    │   │   │       │   │       ├── protocol_vtproto.pb.go
    │   │   │       │   │       ├── proxy_protocol.pb.go
    │   │   │       │   │       ├── proxy_protocol.pb.validate.go
    │   │   │       │   │       ├── proxy_protocol_vtproto.pb.go
    │   │   │       │   │       ├── resolver.pb.go
    │   │   │       │   │       ├── resolver.pb.validate.go
    │   │   │       │   │       ├── resolver_vtproto.pb.go
    │   │   │       │   │       ├── socket_cmsg_headers.pb.go
    │   │   │       │   │       ├── socket_cmsg_headers.pb.validate.go
    │   │   │       │   │       ├── socket_cmsg_headers_vtproto.pb.go
    │   │   │       │   │       ├── socket_option.pb.go
    │   │   │       │   │       ├── socket_option.pb.validate.go
    │   │   │       │   │       ├── socket_option_vtproto.pb.go
    │   │   │       │   │       ├── substitution_format_string.pb.go
    │   │   │       │   │       ├── substitution_format_string.pb.validate.go
    │   │   │       │   │       ├── substitution_format_string_vtproto.pb.go
    │   │   │       │   │       ├── udp_socket_config.pb.go
    │   │   │       │   │       ├── udp_socket_config.pb.validate.go
    │   │   │       │   │       └── udp_socket_config_vtproto.pb.go
    │   │   │       │   └── route/
    │   │   │       │       └── v3/
    │   │   │       │           ├── route.pb.go
    │   │   │       │           ├── route.pb.validate.go
    │   │   │       │           ├── route_components.pb.go
    │   │   │       │           ├── route_components.pb.validate.go
    │   │   │       │           ├── route_components_vtproto.pb.go
    │   │   │       │           ├── route_vtproto.pb.go
    │   │   │       │           ├── scoped_route.pb.go
    │   │   │       │           ├── scoped_route.pb.validate.go
    │   │   │       │           └── scoped_route_vtproto.pb.go
    │   │   │       ├── service/
    │   │   │       │   └── discovery/
    │   │   │       │       └── v3/
    │   │   │       │           ├── ads.pb.go
    │   │   │       │           ├── ads.pb.validate.go
    │   │   │       │           ├── ads_grpc.pb.go
    │   │   │       │           ├── ads_vtproto.pb.go
    │   │   │       │           ├── discovery.pb.go
    │   │   │       │           ├── discovery.pb.validate.go
    │   │   │       │           └── discovery_vtproto.pb.go
    │   │   │       └── type/
    │   │   │           ├── matcher/
    │   │   │           │   └── v3/
    │   │   │           │       ├── address.pb.go
    │   │   │           │       ├── address.pb.validate.go
    │   │   │           │       ├── address_vtproto.pb.go
    │   │   │           │       ├── filter_state.pb.go
    │   │   │           │       ├── filter_state.pb.validate.go
    │   │   │           │       ├── filter_state_vtproto.pb.go
    │   │   │           │       ├── http_inputs.pb.go
    │   │   │           │       ├── http_inputs.pb.validate.go
    │   │   │           │       ├── http_inputs_vtproto.pb.go
    │   │   │           │       ├── metadata.pb.go
    │   │   │           │       ├── metadata.pb.validate.go
    │   │   │           │       ├── metadata_vtproto.pb.go
    │   │   │           │       ├── node.pb.go
    │   │   │           │       ├── node.pb.validate.go
    │   │   │           │       ├── node_vtproto.pb.go
    │   │   │           │       ├── number.pb.go
    │   │   │           │       ├── number.pb.validate.go
    │   │   │           │       ├── number_vtproto.pb.go
    │   │   │           │       ├── path.pb.go
    │   │   │           │       ├── path.pb.validate.go
    │   │   │           │       ├── path_vtproto.pb.go
    │   │   │           │       ├── regex.pb.go
    │   │   │           │       ├── regex.pb.validate.go
    │   │   │           │       ├── regex_vtproto.pb.go
    │   │   │           │       ├── status_code_input.pb.go
    │   │   │           │       ├── status_code_input.pb.validate.go
    │   │   │           │       ├── status_code_input_vtproto.pb.go
    │   │   │           │       ├── string.pb.go
    │   │   │           │       ├── string.pb.validate.go
    │   │   │           │       ├── string_vtproto.pb.go
    │   │   │           │       ├── struct.pb.go
    │   │   │           │       ├── struct.pb.validate.go
    │   │   │           │       ├── struct_vtproto.pb.go
    │   │   │           │       ├── value.pb.go
    │   │   │           │       ├── value.pb.validate.go
    │   │   │           │       └── value_vtproto.pb.go
    │   │   │           ├── metadata/
    │   │   │           │   └── v3/
    │   │   │           │       ├── metadata.pb.go
    │   │   │           │       ├── metadata.pb.validate.go
    │   │   │           │       └── metadata_vtproto.pb.go
    │   │   │           ├── tracing/
    │   │   │           │   └── v3/
    │   │   │           │       ├── custom_tag.pb.go
    │   │   │           │       ├── custom_tag.pb.validate.go
    │   │   │           │       └── custom_tag_vtproto.pb.go
    │   │   │           └── v3/
    │   │   │               ├── hash_policy.pb.go
    │   │   │               ├── hash_policy.pb.validate.go
    │   │   │               ├── hash_policy_vtproto.pb.go
    │   │   │               ├── http.pb.go
    │   │   │               ├── http.pb.validate.go
    │   │   │               ├── http_status.pb.go
    │   │   │               ├── http_status.pb.validate.go
    │   │   │               ├── http_status_vtproto.pb.go
    │   │   │               ├── percent.pb.go
    │   │   │               ├── percent.pb.validate.go
    │   │   │               ├── percent_vtproto.pb.go
    │   │   │               ├── range.pb.go
    │   │   │               ├── range.pb.validate.go
    │   │   │               ├── range_vtproto.pb.go
    │   │   │               ├── ratelimit_strategy.pb.go
    │   │   │               ├── ratelimit_strategy.pb.validate.go
    │   │   │               ├── ratelimit_strategy_vtproto.pb.go
    │   │   │               ├── ratelimit_unit.pb.go
    │   │   │               ├── ratelimit_unit.pb.validate.go
    │   │   │               ├── semantic_version.pb.go
    │   │   │               ├── semantic_version.pb.validate.go
    │   │   │               ├── semantic_version_vtproto.pb.go
    │   │   │               ├── token_bucket.pb.go
    │   │   │               ├── token_bucket.pb.validate.go
    │   │   │               └── token_bucket_vtproto.pb.go
    │   │   └── protoc-gen-validate/
    │   │       ├── .bazelrc
    │   │       ├── .bazelversion
    │   │       ├── .clang-format
    │   │       ├── .gitignore
    │   │       ├── BUILD.bazel
    │   │       ├── Dockerfile
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── Next.mk
    │   │       ├── README.md
    │   │       ├── Tools.mk
    │   │       ├── WORKSPACE
    │   │       ├── dependencies.bzl
    │   │       ├── main.go
    │   │       ├── module/
    │   │       │   ├── BUILD
    │   │       │   ├── checker.go
    │   │       │   └── validate.go
    │   │       ├── requirements.txt
    │   │       ├── rule_comparison.md
    │   │       ├── templates/
    │   │       │   ├── BUILD.bazel
    │   │       │   ├── cc/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── const.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── in.go
    │   │       │   │   ├── known.go
    │   │       │   │   ├── ltgt.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── ccnop/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── file.go
    │   │       │   │   └── register.go
    │   │       │   ├── go/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── required.go
    │   │       │   │   └── timestamp.go
    │   │       │   ├── goshared/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── const.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── in.go
    │   │       │   │   ├── known.go
    │   │       │   │   ├── ltgt.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── java/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bool.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── oneof.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── required.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── pkg.go
    │   │       │   └── shared/
    │   │       │       ├── BUILD.bazel
    │   │       │       ├── context.go
    │   │       │       ├── disabled.go
    │   │       │       ├── enums.go
    │   │       │       ├── functions.go
    │   │       │       ├── reflection.go
    │   │       │       └── well_known.go
    │   │       ├── tools.go
    │   │       └── validate/
    │   │           ├── BUILD
    │   │           ├── validate.h
    │   │           ├── validate.pb.go
    │   │           └── validate.proto
    │   ├── golang/
    │   │   └── snappy/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README
    │   │       ├── decode.go
    │   │       ├── decode_amd64.s
    │   │       ├── decode_arm64.s
    │   │       ├── decode_asm.go
    │   │       ├── decode_other.go
    │   │       ├── encode.go
    │   │       ├── encode_amd64.s
    │   │       ├── encode_arm64.s
    │   │       ├── encode_asm.go
    │   │       ├── encode_other.go
    │   │       └── snappy.go
    │   ├── iancoleman/
    │   │   └── strcase/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── acronyms.go
    │   │       ├── camel.go
    │   │       ├── doc.go
    │   │       └── snake.go
    │   ├── planetscale/
    │   │   └── vtprotobuf/
    │   │       ├── LICENSE
    │   │       ├── protohelpers/
    │   │       │   └── protohelpers.go
    │   │       └── types/
    │   │           └── known/
    │   │               ├── anypb/
    │   │               │   └── any_vtproto.pb.go
    │   │               ├── durationpb/
    │   │               │   └── duration_vtproto.pb.go
    │   │               ├── emptypb/
    │   │               │   └── empty_vtproto.pb.go
    │   │               ├── structpb/
    │   │               │   └── struct_vtproto.pb.go
    │   │               └── wrapperspb/
    │   │                   └── wrappers_vtproto.pb.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── spf13/
    │   │   └── afero/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.txt
    │   │       ├── README.md
    │   │       ├── afero.go
    │   │       ├── appveyor.yml
    │   │       ├── basepath.go
    │   │       ├── cacheOnReadFs.go
    │   │       ├── const_bsds.go
    │   │       ├── const_win_unix.go
    │   │       ├── copyOnWriteFs.go
    │   │       ├── httpFs.go
    │   │       ├── internal/
    │   │       │   └── common/
    │   │       │       └── adapters.go
    │   │       ├── iofs.go
    │   │       ├── ioutil.go
    │   │       ├── lstater.go
    │   │       ├── match.go
    │   │       ├── mem/
    │   │       │   ├── dir.go
    │   │       │   ├── dirmap.go
    │   │       │   └── file.go
    │   │       ├── memmap.go
    │   │       ├── os.go
    │   │       ├── path.go
    │   │       ├── readonlyfs.go
    │   │       ├── regexpfs.go
    │   │       ├── symlink.go
    │   │       ├── unionFile.go
    │   │       └── util.go
    │   └── stretchr/
    │       └── testify/
    │           ├── LICENSE
    │           ├── assert/
    │           │   ├── assertion_compare.go
    │           │   ├── assertion_format.go
    │           │   ├── assertion_format.go.tmpl
    │           │   ├── assertion_forward.go
    │           │   ├── assertion_forward.go.tmpl
    │           │   ├── assertion_order.go
    │           │   ├── assertions.go
    │           │   ├── doc.go
    │           │   ├── errors.go
    │           │   ├── forward_assertions.go
    │           │   ├── http_assertions.go
    │           │   └── yaml/
    │           │       ├── yaml_custom.go
    │           │       ├── yaml_default.go
    │           │       └── yaml_fail.go
    │           └── require/
    │               ├── doc.go
    │               ├── forward_requirements.go
    │               ├── require.go
    │               ├── require.go.tmpl
    │               ├── require_forward.go
    │               ├── require_forward.go.tmpl
    │               └── requirements.go
    ├── golang.org/
    │   └── x/
    │       ├── mod/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── internal/
    │       │   │   └── lazyregexp/
    │       │   │       └── lazyre.go
    │       │   ├── module/
    │       │   │   ├── module.go
    │       │   │   └── pseudo.go
    │       │   └── semver/
    │       │       └── semver.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── context/
    │       │   │   └── context.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── client_priority_go126.go
    │       │   │   ├── client_priority_go127.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go125.go
    │       │   │   ├── config_go126.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority_rfc7540.go
    │       │   │   ├── writesched_priority_rfc9218.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   ├── httpsfv/
    │       │   │   │   └── httpsfv.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   └── trace/
    │       │       ├── events.go
    │       │       ├── histogram.go
    │       │       └── trace.go
    │       ├── sync/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── errgroup/
    │       │       └── errgroup.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       └── bidirule.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables17.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables17.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           ├── go/
    │           │   └── ast/
    │           │       └── astutil/
    │           │           ├── enclosing.go
    │           │           ├── imports.go
    │           │           ├── rewrite.go
    │           │           └── util.go
    │           ├── imports/
    │           │   └── forward.go
    │           └── internal/
    │               ├── event/
    │               │   ├── core/
    │               │   │   ├── event.go
    │               │   │   ├── export.go
    │               │   │   └── fast.go
    │               │   ├── doc.go
    │               │   ├── event.go
    │               │   ├── keys/
    │               │   │   ├── keys.go
    │               │   │   ├── standard.go
    │               │   │   └── util.go
    │               │   └── label/
    │               │       └── label.go
    │               ├── gocommand/
    │               │   ├── invoke.go
    │               │   ├── invoke_notunix.go
    │               │   ├── invoke_unix.go
    │               │   ├── vendor.go
    │               │   └── version.go
    │               ├── gopathwalk/
    │               │   └── walk.go
    │               ├── imports/
    │               │   ├── fix.go
    │               │   ├── imports.go
    │               │   ├── mod.go
    │               │   ├── mod_cache.go
    │               │   ├── sortimports.go
    │               │   ├── source.go
    │               │   ├── source_env.go
    │               │   └── source_modindex.go
    │               ├── modindex/
    │               │   ├── directories.go
    │               │   ├── index.go
    │               │   ├── lookup.go
    │               │   ├── modindex.go
    │               │   └── symbols.go
    │               └── stdlib/
    │                   ├── deps.go
    │                   ├── import.go
    │                   ├── manifest.go
    │                   └── stdlib.go
    ├── google.golang.org/
    │   ├── genproto/
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   ├── LICENSE
    │   │       │   ├── annotations/
    │   │       │   │   ├── annotations.pb.go
    │   │       │   │   ├── client.pb.go
    │   │       │   │   ├── field_behavior.pb.go
    │   │       │   │   ├── field_info.pb.go
    │   │       │   │   ├── http.pb.go
    │   │       │   │   ├── resource.pb.go
    │   │       │   │   └── routing.pb.go
    │   │       │   ├── expr/
    │   │       │   │   └── v1alpha1/
    │   │       │   │       ├── checked.pb.go
    │   │       │   │       ├── eval.pb.go
    │   │       │   │       ├── explain.pb.go
    │   │       │   │       ├── syntax.pb.go
    │   │       │   │       └── value.pb.go
    │   │       │   └── launch_stage.pb.go
    │   │       └── rpc/
    │   │           ├── LICENSE
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── AUTHORS
    │   │   ├── CODE-OF-CONDUCT.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── GOVERNANCE.md
    │   │   ├── LICENSE
    │   │   ├── MAINTAINERS.md
    │   │   ├── Makefile
    │   │   ├── NOTICE.txt
    │   │   ├── README.md
    │   │   ├── SECURITY.md
    │   │   ├── attributes/
    │   │   │   └── attributes.go
    │   │   ├── backoff/
    │   │   │   └── backoff.go
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   ├── conn_state_evaluator.go
    │   │   │   ├── endpointsharding/
    │   │   │   │   └── endpointsharding.go
    │   │   │   ├── grpclb/
    │   │   │   │   └── state/
    │   │   │   │       └── state.go
    │   │   │   ├── pickfirst/
    │   │   │   │   ├── internal/
    │   │   │   │   │   └── internal.go
    │   │   │   │   └── pickfirst.go
    │   │   │   ├── roundrobin/
    │   │   │   │   └── roundrobin.go
    │   │   │   └── subconn.go
    │   │   ├── balancer_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── channelz/
    │   │   │   └── channelz.go
    │   │   ├── clientconn.go
    │   │   ├── cmd/
    │   │   │   └── protoc-gen-go-grpc/
    │   │   │       ├── LICENSE
    │   │   │       ├── README.md
    │   │   │       ├── grpc.go
    │   │   │       ├── main.go
    │   │   │       └── protoc-gen-go-grpc_test.sh
    │   │   ├── codec.go
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   ├── insecure/
    │   │   │   │   └── insecure.go
    │   │   │   └── tls.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   ├── encoding_v2.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── experimental/
    │   │   │   └── stats/
    │   │   │       ├── metricregistry.go
    │   │   │       └── metrics.go
    │   │   ├── grpclog/
    │   │   │   ├── component.go
    │   │   │   ├── grpclog.go
    │   │   │   ├── internal/
    │   │   │   │   ├── grpclog.go
    │   │   │   │   ├── logger.go
    │   │   │   │   └── loggerv2.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── balancer/
    │   │   │   │   ├── gracefulswitch/
    │   │   │   │   │   ├── config.go
    │   │   │   │   │   └── gracefulswitch.go
    │   │   │   │   └── weight/
    │   │   │   │       └── weight.go
    │   │   │   ├── balancerload/
    │   │   │   │   └── load.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   └── sink.go
    │   │   │   ├── buffer/
    │   │   │   │   └── unbounded.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── channel.go
    │   │   │   │   ├── channelmap.go
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── logging.go
    │   │   │   │   ├── server.go
    │   │   │   │   ├── socket.go
    │   │   │   │   ├── subchannel.go
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   ├── syscall_nonlinux.go
    │   │   │   │   └── trace.go
    │   │   │   ├── credentials/
    │   │   │   │   ├── credentials.go
    │   │   │   │   ├── spiffe.go
    │   │   │   │   ├── syscallconn.go
    │   │   │   │   └── util.go
    │   │   │   ├── envconfig/
    │   │   │   │   ├── envconfig.go
    │   │   │   │   ├── observability.go
    │   │   │   │   └── xds.go
    │   │   │   ├── experimental.go
    │   │   │   ├── grpclog/
    │   │   │   │   └── prefix_logger.go
    │   │   │   ├── grpcsync/
    │   │   │   │   ├── callback_serializer.go
    │   │   │   │   ├── event.go
    │   │   │   │   └── pubsub.go
    │   │   │   ├── grpcutil/
    │   │   │   │   ├── compressor.go
    │   │   │   │   ├── encode_duration.go
    │   │   │   │   ├── grpcutil.go
    │   │   │   │   ├── metadata.go
    │   │   │   │   ├── method.go
    │   │   │   │   └── regex.go
    │   │   │   ├── idle/
    │   │   │   │   └── idle.go
    │   │   │   ├── internal.go
    │   │   │   ├── mem/
    │   │   │   │   └── buffer_pool.go
    │   │   │   ├── metadata/
    │   │   │   │   └── metadata.go
    │   │   │   ├── pretty/
    │   │   │   │   └── pretty.go
    │   │   │   ├── proxyattributes/
    │   │   │   │   └── proxyattributes.go
    │   │   │   ├── resolver/
    │   │   │   │   ├── config_selector.go
    │   │   │   │   ├── delegatingresolver/
    │   │   │   │   │   └── delegatingresolver.go
    │   │   │   │   ├── dns/
    │   │   │   │   │   ├── dns_resolver.go
    │   │   │   │   │   └── internal/
    │   │   │   │   │       └── internal.go
    │   │   │   │   ├── passthrough/
    │   │   │   │   │   └── passthrough.go
    │   │   │   │   └── unix/
    │   │   │   │       └── unix.go
    │   │   │   ├── serviceconfig/
    │   │   │   │   ├── duration.go
    │   │   │   │   └── serviceconfig.go
    │   │   │   ├── stats/
    │   │   │   │   ├── labels.go
    │   │   │   │   ├── metrics_recorder_list.go
    │   │   │   │   └── stats.go
    │   │   │   ├── status/
    │   │   │   │   └── status.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   ├── tcp_keepalive_others.go
    │   │   │   ├── tcp_keepalive_unix.go
    │   │   │   ├── tcp_keepalive_windows.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── client_stream.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── logging.go
    │   │   │       ├── networktype/
    │   │   │       │   └── networktype.go
    │   │   │       ├── proxy.go
    │   │   │       ├── readyreader/
    │   │   │       │   ├── raw_conn_linux.go
    │   │   │       │   ├── raw_conn_nonlinux.go
    │   │   │       │   └── ready_reader.go
    │   │   │       ├── server_stream.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── mem/
    │   │   │   ├── buffer_pool.go
    │   │   │   ├── buffer_slice.go
    │   │   │   └── buffers.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── preloader.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── map.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── serviceconfig/
    │   │   │   └── serviceconfig.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   ├── metrics.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── stream_interfaces.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── trace_notrace.go
    │   │   ├── trace_withtrace.go
    │   │   └── version.go
    │   └── protobuf/
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── cmd/
    │       │   └── protoc-gen-go/
    │       │       ├── internal_gengo/
    │       │       │   ├── init.go
    │       │       │   ├── init_opaque.go
    │       │       │   ├── main.go
    │       │       │   ├── opaque.go
    │       │       │   ├── reflect.go
    │       │       │   └── well_known_types.go
    │       │       └── main.go
    │       ├── compiler/
    │       │   └── protogen/
    │       │       ├── protogen.go
    │       │       ├── protogen_apilevel.go
    │       │       └── protogen_opaque.go
    │       ├── encoding/
    │       │   ├── protojson/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   ├── encode.go
    │       │   │   └── well_known_types.go
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── editiondefaults/
    │       │   │   ├── defaults.go
    │       │   │   └── editions_defaults.binpb
    │       │   ├── editionssupport/
    │       │   │   └── editions.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── json/
    │       │   │   │   ├── decode.go
    │       │   │   │   ├── decode_number.go
    │       │   │   │   ├── decode_string.go
    │       │   │   │   ├── decode_token.go
    │       │   │   │   └── encode.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   └── errors.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   ├── editions.go
    │       │   │   ├── placeholder.go
    │       │   │   └── presence.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── go_features_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── name.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── api_export_opaque.go
    │       │   │   ├── bitmap.go
    │       │   │   ├── bitmap_race.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_field_opaque.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_message_opaque.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── equal.go
    │       │   │   ├── extension.go
    │       │   │   ├── lazy.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_opaque.go
    │       │   │   ├── message_opaque_gen.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_field_gen.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── pointer_unsafe_opaque.go
    │       │   │   ├── presence.go
    │       │   │   └── validate.go
    │       │   ├── msgfmt/
    │       │   │   └── format.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── protolazy/
    │       │   │   ├── bufferreader.go
    │       │   │   ├── lazy.go
    │       │   │   └── pointer_unsafe.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   ├── wrapperopaque.go
    │       │   └── wrappers.go
    │       ├── protoadapt/
    │       │   └── convert.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   ├── editions.go
    │       │   │   └── proto.go
    │       │   ├── protopath/
    │       │   │   ├── path.go
    │       │   │   └── step.go
    │       │   ├── protorange/
    │       │   │   └── range.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_equal.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           ├── dynamicpb/
    │           │   ├── dynamic.go
    │           │   └── types.go
    │           ├── gofeaturespb/
    │           │   └── go_features.pb.go
    │           ├── known/
    │           │   ├── anypb/
    │           │   │   └── any.pb.go
    │           │   ├── durationpb/
    │           │   │   └── duration.pb.go
    │           │   ├── emptypb/
    │           │   │   └── empty.pb.go
    │           │   ├── structpb/
    │           │   │   └── struct.pb.go
    │           │   ├── timestamppb/
    │           │   │   └── timestamp.pb.go
    │           │   └── wrapperspb/
    │           │       └── wrappers.pb.go
    │           └── pluginpb/
    │               └── plugin.pb.go
    ├── gopkg.in/
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    └── modules.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .bazelrc
================================================
# =====================================================================
# Envoy specific Bazel build/test options.
# =====================================================================

# Keep envoy.bazelrc up-to-date by run:
# curl -sSL https://raw.githubusercontent.com/envoyproxy/envoy-wasm/master/.bazelrc > envoy.bazelrc
import %workspace%/envoy.bazelrc

# Use platforms based toolchain resolution
build --incompatible_enable_cc_toolchain_resolution
build --platform_mappings=bazel/platform_mappings

# envoy.bazelrc always sets -fPIC, tell bazel about it to suppress building both .o and .pic.o
# objects from the same C++ sources.
build --force_pic

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

# release builds are optimized
build:release -c opt

# No debug info for release builds
build:release --define no_debug_info=1
build:release --linkopt=-Wl,--strip-all
build --features=-per_object_debug_info
build --fission=dbg

# Manual link stamping, forces link to include current git SHA even if binary is otherwise
# upto-date
build:release --define manual_stamp=manual_stamp

# release_debug - an optimized release build containing the debug information
build:release_debug -c opt
build:release_debug --define no_debug_info=0
build:release_debug --strip=never
build:release_debug --copt=-ggdb3
build:release_debug --define manual_stamp=manual_stamp

# Always have LD_LIBRARY_PATH=/usr/cross-compat/lib defined in the test environment.
# The path does not need to exist, but can be created when needed for running tests.
build --test_env=LD_LIBRARY_PATH=/usr/cilium-cross-compat/lib

# use same env option for query as upstream is using for build
query --incompatible_merge_fixed_and_default_shell_env


================================================
FILE: .bazelversion
================================================
7.7.1


================================================
FILE: .clang-format
================================================
---
Language:        Cpp
AccessModifierOffset: -2
ColumnLimit: 100
DerivePointerAlignment: false
PointerAlignment: Left
SortIncludes: false
TypenameMacros: ['STACK_OF']
...

---
Language: Proto
ColumnLimit: 100
SpacesInContainerLiterals: false
AllowShortFunctionsOnASingleLine: false
ReflowComments: false
...


================================================
FILE: .clang-tidy
================================================
Checks: >
  -clang-analyzer-core.NonNullParamChecker,
  -clang-analyzer-optin.cplusplus.UninitializedObject,
  abseil-duration-*,
  abseil-faster-strsplit-delimiter,
  abseil-no-namespace,
  abseil-redundant-strcat-calls,
  abseil-str-cat-append,
  abseil-string-find-startswith,
  abseil-upgrade-duration-conversions,
  bugprone-assert-side-effect,
  bugprone-unused-raii,
  bugprone-use-after-move,
  clang-analyzer-core.DivideZero,
  misc-unused-using-decls,
  modernize-deprecated-headers,
  modernize-loop-convert,
  modernize-make-shared,
  modernize-make-unique,
  modernize-return-braced-init-list,
  modernize-use-default-member-init,
  modernize-use-equals-default,
  modernize-use-nullptr,
  modernize-use-override,
  modernize-use-using,
  performance-faster-string-find,
  performance-for-range-copy,
  performance-inefficient-algorithm,
  performance-inefficient-vector-operation,
  performance-noexcept-move-constructor,
  performance-move-constructor-init,
  performance-type-promotion-in-math-fn,
  performance-unnecessary-copy-initialization,
  readability-braces-around-statements,
  readability-container-size-empty,
  readability-identifier-naming,
  readability-redundant-control-flow,
  readability-redundant-member-init,
  readability-redundant-smartptr-get,
  readability-redundant-string-cstr

CheckOptions:
- key: cppcoreguidelines-unused-variable.IgnorePattern
  value: "^_$"
- key: bugprone-assert-side-effect.AssertMacros
  value: 'ASSERT'
- key: bugprone-dangling-handle.HandleClasses
  value: 'std::basic_string_view;std::experimental::basic_string_view;absl::string_view'
- key: misc-include-cleaner.IgnoreHeaders
  value: 'fmt/format\.h;fmt/compile\.h;asm-generic/socket\.h;asm/unistd_32\.h;asm/unistd_64\.h;bits/.*;google/protobuf/.*;linux/in\.h;linux/in6\.h;mutex;cstdint'
- key: modernize-use-auto.MinTypeNameLength
  value: '10'
- key: readability-identifier-naming.ClassCase
  value: 'CamelCase'
- key: readability-identifier-naming.EnumCase
  value: 'CamelCase'
- key: readability-identifier-naming.EnumConstantCase
  value: 'CamelCase'
# Ignore GoogleTest function macros.
- key: readability-identifier-naming.FunctionIgnoredRegexp
  # To have the regex chomped correctly fence all items with `|` (other than first/last)
  value: >-
    (^AbslHashValue$|
    |^called_count$|
    |^case_sensitive$|
    |^Create$|
    |^envoy_resolve_dns$|
    |^evconnlistener_free$|
    |^event_base_free$|
    |^(get|set)EVP_PKEY$|
    |^has_value$|
    |^Ip6(ntohl|htonl)$|
    |^get_$|
    |^HeaderHasValue(Ref)?$|
    |^HeaderValueOf$|
    |^Is(Superset|Subset)OfHeaders$|
    |^LLVMFuzzerInitialize$|
    |^LLVMFuzzerTestOneInput$|
    |^Locality$|
    |^MOCK_METHOD$|
    |^PrepareCall$|
    |^PrintTo$|
    |^resolve_dns$|
    |^result_type$|
    |Returns(Default)?WorkerId$|
    |^sched_getaffinity$|
    |^shutdownThread_$|
    |^envoy_dynamic_module(.*)$|
    |TEST|
    |^use_count$)
- key: readability-identifier-naming.ParameterCase
  value: 'lower_case'
- key: readability-identifier-naming.ParameterIgnoredRegexp
  value: (^cname_ttl_$)
- key: readability-identifier-naming.PrivateMemberCase
  value: 'lower_case'
- key: readability-identifier-naming.PrivateMemberSuffix
  value: '_'
- key: readability-identifier-naming.StructCase
  value: 'CamelCase'
- key: readability-identifier-naming.TypeAliasCase
  value: 'CamelCase'
- key: readability-identifier-naming.TypeAliasIgnoredRegexp
  value: '(result_type)'
- key: readability-identifier-naming.UnionCase
  value: 'CamelCase'
- key: readability-identifier-naming.FunctionCase
  value: 'camelBack'
- key: readability-identifier-naming.LocalVariableCase
  value: 'lower_case'

HeaderFilterRegex: '^./source/.*|^./contrib/.*|^./test/.*|^./envoy/.*'

UseColor: true

WarningsAsErrors: '*'

## The version here is arbitrary since any change to this file will
## trigger a full run of clang-tidy against all files.
## It can be useful as it seems some header changes may not trigger the
## expected rerun.
# v0


================================================
FILE: .clangd
================================================
# https://clangd.llvm.org/config
Index:
  StandardLibrary: Yes
Diagnostics:
  UnusedIncludes: Strict
  MissingIncludes: Strict
  Includes:
    IgnoreHeader:
      - "fmt/format\.h" # Do not remove or add this
      - "fmt/compile\.h" # private -> use fmt/format.h
      - "asm-generic/socket\.h" # private -> use sys/socket.h
      - "asm/unistd_32\.h" # private -> use unistd.h
      - "asm/unistd_64\.h" # private -> use unistd.h
      - "bits/.*" # private -> use standard headers like <string>, etc.
      - "google/protobuf/.*" # checked by envoy linting -> use source/common/protobuf/protobuf.h
      - "linux/in\.h" # private -> use netinet/in.h
      - "linux/in6\.h" # private -> use netinet/in.h
      - "mutex" # checked by envoy linting -> use source/common/common/thread.h
      - "cstdint" # Do not complain the uint64_t is not directly included
# CompileFlags:
#   CompilationDatabase: ./compile_commands.json
#   # Unfortunately, above config isn't working as expected.
#   # Therefore it's recommended to use clangd argument
#   # `--compile-commands-dir=<working_dir>` to improve the
#   # clangd support for the external Envoy bazel-dependencies.
#   # See https://github.com/clangd/clangd/discussions/907


================================================
FILE: .github/CODEOWNERS
================================================
* @cilium/envoy


================================================
FILE: .github/renovate.json5
================================================
{
  $schema: 'https://docs.renovatebot.com/renovate-schema.json',
  extends: [
    'config:recommended',
    ':gitSignOff',
    'helpers:pinGitHubActionDigests',
  ],
  includePaths: [
    '.github/workflows/**',
    'Dockerfile',
    'Dockerfile.builder',
    'Dockerfile.tests',
    'go.mod',
    'go.sum',
    'tools/install_bazelisk.sh',
    'WORKSPACE',
    'ENVOY_VERSION',
  ],
  pinDigests: true,
  ignorePresets: [
    ':prHourlyLimit2',
  ],
  separateMajorMinor: false,
  separateMultipleMajor: false,
  separateMinorPatch: false,
  pruneStaleBranches: true,
  baseBranchPatterns: [
    'main',
    'v1.36',
  ],
  labels: [
    'kind/enhancement',
    'release-note/misc',
  ],
  schedule: [
    'on monday',
  ],
  postUpdateOptions: [
    'gomodTidy',
  ],
  packageRules: [
    {
      groupName: 'Go',
      matchDepNames: [
        'go',
        'docker.io/library/golang',
        'actions/setup-go'
      ],
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      groupName: 'all go dependencies main',
      groupSlug: 'all-go-deps-main',
      matchFileNames: [
        'go.mod',
        'go.sum',
      ],
      postUpdateOptions: [
        'gomodUpdateImportPaths',
      ],
      matchUpdateTypes: [
        'major',
        'minor',
        'digest',
        'patch',
        'pin',
        'pinDigest',
      ],
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      // Avoid updating minor or major version for github.com/envoyproxy/go-control-plane/envoy
      // as we need to update cilium-envoy accordingly.
      "matchPackageNames": [
        "github.com/envoyproxy/go-control-plane/envoy",
      ],
      "matchUpdateTypes": [
        "patch",
      ]
    },
    {
      groupName: 'all github action dependencies',
      groupSlug: 'all-github-action',
      matchFileNames: [
        '.github/workflows/**',
      ],
      matchUpdateTypes: [
        'major',
        'minor',
        'digest',
        'patch',
        'pin',
        'pinDigest',
      ],
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      matchFileNames: [
        'Dockerfile',
      ],
      matchPackageNames: [
        'docker.io/library/ubuntu',
      ],
      allowedVersions: '24.04',
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      matchFileNames: [
        'Dockerfile.builder',
      ],
      matchPackageNames: [
        'docker.io/library/ubuntu',
      ],
      allowedVersions: '24.04',
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      enabled: false,
      matchFileNames: [
        'Dockerfile',
      ],
      matchPackageNames: [
        'quay.io/cilium/cilium-envoy-builder',
      ],
    },
    {
      matchFileNames: [
        'Dockerfile.builder',
        '.github/workflows/**',
      ],
      matchPackageNames: [
        'go',
      ],
      allowedVersions: '<=1.26',
      matchBaseBranches: [
        'main',
        'v1.36',
      ],
    },
    {
      groupName: 'envoy 1.36.x',
      matchDepNames: [
        'envoyproxy/envoy',
      ],
      allowedVersions: '<=1.36',
      matchBaseBranches: [
        'v1.36',
      ],
    },
    {
      groupName: 'envoy 1.37.x',
      matchDepNames: [
        'envoyproxy/envoy',
      ],
      allowedVersions: '<=1.37',
      matchBaseBranches: [
        'main',
      ],
    },
    {
      "enabled": false,
      "matchPackageNames": [
        // Stop updating envoy control plane packages until they pushed the
        // tag to stop go mod from erroring. See https://github.com/cilium/cilium/issues/41574
        "github.com/envoyproxy/go-control-plane/contrib",
        "github.com/envoyproxy/go-control-plane/envoy"
      ]
    }
  ],
  customManagers: [
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^WORKSPACE$/',
      ],
      matchStrings: [
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)\\s+.+_VERSION = "(?<currentValue>.*)"',
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?) digestVersion=(?<currentValue>.*)\\s+.+_SHA = "(?<currentDigest>.*)"',
      ],
    },
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^\\.github/workflows/[^/]+\\.ya?ml$/',
      ],
      matchStrings: [
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)\\s+.+-version: (?<currentValue>.*)',
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)\\s+.+_VERSION: (?<currentValue>.*)',
      ],
    },
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^ENVOY_VERSION$/',
      ],
      datasourceTemplate: 'github-releases',
      depNameTemplate: 'envoyproxy/envoy',
      extractVersionTemplate: '^v?(?<version>.+)$',
      matchStrings: [
        'envoy-(?<currentValue>.*)',
      ],
    },
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^Dockerfile$/',
        '/^Dockerfile.builder$/',
        '/^Dockerfile.tests$/',
      ],
      matchStrings: [
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\sENV .*?_VERSION=(?<currentValue>.*)\\s',
      ],
    },
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^tools/install_bazelisk.sh$/',
      ],
      matchStrings: [
        '# renovate: datasource=(?<datasource>.*?) depName=(?<depName>.*?)( versioning=(?<versioning>.*?))?\\s.*?_VERSION=(?<currentValue>.*)\\s',
      ],
    },
    {
      customType: 'regex',
      managerFilePatterns: [
        '/^.github/workflows/renovate-config-validator.yaml$/',
      ],
      matchStrings: [
        '# renovate: datasource=(?<datasource>.*?)\\s+RENOVATE_IMAGE="(?<depName>.*):(?<currentValue>.*)@(?<currentDigest>sha256:[a-f0-9]+)"',
      ],
    },
  ],
}


================================================
FILE: .github/workflows/build-envoy-image-ci.yaml
================================================
name: CI Build & Push
on:
  pull_request_target:
    types: [opened, synchronize, reopened]

permissions:
  # To be able to access the repository with `actions/checkout`
  contents: read
  # Required to generate OIDC tokens for `sigstore/cosign-installer` authentication
  id-token: write

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
  cancel-in-progress: true

jobs:
  build-and-push-prs:
    name: Build and push multi-arch images
    environment:
      name: ci-build
      deployment: false
    timeout-minutes: 360
    runs-on: ${{ vars.PROXY_BUILD_GITHUB_RUNNER }}
    outputs:
      sha: ${{ steps.tag.outputs.sha }}
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
        with:
          image: tonistiigi/binfmt:qemu-v7.0.0-28

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

      - name: Cache Docker layers
        uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
        with:
          path: /tmp/buildx-cache
          key: docker-cache-${{ github.head_ref }}
          restore-keys: docker-cache-main

      - name: Login to quay.io
        uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
        with:
          registry: quay.io
          username: ${{ secrets.QUAY_ENVOY_USERNAME_DEV }}
          password: ${{ secrets.QUAY_ENVOY_PASSWORD_DEV }}

      - name: Checkout PR
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          persist-credentials: false

      - name: Prep for build
        run: |
          echo "${{ github.event.pull_request.head.sha }}" >SOURCE_VERSION
          echo "ENVOY_MINOR_RELEASE=$(cat ENVOY_VERSION | sed 's/envoy-\([0-9]\+\.[0-9]\+\)\..*/v\1/')" >> $GITHUB_ENV
          echo "ENVOY_PATCH_RELEASE=$(cat ENVOY_VERSION | sed 's/^envoy-\([0-9]\+\.[0-9]\+\.[0-9]\+$\)/v\1/')" >> $GITHUB_ENV
          echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV

      - name: Checking if cilium-envoy-builder image exists
        id: cilium-builder-tag-in-repositories
        shell: bash
        run: |
          if docker buildx imagetools inspect quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }} &>/dev/null; then
            echo exists="true" >> $GITHUB_OUTPUT
          else
            echo exists="false" >> $GITHUB_OUTPUT
          fi

      - name: PR Multi-arch build & push of Builder image (dev)
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        if: steps.cilium-builder-tag-in-repositories.outputs.exists == 'false'
        id: docker_build_builder_ci
        with:
          provenance: false
          context: .
          file: ./Dockerfile.builder
          platforms: linux/amd64,linux/arm64
          push: true
          tags: quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}

      - name: CI Builder Image Digest
        if: steps.cilium-builder-tag-in-repositories.outputs.exists == 'false'
        shell: bash
        run: |
          echo "Digests:"
          echo "quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}@${{ steps.docker_build_builder_ci.outputs.digest }}"

      - name: PR Multi-arch build & push of cilium-envoy
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        id: docker_build_ci
        with:
          provenance: false
          context: .
          file: ./Dockerfile
          platforms: linux/amd64,linux/arm64
          build-args: |
            BUILDER_BASE=quay.io/cilium/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}
            ARCHIVE_IMAGE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:main-archive-latest
            BAZEL_BUILD_OPTS=--remote_upload_local_results=false
          cache-from: type=local,src=/tmp/buildx-cache
          cache-to: type=local,dest=/tmp/buildx-cache,mode=max
          push: true
          tags: quay.io/${{ github.repository_owner }}/cilium-envoy-dev:${{ github.event.pull_request.head.sha }}

      - name: Install Cosign
        uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2

      - name: Sign Container Image
        run: |
          cosign sign -y quay.io/${{ github.repository_owner }}/cilium-envoy-dev@${{ steps.docker_build_ci.outputs.digest }}

      - name: Install Bom
        shell: bash
        env:
          # renovate: datasource=github-releases depName=kubernetes-sigs/bom
          BOM_VERSION: v0.7.1
        run: |
          curl -L https://github.com/kubernetes-sigs/bom/releases/download/${{ env.BOM_VERSION }}/bom-amd64-linux -o bom
          sudo mv ./bom /usr/local/bin/bom
          sudo chmod +x /usr/local/bin/bom

      - name: Generate SBOM
        shell: bash
        # To-Do: generate SBOM from source after https://github.com/kubernetes-sigs/bom/issues/202 is fixed
        run: |
          bom generate -o sbom_cilium-envoy_${{ github.event.pull_request.head.sha }}.spdx --format=json --image=quay.io/${{ github.repository_owner }}/cilium-envoy-dev:${{ github.event.pull_request.head.sha }}

      - name: Attach SBOM to container images
        run: |
          cosign attach sbom --sbom sbom_cilium-envoy_${{ github.event.pull_request.head.sha }}.spdx quay.io/${{ github.repository_owner }}/cilium-envoy-dev@${{ steps.docker_build_ci.outputs.digest }}

      - name: Sign SBOM Image
        run: |
          docker_build_ci_digest="${{ steps.docker_build_ci.outputs.digest }}"
          image_name="quay.io/${{ github.repository_owner }}/cilium-envoy-dev:${docker_build_ci_digest/:/-}.sbom"
          docker_build_ci_sbom_digest="sha256:$(docker buildx imagetools inspect --raw ${image_name} | sha256sum | head -c 64)"
          cosign sign -y "quay.io/${{ github.repository_owner }}/cilium-envoy-dev@${docker_build_ci_sbom_digest}"

      - name: Envoy binary version check
        shell: bash
        run: |
          envoy_version=$(docker run --rm quay.io/${{ github.repository_owner }}/cilium-envoy-dev:${{ github.event.pull_request.head.sha }} cilium-envoy --version)
          expected_version=$(echo ${{ env.ENVOY_PATCH_RELEASE }} | sed 's/^v//')
          echo ${envoy_version}
          [[ "${envoy_version}" == *"${{ github.event.pull_request.head.sha }}/$expected_version"* ]]

      - name: CI Image Digest
        shell: bash
        run: |
          echo "Digests:"
          echo "quay.io/${{ github.repository_owner }}/cilium-envoy-dev:${{ github.event.pull_request.head.sha }}@${{ steps.docker_build_ci.outputs.digest }}"

  cilium-intergration-tests:
    name: Cilium Integration Tests
    needs: build-and-push-prs
    permissions:
      contents: read
      pull-requests: write
      statuses: write
    uses: ./.github/workflows/cilium-integration-tests.yaml
    with:
      repository: ${{ github.event.pull_request.head.repo.full_name }}
      commit_ref: ${{ github.event.pull_request.head.sha }}
    secrets: inherit

  cilium-gateway-api-tests:
    name: Cilium Gateway API Tests
    needs: build-and-push-prs
    permissions:
      contents: read
      pull-requests: write
      statuses: write
    uses: ./.github/workflows/cilium-gateway-api.yaml
    with:
      repository: ${{ github.event.pull_request.head.repo.full_name }}
      commit_ref: ${{ github.event.pull_request.head.sha }}
    secrets: inherit


================================================
FILE: .github/workflows/build-envoy-images-release-base.yaml
================================================
name: Refresh test & build cache & build latest
on:
  workflow_call:
    inputs:
      release_debug:
        description: 'Build debug images'
        required: false
        type: boolean
        default: false
    secrets:
      QUAY_ENVOY_USERNAME:
        description: 'Quay.io username for Envoy image registry'
        required: true
      QUAY_ENVOY_PASSWORD:
        description: 'Quay.io password for Envoy image registry'
        required: true

permissions:
  # To be able to access the repository with `actions/checkout`
  contents: read
  # Required to generate OIDC tokens for `sigstore/cosign-installer` authentication
  id-token: write

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  test-cache-refresh:
    name: Build test cache and push images
    environment:
      name: release-base-images
      deployment: false
    timeout-minutes: 360
    runs-on: ${{ vars.PROXY_BUILD_GITHUB_RUNNER }}
    steps:
    - name: Set up QEMU
      uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
      with:
        image: tonistiigi/binfmt:qemu-v7.0.0-28

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

    - name: Login to quay.io
      uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
      with:
        registry: quay.io
        username: ${{ secrets.QUAY_ENVOY_USERNAME }}
        password: ${{ secrets.QUAY_ENVOY_PASSWORD }}

    - name: Checkout source
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false

    - name: Prep for build
      run: |
        echo "${{ github.sha }}" >SOURCE_VERSION
        echo "ENVOY_MINOR_RELEASE=$(cat ENVOY_VERSION | sed 's/envoy-\([0-9]\+\.[0-9]\+\)\..*/v\1/')" >> $GITHUB_ENV
        echo "ENVOY_PATCH_RELEASE=$(cat ENVOY_VERSION | sed 's/^envoy-\([0-9]\+\.[0-9]\+\.[0-9]\+$\)/v\1/')" >> $GITHUB_ENV
        echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV

    - name: Cache Docker layers
      uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
      with:
        path: /tmp/buildx-cache
        key: docker-cache-tests

    - name: Clear cache
      run: rm -rf /tmp/buildx-cache/*

    - name: Wait for builder image
      uses: ./.github/workflows/wait-for-image
      with:
        SHA: ${{ env.BUILDER_DOCKER_HASH }}
        repo: cilium
        images: cilium-envoy-builder

    - name: Run integration tests on amd64 & push of test artifact archive
      uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
      id: docker_tests_ci_cache_update
      with:
        provenance: false
        context: .
        file: ./Dockerfile.tests
        target: builder-archive
        platforms: linux/amd64
        build-args: |
          BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ env.BUILDER_DOCKER_HASH }}
          ARCHIVE_IMAGE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:test-${{ github.ref_name }}-archive-latest
          COPY_CACHE_EXT=.new
          BAZEL_BUILD_OPTS=--remote_upload_local_results=false
          BAZEL_TEST_OPTS=--test_timeout=300 --local_test_jobs=1 --flaky_test_attempts=3
        cache-to: type=local,dest=/tmp/buildx-cache,mode=max
        push: true
        tags: quay.io/${{ github.repository_owner }}/cilium-envoy-builder:test-${{ github.ref_name }}-archive-latest

  build-cache-and-push-images:
    name: Build cache and push images
    environment:
      name: release-base-images
      deployment: false
    timeout-minutes: 360
    runs-on: ${{ vars.PROXY_BUILD_GITHUB_RUNNER }}
    steps:
    - name: Set up QEMU
      uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
      with:
        image: tonistiigi/binfmt:qemu-v7.0.0-28
    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

    - name: Login to quay.io
      uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
      with:
        registry: quay.io
        username: ${{ secrets.QUAY_ENVOY_USERNAME }}
        password: ${{ secrets.QUAY_ENVOY_PASSWORD }}

    - name: Checkout source
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
    - name: Prep for build
      run: |
        echo "${{ github.sha }}" >SOURCE_VERSION
        echo "ENVOY_MINOR_RELEASE=$(cat ENVOY_VERSION | sed 's/envoy-\([0-9]\+\.[0-9]\+\)\..*/v\1/')" >> $GITHUB_ENV
        echo "ENVOY_PATCH_RELEASE=$(cat ENVOY_VERSION | sed 's/^envoy-\([0-9]\+\.[0-9]\+\.[0-9]\+$\)/v\1/')" >> $GITHUB_ENV
        echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV
        echo "SOURCE_TIMESTAMP=$(git log -1 --pretty=format:"%ct" .)" >> $GITHUB_ENV

    - name: Checking if cilium-envoy-builder image exists
      id: cilium-builder-tag-in-repositories
      shell: bash
      run: |
        if docker buildx imagetools inspect quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ env.BUILDER_DOCKER_HASH }} &>/dev/null; then
          echo exists="true" >> $GITHUB_OUTPUT
        else
          echo exists="false" >> $GITHUB_OUTPUT
        fi

    - name: Multi-arch build & push of Builder image
      uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
      if: steps.cilium-builder-tag-in-repositories.outputs.exists == 'false'
      id: docker_build_builder
      with:
        provenance: false
        context: .
        file: ./Dockerfile.builder
        platforms: linux/amd64,linux/arm64
        push: true
        tags: |
          quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ env.BUILDER_DOCKER_HASH }}
          quay.io/${{ github.repository_owner }}/cilium-envoy-builder:latest
    - name: Multi-arch build & push of build artifact archive
      uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
      with:
        context: .
        file: ./Dockerfile
        target: builder-archive
        platforms: linux/amd64,linux/arm64
        build-args: |
          BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ env.BUILDER_DOCKER_HASH }}
          ARCHIVE_IMAGE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ github.ref_name }}-archive-latest
          COPY_CACHE_EXT=.new
          BAZEL_BUILD_OPTS="--jobs=HOST_CPUS*.75"
        push: true
        tags: quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ github.ref_name }}-archive-latest

    - name: Cache Docker layers
      uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
      with:
        path: /tmp/buildx-cache
        key: docker-cache-main

    - name: Clear cache
      run: |
        rm -rf /tmp/buildx-cache/*
        docker buildx prune -f

    - name: Multi-arch build & push main latest
      uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
      id: docker_build_cd
      with:
        provenance: false
        context: .
        file: ./Dockerfile
        platforms: linux/amd64,linux/arm64
        build-args: |
          BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ env.BUILDER_DOCKER_HASH }}
          BAZEL_BUILD_OPTS=--remote_upload_local_results=false
          ARCHIVE_IMAGE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:${{ github.ref_name }}-archive-latest
          RELEASE_DEBUG=${{ inputs.release_debug && '1' || '' }}
        cache-to: type=local,dest=/tmp/buildx-cache,mode=max
        push: true
        tags: |
          quay.io/${{ github.repository_owner }}/cilium-envoy:latest
          quay.io/${{ github.repository_owner }}/cilium-envoy:${{ github.sha }}
          quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_MINOR_RELEASE }}-${{ github.sha }}
          quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_PATCH_RELEASE }}-${{ github.sha }}
          quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_PATCH_RELEASE }}-${{ env.SOURCE_TIMESTAMP }}-${{ github.sha }}

    - name: Install Cosign
      uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # v4.1.2

    - name: Sign Container Image
      run: |
        cosign sign -y quay.io/${{ github.repository_owner }}/cilium-envoy@${{ steps.docker_build_cd.outputs.digest }}

    - name: Install Bom
      shell: bash
      env:
        # renovate: datasource=github-releases depName=kubernetes-sigs/bom
        BOM_VERSION: v0.7.1
      run: |
        curl -L https://github.com/kubernetes-sigs/bom/releases/download/${{ env.BOM_VERSION }}/bom-amd64-linux -o bom
        sudo mv ./bom /usr/local/bin/bom
        sudo chmod +x /usr/local/bin/bom

    - name: Generate SBOM
      shell: bash
      run: |
        bom generate -o sbom_cilium-envoy_${{ github.sha }}.spdx --format=json --image=quay.io/${{ github.repository_owner }}/cilium-envoy:${{ github.sha }}

    - name: Attach SBOM to container images
      run: |
        cosign attach sbom --sbom sbom_cilium-envoy_${{ github.sha }}.spdx quay.io/${{ github.repository_owner }}/cilium-envoy@${{ steps.docker_build_cd.outputs.digest }}

    - name: Sign SBOM Image
      run: |
        docker_build_cd_digest="${{ steps.docker_build_cd.outputs.digest }}"
        image_name="quay.io/${{ github.repository_owner }}/cilium-envoy:${docker_build_cd_digest/:/-}.sbom"
        docker_build_cd_sbom_digest="sha256:$(docker buildx imagetools inspect --raw ${image_name} | sha256sum | head -c 64)"
        cosign sign -y "quay.io/${{ github.repository_owner }}/cilium-envoy@${docker_build_cd_sbom_digest}"

    - name: Envoy binary version check
      shell: bash
      run: |
        envoy_version=$(docker run --rm quay.io/${{ github.repository_owner }}/cilium-envoy:${{ github.sha }} cilium-envoy --version)
        expected_version=$(echo ${{ env.ENVOY_PATCH_RELEASE }} | sed 's/^v//')
        echo ${envoy_version}
        [[ "${envoy_version}" == *"${{ github.sha }}/$expected_version"* ]]

    - name: Release Image Digest
      shell: bash
      run: |
        echo "Digests:"
        echo "quay.io/${{ github.repository_owner }}/cilium-envoy:${{ github.sha }}@${{ steps.docker_build_cd.outputs.digest }}"
        echo "quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_MINOR_RELEASE }}-${{ github.sha }}@${{ steps.docker_build_cd.outputs.digest }}"
        echo "quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_PATCH_RELEASE }}-${{ github.sha }}@${{ steps.docker_build_cd.outputs.digest }}"
        echo "quay.io/${{ github.repository_owner }}/cilium-envoy:${{ env.ENVOY_PATCH_RELEASE }}-${{ env.SOURCE_TIMESTAMP }}-${{ github.sha }}@${{ steps.docker_build_cd.outputs.digest }}"


================================================
FILE: .github/workflows/build-envoy-images-release-debug.yaml
================================================
name: Refresh test & build cache & build latest wth debug symbols
on:
  workflow_dispatch:

permissions:
  id-token: write
  contents: read

jobs:
  build-envoy-images-release-debug:
    uses: ./.github/workflows/build-envoy-images-release-base.yaml
    with:
      release_debug: true
    secrets: inherit


================================================
FILE: .github/workflows/build-envoy-images-release.yaml
================================================
name: Refresh test & build cache & build latest
on:
  push:
    branches:
      - main

permissions:
  contents: read
  id-token: write

jobs:
  build-envoy-images-release:
    uses: ./.github/workflows/build-envoy-images-release-base.yaml
    with:
      release_debug: false
    secrets: inherit


================================================
FILE: .github/workflows/ci-check-format.yaml
================================================
name: CI check format
on:
  pull_request: {}

# By specifying the access of one of the scopes, all of those that are not specified are set to 'none'.
permissions:
  # To be able to access the repository with actions/checkout
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
  cancel-in-progress: true

jobs:
  format:
    timeout-minutes: 30
    name: Check source format
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout PR Source Code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          persist-credentials: false

      - name: Prep for build
        run: |
          echo "${{ github.event.pull_request.head.sha }}" >SOURCE_VERSION
          echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV

      - name: Wait for build image
        uses: ./.github/workflows/wait-for-image
        with:
          SHA: ${{ env.BUILDER_DOCKER_HASH }}
          repo: cilium
          images: cilium-envoy-builder-dev

      - name: Check format
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        id: docker_format_ciak
        with:
          target: format
          provenance: false
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          outputs: type=local,dest=check-format-results
          build-args: |
            BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}
          push: false

      - name: Check for failure
        run: '! grep "^Format check failed" check-format-results/format-output.txt'

      - name: Upload Format results
        if: failure()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: check-format-results
          path: check-format-results/format-output.txt
          retention-days: 5

  tidy:
    timeout-minutes: 60
    name: Lint source style
    runs-on: ubuntu-24.04
    steps:
      - name: Checkout PR Source Code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false
          fetch-depth: 2

      - name: Prep for build
        run: |
          echo "${{ github.event.pull_request.head.sha }}" >SOURCE_VERSION
          echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV
          # git diff filter has everything else than deleted files (those need not be tidied)
          echo "TIDY_SOURCES=$(git diff --name-only --diff-filter=d HEAD^1 HEAD -- '*.h' '*.cc' | tr '\n' ' ')" >> $GITHUB_ENV

      - name: Wait for build image
        uses: ./.github/workflows/wait-for-image
        with:
          SHA: ${{ env.BUILDER_DOCKER_HASH }}
          repo: cilium
          images: cilium-envoy-builder-dev

      - name: Run clang-tidy
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        # skip if nothing changed
        if: ${{ env.TIDY_SOURCES != '' }}
        id: docker_clang_tidy
        with:
          target: clang-tidy
          provenance: false
          context: .
          file: ./Dockerfile
          platforms: linux/amd64
          outputs: type=local,dest=clang-tidy-results
          build-args: |
            BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}
            TIDY_SOURCES=${{ env.TIDY_SOURCES }}
          push: false

      - name: Check for failure
        run: |
          if grep -q "^clang-tidy fix produced changes, please commit them." clang-tidy-results/clang-tidy-output.txt; then
            exit 1
          fi

      - name: Upload clang-tidy results
        if: failure()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: clang-tidy-results
          path: clang-tidy-results/*.txt
          retention-days: 5


================================================
FILE: .github/workflows/ci-tests.yaml
================================================
name: CI run integration tests
on:
  pull_request: {}

# By specifying the access of one of the scopes, all of those that are not specified are set to 'none'.
permissions:
  # To be able to access the repository with actions/checkout
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
  cancel-in-progress: true

jobs:
  proxylib:
    timeout-minutes: 360
    name: Run unit tests for proxylib
    runs-on: ubuntu-latest
    steps:
    - name: Install Go
      uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
      with:
        # renovate: datasource=golang-version depName=go
        go-version: 1.26.3
    - name: Checkout code
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Check module vendoring
      run: |
        go mod tidy
        go mod vendor
        test -z "$(git status --porcelain)" || (echo "please run 'go mod tidy && go mod vendor', and submit your changes"; exit 1)
    - name: Run unit tests
      run: |
        make -C proxylib test

  tests:
    timeout-minutes: 360
    name: Run integration tests on amd64
    runs-on: ${{ vars.PROXY_BUILD_GITHUB_RUNNER || 'oracle-vm-32cpu-128gb-x86-64' }}
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0

      - name: Cache Docker layers
        uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
        with:
          path: /tmp/buildx-cache
          key: docker-cache-tests
          restore-keys: docker-cache-main

      - name: Checkout PR Source Code
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
          persist-credentials: false

      - name: Prep for build
        run: |
          echo "${{ github.event.pull_request.head.sha }}" >SOURCE_VERSION
          echo "BUILDER_DOCKER_HASH=$(git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $3 }')" >> $GITHUB_ENV

      - name: Wait for build image
        uses: ./.github/workflows/wait-for-image
        with:
          SHA: ${{ env.BUILDER_DOCKER_HASH }}
          repo: cilium
          images: cilium-envoy-builder-dev

      - name: Run integration tests on amd64
        uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
        id: docker_tests_ci
        with:
          provenance: false
          context: .
          file: ./Dockerfile.tests
          platforms: linux/amd64
          build-args: |
            BUILDER_BASE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder-dev:${{ env.BUILDER_DOCKER_HASH }}
            ARCHIVE_IMAGE=quay.io/${{ github.repository_owner }}/cilium-envoy-builder:test-main-archive-latest
            BAZEL_BUILD_OPTS=--remote_upload_local_results=false
            BAZEL_TEST_OPTS=--jobs=HOST_RAM*.0002 --test_timeout=300 --local_test_jobs=4 --flaky_test_attempts=3
          cache-from: type=local,src=/tmp/buildx-cache
          push: false


================================================
FILE: .github/workflows/cilium-gateway-api.yaml
================================================
name: Cilium Gateway API Tests
on:
  workflow_call:
    inputs:
      repository:
        description: 'Github Repository to run the workflow on.'
        type: string
        required: true
        default: cilium/proxy
      commit_ref:
        description: 'Git commit ref for image.'
        type: string
        required: true

concurrency:
  group: gateway-api-${{ github.workflow }}-${{ inputs.repository }}-${{ github.event.pull_request.number || github.event.after || inputs.commit_ref }}
  cancel-in-progress: true

# By specifying the access of one of the scopes, all of those that are not specified are set to 'none'.
permissions:
  # To be able to access the repository with actions/checkout
  contents: read
  # To allow writing PR comments and setting emojis
  pull-requests: write

env:
  # renovate: datasource=github-releases depName=kubernetes-sigs/kind
  KIND_VERSION: v0.31.0
  CILIUM_REPO_OWNER: cilium
  CILIUM_REPO_REF: main
  CILIUM_CLI_REF: latest
  CURL_PARALLEL: ${{ vars.CURL_PARALLEL || 10 }}

jobs:
  cilium-gateway-api-tests:
    timeout-minutes: 360
    name: Cilium Gateway API Tests
    if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
    runs-on: ubuntu-latest
    steps:
      - name: Prepare variables for PR
        if: inputs.commit_ref != ''
        run: |
          echo "PROXY_IMAGE=quay.io/cilium/cilium-envoy-dev" >> $GITHUB_ENV
          echo "PROXY_TAG=${{ inputs.commit_ref }}" >> $GITHUB_ENV

      - name: Checkout Cilium ${{ env.CILIUM_REPO_REF }}
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          repository: ${{ env.CILIUM_REPO_OWNER }}/cilium # Be aware that this is the Cilium repository and not the one of the proxy itself!
          ref: ${{ env.CILIUM_REPO_REF }}
          persist-credentials: false

      - name: Extracting Cilium version
        run: |
          echo "CILIUM_IMAGE_TAG=v$(cat ./VERSION)" >> $GITHUB_ENV

      - name: Install Cilium CLI ${{ env.CILIUM_CLI_REF }}
        run: |
          versionPattern="^v[0-9]+\.[0-9]+\.[0-9]+$"
          if [[ ${{ env.CILIUM_CLI_REF }} =~ $versionPattern ]]; then
            curl -sSL --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${{ env.CILIUM_CLI_REF }}/cilium-linux-amd64.tar.gz{,.sha256sum}
            sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
            sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
            rm cilium-linux-amd64.tar.gz{,.sha256sum}
          else
            cid=$(docker create quay.io/cilium/cilium-cli-ci:${{ env.CILIUM_CLI_REF }} ls)
            sudo docker cp $cid:/usr/local/bin/cilium /usr/local/bin
            docker rm $cid
          fi
          cilium version

      - name: Create kind cluster
        uses: helm/kind-action@ef37e7f390d99f746eb8b610417061a60e82a6cc # v1.14.0
        with:
          version: ${{ env.KIND_VERSION }}
          config: '.github/kind-config.yaml'
          cluster_name: 'kind'

      - name: Install Gateway API CRDs
        env:
          timeout: 5m
        run: |
          gateway_api_version=$(grep -m 1 "sigs.k8s.io/gateway-api" go.mod | awk '{print $2}' | awk -F'-' '{print (NF>2)?$NF:$0}')
          # Install Gateway CRDs
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_gatewayclasses.yaml
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_gateways.yaml
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_httproutes.yaml
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_referencegrants.yaml
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_grpcroutes.yaml
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_backendtlspolicies.yaml
          ## TLSRoute is only available in experimental channel in v0.7.0
          kubectl apply --server-side -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/$gateway_api_version/config/crd/experimental/gateway.networking.k8s.io_tlsroutes.yaml

          # To make sure that Gateway API CRs are available
          kubectl wait --for condition=Established crd/gatewayclasses.gateway.networking.k8s.io --timeout=${{ env.timeout }}
          kubectl wait --for condition=Established crd/gateways.gateway.networking.k8s.io --timeout=${{ env.timeout }}
          kubectl wait --for condition=Established crd/httproutes.gateway.networking.k8s.io --timeout=${{ env.timeout }}
          kubectl wait --for condition=Established crd/tlsroutes.gateway.networking.k8s.io --timeout=${{ env.timeout }}
          kubectl wait --for condition=Established crd/grpcroutes.gateway.networking.k8s.io --timeout=${{ env.timeout }}
          kubectl wait --for condition=Established crd/referencegrants.gateway.networking.k8s.io --timeout=${{ env.timeout }}

      - name: Install Cilium
        timeout-minutes: 10
        shell: bash
        run: |
          cilium install \
            --chart-directory install/kubernetes/cilium \
            --helm-set kubeProxyReplacement=true \
            --helm-set gatewayAPI.enabled=true \
            --helm-set l2announcements.enabled=true \
            --helm-set bpf.monitorAggregation=none \
            --helm-set loadBalancer.l7.backend=envoy \
            --helm-set tls.readSecretsOnlyFromSecretsNamespace=true \
            --helm-set tls.secretSync.enabled=true \
            --helm-set disableEnvoyVersionCheck=true \
            --helm-set envoy.image.repository=${{ env.PROXY_IMAGE }} \
            --helm-set envoy.image.tag=${{ env.PROXY_TAG }} \
            --helm-set envoy.image.useDigest=false \
            --helm-set debug.enabled=true \
            --helm-set debug.verbose=envoy

          cilium hubble enable
          cilium status --wait
          cilium hubble port-forward&

      - name: Install Cilium LB IPPool and L2 Announcement Policy
        timeout-minutes: 10
        run: |
          KIND_NET_CIDR=$(docker network inspect kind -f '{{json .IPAM.Config}}' | jq -r '.[] | select(.Subnet | test("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")) | .Subnet')
          echo "KIND_NET_CIDR: $KIND_NET_CIDR"
          LB_CIDR=$(echo ${KIND_NET_CIDR} | sed "s@0.0/16@255.200/28@")
          echo "LB_CIDR: $LB_CIDR"

          echo "Deploying LB-IPAM Pool..."
          cat << EOF > pool.yaml
          apiVersion: "cilium.io/v2"
          kind: CiliumLoadBalancerIPPool
          metadata:
            name: "pool"
          spec:
            blocks:
              - cidr: "$LB_CIDR"
          EOF
          cat pool.yaml
          kubectl apply -f pool.yaml

          echo "Deploying L2-Announcement Policy..."
          cat << 'EOF' > l2policy.yaml
          apiVersion: "cilium.io/v2alpha1"
          kind: CiliumL2AnnouncementPolicy
          metadata:
            name: l2policy
          spec:
            loadBalancerIPs: true
            interfaces:
              - eth0
            nodeSelector:
              matchExpressions:
                - key: node-role.kubernetes.io/control-plane
                  operator: DoesNotExist
          EOF
          cat l2policy.yaml
          kubectl apply -f l2policy.yaml

      - name: Run Gateway API conformance test
        timeout-minutes: 30
        run: |
          KIND_NET_CIDR=$(docker network inspect kind -f '{{json .IPAM.Config}}' | jq -r '.[] | select(.Subnet | test("^[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+")) | .Subnet')
          echo "KIND_NET_CIDR: $KIND_NET_CIDR"
          GATEWAY_API_CONFORMANCE_USABLE_NETWORK_ADDRESSES=$(echo ${KIND_NET_CIDR} | sed "s@0.0/16@255.206@")
          GATEWAY_API_CONFORMANCE_UNUSABLE_NETWORK_ADDRESSES=$(echo ${KIND_NET_CIDR} | sed "s@0.0/16@255.216@")
          echo "GATEWAY_API_CONFORMANCE_USABLE_NETWORK_ADDRESSES: $GATEWAY_API_CONFORMANCE_USABLE_NETWORK_ADDRESSES"
          echo "GATEWAY_API_CONFORMANCE_UNUSABLE_NETWORK_ADDRESSES: $GATEWAY_API_CONFORMANCE_UNUSABLE_NETWORK_ADDRESSES"
          EXEMPT_FEATURES="HTTPRouteParentRefPort,MeshConsumerRoute"

          GATEWAY_API_CONFORMANCE_TESTS=1 \
            GATEWAY_API_CONFORMANCE_USABLE_NETWORK_ADDRESSES=$GATEWAY_API_CONFORMANCE_USABLE_NETWORK_ADDRESSES  \
            GATEWAY_API_CONFORMANCE_UNUSABLE_NETWORK_ADDRESSES=$GATEWAY_API_CONFORMANCE_UNUSABLE_NETWORK_ADDRESSES \
            go test \
              -p 4 \
              -v ./operator/pkg/gateway-api \
              --gateway-class cilium \
              --all-features \
              --exempt-features $EXEMPT_FEATURES \
              --allow-crds-mismatch \
              -test.run "TestConformance" \
              -test.timeout=29m \
              -test.skip "${{ steps.vars.outputs.skipped_tests }}"

      - name: Gather Cilium system dump
        if: failure()
        shell: bash
        run: cilium sysdump --output-filename cilium-sysdump-final

      - name: Upload Cilium system dump
        if: failure()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: cilium-gateway-api-test-sysdumps
          path: cilium-sysdump-*.zip
          retention-days: 5


================================================
FILE: .github/workflows/cilium-integration-tests.yaml
================================================
name: Cilium Integration Tests
on:
  workflow_call:
    inputs:
      repository:
        description: 'Github Repository to run the workflow on.'
        type: string
        required: true
        default: cilium/proxy
      commit_ref:
        description: 'Git commit ref for image.'
        type: string
        required: true

concurrency:
  group: integration-test-${{ github.workflow }}-${{ inputs.repository }}-${{ github.event.pull_request.number || github.event.after || inputs.commit_ref }}
  cancel-in-progress: true

# By specifying the access of one of the scopes, all of those that are not specified are set to 'none'.
permissions:
  # To be able to access the repository with actions/checkout
  contents: read
  # To allow writing PR comments and setting emojis
  pull-requests: write

env:
  # renovate: datasource=github-releases depName=kubernetes-sigs/kind
  KIND_VERSION: v0.31.0
  CILIUM_REPO_OWNER: cilium
  CILIUM_REPO_REF: main
  CILIUM_CLI_REF: latest
  CURL_PARALLEL: ${{ vars.CURL_PARALLEL || 10 }}

jobs:
  cilium-connectivity-tests:
    timeout-minutes: 360
    name: Cilium Connectivity Tests
    if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target'
    runs-on: ubuntu-latest
    steps:
      - name: Prepare variables for pushes to main
        if: github.event_name == 'push'
        run: |
          echo "PROXY_IMAGE=quay.io/cilium/cilium-envoy" >> $GITHUB_ENV
          echo "PROXY_TAG=${{ github.sha }}" >> $GITHUB_ENV
          echo "PROXY_GITHUB_REPO=github.com/cilium/proxy" >> $GITHUB_ENV

      - name: Prepare variables for PR
        if: inputs.commit_ref != ''
        run: |
          echo "PROXY_IMAGE=quay.io/cilium/cilium-envoy-dev" >> $GITHUB_ENV
          echo "PROXY_TAG=${{ inputs.commit_ref }}" >> $GITHUB_ENV
          echo "PROXY_GITHUB_REPO=github.com/${{ inputs.repository }}" >> $GITHUB_ENV

      - name: Checkout Cilium ${{ env.CILIUM_REPO_REF }}
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          repository: ${{ env.CILIUM_REPO_OWNER }}/cilium # Be aware that this is the Cilium repository and not the one of the proxy itself!
          ref: ${{ env.CILIUM_REPO_REF }}
          persist-credentials: false

      - name: Extracting Cilium version
        run: |
          echo "CILIUM_IMAGE_TAG=v$(cat ./VERSION)" >> $GITHUB_ENV

      - name: Install Cilium CLI ${{ env.CILIUM_CLI_REF }}
        run: |
          versionPattern="^v[0-9]+\.[0-9]+\.[0-9]+$"
          if [[ ${{ env.CILIUM_CLI_REF }} =~ $versionPattern ]]; then
            curl -sSL --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${{ env.CILIUM_CLI_REF }}/cilium-linux-amd64.tar.gz{,.sha256sum}
            sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
            sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
            rm cilium-linux-amd64.tar.gz{,.sha256sum}
          else
            cid=$(docker create quay.io/cilium/cilium-cli-ci:${{ env.CILIUM_CLI_REF }} ls)
            sudo docker cp $cid:/usr/local/bin/cilium /usr/local/bin
            docker rm $cid
          fi
          cilium version

      - name: Create kind cluster
        uses: helm/kind-action@ef37e7f390d99f746eb8b610417061a60e82a6cc # v1.14.0
        with:
          version: ${{ env.KIND_VERSION }}
          config: '.github/kind-config.yaml'
          cluster_name: 'kind'

      - name: Install Go
        uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
        with:
          # renovate: datasource=golang-version depName=go
          go-version: 1.26.3

      - name: Install Cilium
        timeout-minutes: 10
        shell: bash
        run: |
          cilium install \
            --chart-directory install/kubernetes/cilium \
            --helm-set bpf.monitorAggregation=none \
            --helm-set loadBalancer.l7.backend=envoy \
            --helm-set=tls.readSecretsOnlyFromSecretsNamespace=true \
            --helm-set=tls.secretSync.enabled=true \
            --helm-set envoy.image.repository=${{ env.PROXY_IMAGE }} \
            --helm-set envoy.image.tag=${{ env.PROXY_TAG }} \
            --helm-set envoy.image.useDigest=false \
            --helm-set disableEnvoyVersionCheck=true \
            --helm-set debug.enabled=true \
            --helm-set debug.verbose=envoy

          cilium status --wait

      - name: Execute Cilium L7 Connectivity Tests
        shell: bash
        run: |
          cilium connectivity test \
          --test="l7|sni|tls|ingress|check-log-errors" \
          --curl-parallel=${{ env.CURL_PARALLEL }} \
          --collect-sysdump-on-failure --flush-ct \
          --flow-validation=disabled \
          --test-concurrency=5

      - name: Gather Cilium system dump
        if: failure()
        shell: bash
        run: cilium sysdump --output-filename cilium-sysdump-final

      - name: Upload Cilium system dump
        if: failure()
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: cilium-integration-test-sysdumps
          path: cilium-sysdump-*.zip
          retention-days: 5


================================================
FILE: .github/workflows/codeql.yml
================================================
name: CodeQL

on: 
  workflow_dispatch:
  schedule:
    # Run at the end of every day from Monday to Friday
    - cron: '0 0 * * 1-5'

jobs:
  analyze:
    name: Analyze
    runs-on: ${{ matrix.config.runner }}
    permissions:
      actions: read
      contents: read
      security-events: write
    strategy:
      fail-fast: false
      matrix:
        config:
          - runner: ubuntu-24.04
            language: 'actions'
          - runner: ubuntu-24.04
            language: 'go'
          - runner: ${{ vars.PROXY_BUILD_GITHUB_RUNNER }}
            language: 'cpp'
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
      - name: Initialize CodeQL
        uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
        with:
          languages: ${{ matrix.config.language }}

      - name: Install deps (for C++)
        if: matrix.config.language == 'cpp'
        shell: bash
        run: |
          sudo apt-get update --error-on=any
          sudo apt-get install --yes \
          libtool libtinfo5 automake autoconf curl unzip
          # Note: the llvm/clang version should match the version specifed in:
          #  - bazel/repository_locations.bzl
          #  - .github/workflows/codeql-push.yml
          #  - https://github.com/envoyproxy/envoy-build-tools/blob/main/build_container/build_container_ubuntu.sh#L84
          mkdir -p bin/clang18.1.8
          cd bin/clang18.1.8
          wget -q https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz
          tar -xf clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz --strip-components 1

      - name: Build (for C++)
        if: matrix.config.language == 'cpp'
        run: |
          bazel/setup_clang.sh bin/clang18.1.8
          bazelisk shutdown
          CARGO_BAZEL_REPIN=true bazel build \
          -c fastbuild \
          --spawn_strategy=local \
          --discard_analysis_cache \
          --nouse_action_cache \
          --features="-layering_check" \
          --config=clang \
          --config=ci \
          cilium-envoy

      - name: Autobuild
        if: matrix.config.language != 'cpp'
        uses: github/codeql-action/autobuild@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4

      - name: Perform CodeQL Analysis
        uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4
        with:
          category: '/language:${{matrix.config.language}}'
          output: sarif-output-${{ matrix.config.language }}.sarif
      - name: Filter SARIF Results
        run: |
          REPO_URL="https://github.com/${{ github.repository }}/blob/${{ github.ref_name }}/"
          jq --arg baseUrl "$REPO_URL" '[.runs[].results[] |
            {
              ruleId: .ruleId,
              message: .message.text,
              url: "\($baseUrl)\(.locations[0].physicalLocation.artifactLocation.uri)#L\(.locations[0].physicalLocation.region.startLine)\(if .locations[0].physicalLocation.region.endLine != null then "-L\(.locations[0].physicalLocation.region.endLine)" else "" end)"
            }]' sarif-output-${{ matrix.config.language }}.sarif/${{ matrix.config.language }}.sarif > filtered-${{ matrix.config.language }}.json
      - name: Display Filtered Results
        run: cat filtered-${{ matrix.config.language }}.json
      - name: Send Slack Notification
        env:
          SEC_BOT_SLACK_WEBHOOK: ${{ secrets.SEC_BOT_SLACK_WEBHOOK }}
          CHANNEL: "#security-team"
        run: |
          jq -c '.[]' filtered-${{ matrix.config.language }}.json | while read -r item; do
            RULE_ID=$(echo "$item" | jq -r '.ruleId')
            MESSAGE=$(echo "$item" | jq -r '.message')
            URL=$(echo "$item" | jq -r '.url')

            PAYLOAD=$(cat <<EOF
          {
            "channel": "$CHANNEL",
            "blocks": [
              {
                "type": "header",
                "text": {
                  "type": "plain_text",
                  "text": "🚨 CodeQL Alert for ${{ matrix.config.language }} 🚨",
                  "emoji": true
                }
              },
              {
                "type": "section",
                "text": {
                  "type": "mrkdwn",
                  "text": "*Rule:* $RULE_ID"
                }
              },
              {
                "type": "section",
                "text": {
                  "type": "mrkdwn",
                  "text": "*Message:* $MESSAGE"
                }
              },
              {
                "type": "section",
                "text": {
                  "type": "mrkdwn",
                  "text": "*File:* $URL"
                }
              }
            ]
          }
          EOF
            )

            curl -X POST -H "Authorization: Bearer $SEC_BOT_SLACK_WEBHOOK" \
                  -H "Content-type: application/json" \
                  --data-raw "$PAYLOAD" https://slack.com/api/chat.postMessage
          done


================================================
FILE: .github/workflows/renovate-config-validator.yaml
================================================
name: Validate Renovate configuration

on:
  pull_request:
    paths:
      - '.github/renovate.json5'

permissions:
  contents: read

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.event.after }}
  cancel-in-progress: true

jobs:
  validate:
    name: Validate Renovate configuration
    runs-on: ubuntu-latest
    steps:
      - name: Checkout configuration
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      # this step uses latest renovate slim release
      - name: Validate configuration
        run: >
          # renovate: datasource=docker
          export RENOVATE_IMAGE=ghcr.io/renovatebot/renovate:39.98.0@sha256:43e35242449741dab5e60510ba39704a720422f83fdaa495709bc1e0f141625d
          docker run --rm --entrypoint "renovate-config-validator"
          -v "${{ github.workspace }}/.github/renovate.json5":"/renovate.json5"
          ${RENOVATE_IMAGE} "/renovate.json5"



================================================
FILE: .github/workflows/wait-for-image/action.yaml
================================================
name: Wait for images
description: Wait for images
inputs:
  SHA:
    description: 'inputs.sha'
    required: true
    default: 'incorrect-sha'
  repo:
    description: 'Repo for container image'
    required: true
    default: 'cilium'
  images:
    description: 'list of images to wait for'
    required: false
    default: 'cilium-envoy-builder-dev'

runs:
  using: composite
  steps:
    - name: Wait for images
      shell: bash
      run: |
        images=( ${{ inputs.images }} )
        for image in ${images[@]}; do
          until docker manifest inspect quay.io/${{ inputs.repo }}/$image:${{ inputs.SHA }} &> /dev/null
          do
            echo "Waiting for quay.io/${{ inputs.repo }}/$image:${{ inputs.SHA }} image to become available..."
            sleep 45s
          done
        done


================================================
FILE: .gitignore
================================================
# Dot files, disallow by default, and enable explicitly
\.*
!\.bazelrc
!\.bazelversion
!\.clangd
!\.clang-format
!\.clang-tidy
!\.github
!\.gitignore

*.plist

*cscope.files
*cscope.out
*cscope.in.out
*cscope.po.out
*tags

# Bazel symlinks
/bazel-*

/cilium-envoy
/cilium-envoy-starter
/Dockerfile.builder-refresh

/*\.dockerignore

# Emacs backup files
*~

# To run Envoy tests under gdb do "cd envoy && make debug && ln -s bazel-envoy/external external"
/external

# generated from make targets
*.ok
/proxylib/libcilium.so

# Istio porting files 
/envoy_bootstrap*.json

# Clang config is platform-specific
/clang.bazelrc

# generated for docker builds via make
/SOURCE_VERSION

/proxylib/libcilium.so*
/proxylib/_obj*

/BUILD_DEP_HASHES

# clangd compilation database
/compile_commands.json


================================================
FILE: BUILD
================================================
load(
    "@envoy//bazel:envoy_build_system.bzl",
    "envoy_cc_binary",
    "envoy_package",
)

licenses(["notice"])  # Apache 2

envoy_package()

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

cc_binary(
    name = "cilium-envoy-starter",
    deps = [
        "//starter:main_entry_lib",
    ],
)

envoy_cc_binary(
    name = "cilium-envoy",
    repository = "@envoy",
    deps = [
        # Cilium filters.
        "//cilium:health_check_sink_lib",
        "//cilium:bpf_metadata_lib",
        "//cilium:network_filter_lib",
        "//cilium:l7policy_lib",
        "//cilium:websocket_lib",
        "//cilium:tls_wrapper_lib",
        "@envoy//source/exe:envoy_main_entry_lib",
    ],
)

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

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

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

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


================================================
FILE: CODEOWNERS
================================================
* @cilium/envoy


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to cilium/proxy

The `cilium/proxy` repository is a minimal fork of the **Envoy Proxy** project. Its primary purpose is to integrate necessary **Cilium-specific filters and extensions** that cannot yet be upstreamed or are highly specific to Cilium's architecture.

Our goal is to remain as close to upstream Envoy as possible. Therefore, we highly encourage an **"upstream-first"** contribution policy.

### 1. Upstream-First Contributions (Recommended)

For the health of this project and the broader community, if your contribution falls into any of the following categories, **please contribute it directly to the official [Envoy Proxy repository](https://github.com/envoyproxy/envoy)**:

* General bug fixes.
* Performance improvements.
* New general-purpose features or functionality.
* Updates to core code or existing standard filters.
* Build system improvements that benefit all Envoy users.

This approach ensures the Cilium project benefits from the standard community review process and helps reduce maintenance overhead in this fork.

### 2. Cilium-Specific Contributions

Contributions to the `cilium/proxy` repository should be limited to code that is **strictly necessary for Cilium's functionality**, primarily:

* New Cilium-specific L7 network filters.
* Modifications required for deep Cilium integration (e.g., changes for a Cilium-specific API).
* Updates to the repository's build system/scripts required for Cilium's consumption.

#### Submitting a Contribution

1.  **Open an Issue:** Before starting any significant work, please open an issue to discuss your proposed change.
2.  **Fork and Branch:** Fork this repository and create a new branch for your feature or fix.
3.  **Submit a Pull Request (PR):**
    * Ensure your code follows existing style conventions.
    * If the change relates to a known issue or a PR you submitted upstream, **please link to the relevant upstream Envoy issue or PR** in your submission.

### 3. Contributor Ladder

`cilium/proxy` is a sub-project of the Cilium project and follows the same governance model, community processes, and contributor growth paths as Cilium. To support contributors in gaining both privileges and responsibilities, we adopt the shared [Contributor Ladder](https://github.com/cilium/community/blob/main/CONTRIBUTOR-LADDER.md). This contributor ladder defines how contributors can grow from community participants to project maintainers, along with the expectations at each level.

Community members generally start at the first levels of the ladder and advance as their involvement deepens. Becoming a Cilium organization member grants additional privileges across the project ecosystem, such as the ability to review pull requests or trigger CI runs. If you are contributing regularly to `cilium/proxy`, we encourage you to join the 
[Envoy team](https://github.com/cilium/community/blob/main/ladder/teams/envoy.yaml) to help review code and accelerate development.

Your contributions play a vital role in improving the project, and the community is here to support you every step of the way. Thank you for helping us maintain a minimal and effective fork!


================================================
FILE: Dockerfile
================================================
# 
# BUILDER_BASE is a multi-platform image with all the build tools
#
ARG BUILDER_BASE=quay.io/cilium/cilium-envoy-builder:6.1.0-latest

#
# ARCHIVE_IMAGE defaults to the result of the first stage below,
# refreshing the build caches from Envoy dependencies before the final
# build stage. This can be overridden on docker build command line to
# use pre-built dependencies. Note that if cross-compiling, these
# pre-built dependencies will include BUILDPLATFORM build tools and
# TARGETPLATFORM build artifacts, and thus can only be reused when
# building on the same BUILDPLATFORM.
#
ARG ARCHIVE_IMAGE=builder-fresh

FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS proxylib
WORKDIR /go/src/github.com/cilium/proxy
COPY --chown=1337:1337 . ./
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
RUN --mount=mode=0777,gid=1337,uid=1337,target=/cilium/proxy/.cache,type=cache \
    --mount=mode=0777,gid=1337,uid=1337,target=/go/pkg,type=cache \
    PATH=$PATH:/usr/local/go/bin GOARCH=${TARGETARCH} make -C proxylib all && mv proxylib/libcilium.so /tmp/libcilium.so

FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS builder-fresh
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY . ./
ARG V
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG BUILDARCH
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
#
# Clear runner's cache when building deps
#
RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache,id=$TARGETARCH,sharing=private rm -rf /cilium/proxy/.cache/*
#
# Build dependencies from scratch (no cache mounts, not archive mount)
#
RUN BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS} --disk_cache=/tmp/bazel-cache" PKG_BUILD=1 V=$V DEBUG=$DEBUG DESTDIR=/tmp/install make bazel-bin/cilium-envoy-starter bazel-bin/cilium-envoy

# By default this stage picks up the result of the build above, but ARCHIVE_IMAGE can be
# overridden to point to a saved image of an earlier run of that stage.
# Must pick the TARGETPLATFORM image here, so NO --platform=$BUILDPLATFORM, otherwise cross-compilation
# will pick up build-artifacts for the build platform when an external image is used.
FROM $ARCHIVE_IMAGE AS builder-cache

#
# Release builder, uses 'builder-cache' from $ARCHIVE_IMAGE
#
# Persist Bazel disk cache by passing COPY_CACHE=1
#
FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS builder
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY . ./
ARG V
ARG COPY_CACHE_EXT
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG RELEASE_DEBUG
ARG BUILDARCH
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
RUN ./bazel/get_workspace_status
RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache,id=$TARGETARCH,sharing=private \
    --mount=target=/tmp/bazel-cache,source=/tmp/bazel-cache,from=builder-cache,rw \
    if [ -f /tmp/bazel-cache/ENVOY_VERSION ]; then CACHE_ENVOY_VERSION=`cat /tmp/bazel-cache/ENVOY_VERSION`; ENVOY_VERSION=`cat ENVOY_VERSION`; if [ "${CACHE_ENVOY_VERSION}" != "${ENVOY_VERSION}" ]; then echo "Building Envoy ${ENVOY_VERSION} with bazel archive from different Envoy version (${CACHE_ENVOY_VERSION})"; else echo "Building Envoy ${ENVOY_VERSION} with bazel cache of the same version"; fi; else echo "Bazel cache has no ENVOY_VERSION, it may be empty."; fi && \
    touch /tmp/bazel-cache/permissions-check && \
    if [ -n "${COPY_CACHE_EXT}" ]; then PKG_BUILD=1 make BUILD_DEP_HASHES; if [ -f /tmp/bazel-cache/BUILD_DEP_HASHES ] && ! diff BUILD_DEP_HASHES /tmp/bazel-cache/BUILD_DEP_HASHES; then echo "Build dependencies have changed, clearing bazel cache"; rm -rf /tmp/bazel-cache/*; rm -rf /cilium/proxy/.cache/*; fi ; cp BUILD_DEP_HASHES ENVOY_VERSION /tmp/bazel-cache; fi && \
    BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS} --disk_cache=/tmp/bazel-cache" PKG_BUILD=1 V=$V DEBUG=$DEBUG RELEASE_DEBUG=$RELEASE_DEBUG DESTDIR=/tmp/install make install && \
    if [ -n "${COPY_CACHE_EXT}" ]; then cp -ra /tmp/bazel-cache /tmp/bazel-cache${COPY_CACHE_EXT}; ls -la /tmp/bazel-cache${COPY_CACHE_EXT}; fi
#
# Copy proxylib after build to allow install as non-root to succeed
#
COPY --from=proxylib /tmp/libcilium.so /tmp/install/usr/lib/libcilium.so

FROM scratch AS empty-builder-archive
LABEL maintainer="maintainer@cilium.io"
USER 1337:1337
WORKDIR /tmp/bazel-cache

# This stage retains only the build caches from the previous step. This is used as the target for persisting
# Bazel build caches for later re-use.
FROM empty-builder-archive AS builder-archive
ARG COPY_CACHE_EXT
COPY --from=builder /tmp/bazel-cache${COPY_CACHE_EXT}/ /tmp/bazel-cache/

# Format check
FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS check-format
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY --chown=1337:1337 . ./
ARG V
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
#
# Check format
#
RUN BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS}" PKG_BUILD=1 V=$V DEBUG=$DEBUG make V=1 format > format-output.txt

FROM scratch AS format
COPY --from=check-format /cilium/proxy/format-output.txt /

# clang-tidy
FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS run-clang-tidy-fix
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY --chown=1337:1337 . ./a
COPY --chown=1337:1337 . ./b
ARG V
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG TIDY_SOURCES="cilium/*.h cilium/*.cc tests/*.h tests/*.cc starter/*.h starter/*.cc"
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH
#
# Run clang tidy
#
RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache TIDY_SOURCES="${TIDY_SOURCES}" BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS}" PKG_BUILD=1 V=$V DEBUG=$DEBUG make -C b V=1 tidy-fix 2>&1 | tee /cilium/proxy/clang-tidy-output.txt && for file in ${TIDY_SOURCES}; do echo "\$ diff a/$file b/$file"  >> /cilium/proxy/clang-tidy-diff.txt && diff "a/$file" "b/$file" >> /cilium/proxy/clang-tidy-diff.txt || true; done

FROM scratch AS clang-tidy
COPY --from=run-clang-tidy-fix /cilium/proxy/*.txt /

#
# Extract installed cilium-envoy binaries to an otherwise empty image
#
FROM docker.io/library/ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
LABEL maintainer="maintainer@cilium.io"
# install ca-certificates package
RUN apt-get update && apt-get upgrade -y \
    && apt-get install --no-install-recommends -y ca-certificates libatomic1 \
    && apt-get autoremove -y && apt-get clean \
    && rm -rf /tmp/* /var/tmp/* \
    && rm -rf /var/lib/apt/lists/*
COPY --from=builder /tmp/install /


================================================
FILE: Dockerfile.builder
================================================
#
# Builder dependencies. This takes a long time to build from scratch!
# Also note that if build fails due to C++ internal error or similar,
# it is possible that the image build needs more RAM than available by
# default on non-Linux docker installs.
FROM docker.io/library/ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b AS base
LABEL maintainer="maintainer@cilium.io"
ARG TARGETARCH
# Setup TimeZone to prevent tzdata package asking for it interactively
ENV TZ=Etc/UTC

# renovate: datasource=golang-version depName=go
ENV GO_VERSION=1.26.3

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && \
    apt-get upgrade -y --no-install-recommends && \
    apt-get install -y --no-install-recommends \
      ca-certificates \
      # Multi-arch cross-compilation packages
      gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross binutils-aarch64-linux-gnu \
      gcc-x86-64-linux-gnu g++-x86-64-linux-gnu libc6-dev-amd64-cross binutils-x86-64-linux-gnu \
      libc6-dev \
      # Envoy Build dependencies
      autoconf automake cmake coreutils curl git libtool make ninja-build patch patchelf libatomic1 \
	python3 python-is-python3 unzip virtualenv wget zip \
      # Cilium-envoy build dependencies
      software-properties-common && \
    wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc && \
    apt-add-repository -y "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main" && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
      clang-18 clang-tidy-18 clang-tools-18 llvm-18-dev lldb-18 lld-18 clang-format-18 libc++-18-dev libc++abi-18-dev && \
    # Create unversioned symlinks so tools are available without -18 suffix
    ln -sf /usr/bin/clang-18 /usr/bin/clang && \
    ln -sf /usr/bin/clang++-18 /usr/bin/clang++ && \
    ln -sf /usr/bin/clang-cpp-18 /usr/bin/clang-cpp && \
    ln -sf /usr/bin/lld-18 /usr/bin/lld && \
    ln -sf /usr/bin/ld.lld-18 /usr/bin/ld.lld && \
    ln -sf /usr/bin/lldb-18 /usr/bin/lldb && \
    ln -sf /usr/bin/clang-format-18 /usr/bin/clang-format && \
    ln -sf /usr/bin/clang-tidy-18 /usr/bin/clang-tidy && \
    ln -sf /usr/bin/run-clang-tidy-18 /usr/bin/run-clang-tidy && \
    ln -sf /usr/bin/llvm-ar-18 /usr/bin/llvm-ar && \
    ln -sf /usr/bin/llvm-nm-18 /usr/bin/llvm-nm && \
    ln -sf /usr/bin/llvm-strip-18 /usr/bin/llvm-strip && \
    ln -sf /usr/bin/llvm-objcopy-18 /usr/bin/llvm-objcopy && \
    ln -sf /usr/bin/llvm-objdump-18 /usr/bin/llvm-objdump && \
    ln -sf /usr/bin/llvm-dwp-18 /usr/bin/llvm-dwp && \
    ln -sf /usr/bin/llvm-cov-18 /usr/bin/llvm-cov && \
    ln -sf /usr/bin/llvm-config-18 /usr/bin/llvm-config && \
    apt-get purge --auto-remove && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

#
# Install Bazelisk
#
# renovate: datasource=github-releases depName=bazelbuild/bazelisk
ENV BAZELISK_VERSION=v1.29.0

RUN ARCH=$TARGETARCH \
	&& curl -sfL https://github.com/bazelbuild/bazelisk/releases/download/${BAZELISK_VERSION}/bazelisk-linux-${ARCH} -o /usr/bin/bazel \
	&& chmod +x /usr/bin/bazel
#
# Install Go
#
RUN curl -sfL https://go.dev/dl/go${GO_VERSION}.linux-${TARGETARCH}.tar.gz -o go.tar.gz \
	&& tar -C /usr/local -xzf go.tar.gz \
	&& rm go.tar.gz \
	&& export PATH=$PATH:/usr/local/go/bin \
	&& go version
#
# Switch to non-root user for builds
#
RUN groupadd -f -g 1337 cilium && useradd -m -d /cilium/proxy -g cilium -u 1337 cilium
USER 1337:1337
WORKDIR /cilium/proxy


================================================
FILE: Dockerfile.tests
================================================
# 
# BUILDER_BASE is a multi-platform image with all the build tools
#
ARG BUILDER_BASE=quay.io/cilium/cilium-envoy-builder:6.5.0-latest@sha256:3f98b069a4c4737d8252fdf47f77d9f7e27ef5acb1bec13af3619180d6baee23

# Common Builder image used in cilium/cilium
ARG PROXYLIB_BUILDER=quay.io/cilium/cilium-builder:767c4152bb156a879fca4c5b76f445de4b4cdaa9@sha256:26392846fa25ab2607c120ece242d61365724a5f21e85f5733f72221637b70fa

#
# ARCHIVE_IMAGE defaults to the result of the first stage below,
# refreshing the build caches from Envoy dependencies before the final
# build stage. This can be overridden on docker build command line to
# use pre-built dependencies. Note that if cross-compiling, these
# pre-built dependencies will include BUILDPLATFORM build tools and
# TARGETPLATFORM build artifacts, and thus can only be reused when
# building on the same BUILDPLATFORM.
#
ARG ARCHIVE_IMAGE=builder-fresh

FROM --platform=$BUILDPLATFORM $PROXYLIB_BUILDER AS proxylib
WORKDIR /go/src/github.com/cilium/proxy
ARG TARGETARCH
RUN --mount=type=bind,readwrite,target=/go/src/github.com/cilium/proxy --mount=mode=0777,target=/cilium/proxy/.cache,type=cache --mount=mode=0777,target=/go/pkg,type=cache \
    GOARCH=${TARGETARCH} make -C proxylib all && mv proxylib/libcilium.so /tmp/libcilium.so

FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS builder-fresh
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY . ./
ARG V
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG BUILDARCH
ARG TARGETARCH
ARG NO_CACHE
ENV TARGETARCH=$TARGETARCH

#
# Build dependencies
#
# Make proxylib available for building the test dependencies by copying it before running the tests
COPY --from=proxylib /tmp/libcilium.so proxylib/libcilium.so
RUN BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS} --disk_cache=/tmp/bazel-cache" PKG_BUILD=1 V=$V DEBUG=$DEBUG make envoy-test-deps

# By default this stage picks up the result of the build above, but ARCHIVE_IMAGE can be
# overridden to point to a saved image of an earlier run of that stage.
FROM $ARCHIVE_IMAGE AS archive-cache

FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS builder
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY . ./
ARG V
ARG COPY_CACHE_EXT
ARG BAZEL_BUILD_OPTS
ARG DEBUG
ARG TARGETARCH
ENV TARGETARCH=$TARGETARCH

# Clear runner's cache when building deps
RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache,id=$TARGETARCH,sharing=private rm -rf /cilium/proxy/.cache/*
# Make proxylib available for building the test dependencies by copying it before running the tests
COPY --from=proxylib /tmp/libcilium.so proxylib/libcilium.so
RUN --mount=target=/tmp/bazel-cache,source=/tmp/bazel-cache,from=archive-cache,rw \
    if [ -f /tmp/bazel-cache/ENVOY_VERSION ]; then CACHE_ENVOY_VERSION=`cat /tmp/bazel-cache/ENVOY_VERSION`; ENVOY_VERSION=`cat ENVOY_VERSION`; if [ "${CACHE_ENVOY_VERSION}" != "${ENVOY_VERSION}" ]; then echo "Testing Envoy ${ENVOY_VERSION} with bazel archive from different Envoy version (${CACHE_ENVOY_VERSION})"; else echo "Testing Envoy ${ENVOY_VERSION} with bazel cache of the same version"; fi; else echo "Bazel cache has no ENVOY_VERSION, it may be empty."; fi && \
    touch /tmp/bazel-cache/permissions-check && \
    if [ -n "${COPY_CACHE_EXT}" ]; then PKG_BUILD=1 make BUILD_DEP_HASHES; if [ -f /tmp/bazel-cache/BUILD_DEP_HASHES ] && ! diff BUILD_DEP_HASHES /tmp/bazel-cache/BUILD_DEP_HASHES; then echo "Build dependencies have changed, clearing bazel cache"; rm -rf /tmp/bazel-cache/*; rm -rf /cilium/proxy/.cache/*; fi ; cp BUILD_DEP_HASHES ENVOY_VERSION /tmp/bazel-cache; fi && \
    BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS} --disk_cache=/tmp/bazel-cache" PKG_BUILD=1 V=$V DEBUG=$DEBUG make envoy-test-deps && \
    if [ -n "${COPY_CACHE_EXT}" ]; then cp -ra /tmp/bazel-cache /tmp/bazel-cache${COPY_CACHE_EXT}; fi

FROM --platform=$BUILDPLATFORM $BUILDER_BASE AS runner
LABEL maintainer="maintainer@cilium.io"
WORKDIR /cilium/proxy
COPY . ./
ARG V
ARG BAZEL_BUILD_OPTS
ARG BAZEL_TEST_OPTS
ARG DEBUG
ARG BUILDARCH
ARG TARGETARCH
ARG NO_CACHE
ENV TARGETARCH=$TARGETARCH

RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache,id=$TARGETARCH,sharing=private if [ -n "$NO_CACHE" ]; then rm -rf /cilium/proxy/.cache/*; fi
# Make proxylib available for the tests by copying it before running the tests
COPY --from=proxylib /tmp/libcilium.so proxylib/libcilium.so
RUN --mount=mode=0777,uid=1337,gid=1337,target=/cilium/proxy/.cache,type=cache,id=$TARGETARCH,sharing=private \
    --mount=target=/tmp/bazel-cache,source=/tmp/bazel-cache,from=archive-cache,rw \
    if [ "$TARGETARCH" != "$BUILDARCH" ]; then \
      if [ "$TARGETARCH" = "amd64" ]; then \
        # Allow running x86_64 test binaries via qemu \
        ln -s /usr/x86_64-linux-gnu/lib/ld-linux-x86-64.so.* /lib; \
        ln -s /lib /lib64; \
        ln -s /usr/x86_64-linux-gnu/lib /usr/cilium-cross-compat/lib; \
      elif [ "$TARGETARCH" = "arm64" ]; then \
        # Allow running aarch64 test binaries via qemu \
        ln -s /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.* /lib; \
        ln -s /usr/aarch64-linux-gnu/lib /usr/cilium-cross-compat/lib; \
      fi; \
    fi && \
    BAZEL_BUILD_OPTS="${BAZEL_BUILD_OPTS} --disk_cache=/tmp/bazel-cache" BAZEL_TEST_OPTS="${BAZEL_TEST_OPTS}" PKG_BUILD=1 V=$V DEBUG=$DEBUG make envoy-tests && \
    cp -Lr /cilium/proxy/bazel-testlogs testlogs

FROM scratch AS empty-builder-archive
LABEL maintainer="maintainer@cilium.io"
USER 1337:1337
WORKDIR /tmp/bazel-cache

# This stage retains only the build caches from the builder stage.
# This is used as the target for persisting Bazel build caches for later re-use.
FROM empty-builder-archive AS builder-archive
ARG COPY_CACHE_EXT
COPY --from=builder /tmp/bazel-cache${COPY_CACHE_EXT}/ /tmp/bazel-cache/

#
# Keep only the test logs
#
FROM scratch AS testlogs
LABEL maintainer="maintainer@cilium.io"
COPY --from=runner /cilium/proxy/testlogs testlogs


================================================
FILE: ENVOY_VERSION
================================================
envoy-1.37.2


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   END OF TERMS AND CONDITIONS

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

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

   Copyright {yyyy} Authors of Cilium

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

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

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



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

include Makefile.defs

MIN_CLANG_VERSION := 18.1.8
COMPILER_DEP := clang.bazelrc

ENVOY_BINS = cilium-envoy bazel-bin/cilium-envoy cilium-envoy-starter bazel-bin/cilium-envoy-starter
ENVOY_TESTS = bazel-bin/tests/*_test

BUILD_DEP_FILES = ENVOY_VERSION WORKSPACE .bazelrc envoy.bazelrc bazel/toolchains/BUILD bazel/toolchains/cc_toolchain_config.bzl

SHELL=/bin/bash -o pipefail
BAZEL ?= $(QUIET) bazel
BAZEL_FILTER ?=
BAZEL_OPTS ?=
BAZEL_BUILD_OPTS ?=
ifdef BAZEL_REMOTE_CACHE
  BAZEL_BUILD_OPTS += --remote_cache=$(BAZEL_REMOTE_CACHE)
endif

BAZEL_TEST_OPTS ?= --jobs=HOST_RAM*.0002 --test_timeout=100 --local_test_jobs=1 --flaky_test_attempts=3
BAZEL_TEST_OPTS += --test_output=errors

BUILDARCH := $(subst aarch64,arm64,$(subst x86_64,amd64,$(shell uname -m)))
# Default for the host architecture
ifndef TARGETARCH
  TARGETARCH := $(BUILDARCH)
endif

# ARCH=multi is only valid for docker builds, and gets resolved to individual targets for builds
# within the Dockerfile.
ifdef ARCH
  ifneq ($(ARCH),multi)
    TARGETARCH := $(ARCH)
  else
    # Split the cores when building for both targets
    BAZEL_BUILD_OPTS += --jobs=HOST_CPUS*.5
  endif
endif

# Extra opts are passed to docker targets, which will choose the bazel platform themselves
EXTRA_BAZEL_BUILD_OPTS := $(BAZEL_BUILD_OPTS)
BAZEL_PLATFORM := //bazel:linux_$(subst amd64,x86_64,$(subst arm64,aarch64,$(TARGETARCH)))
$(info BUILDING on $(BUILDARCH) for $(TARGETARCH) using $(BAZEL_PLATFORM))
BAZEL_BUILD_OPTS += --platforms=$(BAZEL_PLATFORM)

ifdef DEBUG
  BAZEL_BUILD_OPTS += -c dbg
else ifdef RELEASE_DEBUG
  BAZEL_BUILD_OPTS += --config=release_debug
else
  BAZEL_BUILD_OPTS += --config=release
endif

SUDO=
ifneq ($(shell whoami),root)
  SUDO=$(shell if sudo -h 1>/dev/null 2>/dev/null; then echo "sudo"; fi)
endif

# Use our own toolchain in all builds. Local builds need this to not pull in external Envoy sysroot
# that only supports glibc 2.31, while for Ubuntu 24.04 builds we need at least 2.38, and actually
# use 2.39.
$(info Registering C++ toolchains via BAZEL_BUILD_OPTS)
BAZEL_BUILD_OPTS += --extra_toolchains=//bazel/toolchains:all
# Use system LLVM instead of hermetic download to avoid libtinfo.so.5 mismatch
BAZEL_BUILD_OPTS += --repo_env=BAZEL_LLVM_PATH=/usr/lib/llvm-18

ifdef PKG_BUILD
  all: cilium-envoy-starter cilium-envoy

  .PHONY: install-bazelisk
  install-bazelisk:
	echo "Bazel assumed to be installed in the builder image"

  define install_clang
	echo "Clang assumed to be installed in the builder image"
  endef
else
  all: precheck cilium-envoy-starter cilium-envoy

  include Makefile.docker

  # Fetch and install Bazel if needed
  .PHONY: install-bazelisk
  install-bazelisk:
	tools/install_bazelisk.sh

  # Install clang if needed
  define install_clang
	add_llvm_source() { \
		if [ ! -f /etc/apt/trusted.gpg.d/apt.llvm.org.asc ]; then \
		  $(SUDO) wget -q -O /etc/apt/trusted.gpg.d/apt.llvm.org.asc https://apt.llvm.org/llvm-snapshot.gpg.key; \
		fi; \
		local CODENAME=$$(lsb_release -cs); \
		apt_source="deb http://apt.llvm.org/$$CODENAME/ llvm-toolchain-$$CODENAME-18 main" && \
		$(SUDO) apt-add-repository -y "$${apt_source}" && \
		$(SUDO) apt update; \
	}; \
	version="$$(dpkg-query -W -f='$${Version}' clang-18 2>/dev/null || echo 0)"; \
	if ! dpkg --compare-versions "$$version" ge 1:$(MIN_CLANG_VERSION)~; then add_llvm_source; fi; \
	$(SUDO) apt install -y clang-18 clangd-18 llvm-18-dev lld-18 lldb-18 clang-format-18 clang-tools-18 clang-tidy-18 libc++-18-dev libc++abi-18-dev
  endef
endif

include Makefile.dev

BUILD_DEP_HASHES: $(BUILD_DEP_FILES)
	sha256sum $^ >$@

clang.bazelrc: bazel/setup_clang.sh
	$(call install_clang)
	bazel/setup_clang.sh /usr/lib/llvm-18
	echo "build --config=clang-local" >> $@

.PHONY: bazel-bin/cilium-envoy
bazel-bin/cilium-envoy: $(COMPILER_DEP) SOURCE_VERSION install-bazelisk
	@$(ECHO_BAZEL)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) //:cilium-envoy $(BAZEL_FILTER)

cilium-envoy: bazel-bin/cilium-envoy
	mv $< $@

.PHONY: bazel-bin/cilium-envoy-starter
bazel-bin/cilium-envoy-starter: $(COMPILER_DEP) SOURCE_VERSION install-bazelisk
	@$(ECHO_BAZEL)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) //:cilium-envoy-starter $(BAZEL_FILTER)

cilium-envoy-starter: bazel-bin/cilium-envoy-starter
	mv $< $@

BAZEL_CACHE := $(subst --disk_cache=,,$(filter --disk_cache=%, $(BAZEL_BUILD_OPTS)))

GLIBC_VERSION ?= $(shell ldd --version | sed -n 's/.*GLIBC \([0-9.]\+\).*/\1/p')
GLIBC_DIR ?= $(LIBDIR)/glibc-$(GLIBC_VERSION)

$(DESTDIR)$(GLIBC_DIR): bazel-bin/cilium-envoy
	$(SUDO) $(INSTALL) -m 0755 -d $@
	LIBS=$$(readelf -d bazel-bin/cilium-envoy | sed -n 's/.*(NEEDED).*Shared library: \[\(.*\)\]/\1/p'); \
	ARCH_TAG=$$(echo $$LIBS | sed -n 's/.*ld-linux-\(.*\)\.so.*/\1/p' | tr - _); \
	echo "BUILD for $${ARCH_TAG}"; \
	for lib in $${LIBS}; do \
		$(SUDO) cp /usr/$${ARCH_TAG}-linux-gnu/lib/$$lib $@; \
	done

install: bazel-bin/cilium-envoy-starter bazel-bin/cilium-envoy
	$(SUDO) $(INSTALL) -m 0755 -d $(DESTDIR)$(BINDIR)
	$(SUDO) $(INSTALL) -m 0755 -T bazel-bin/cilium-envoy-starter $(DESTDIR)$(BINDIR)/cilium-envoy-starter
	$(SUDO) $(INSTALL) -m 0755 -T bazel-bin/cilium-envoy $(DESTDIR)$(BINDIR)/cilium-envoy

install-local: install
	$(SUDO) setcap 'cap_net_admin,cap_bpf+pe' $(DESTDIR)$(BINDIR)/cilium-envoy-starter
	$(SUDO) chmod u+s $(DESTDIR)$(BINDIR)/cilium-envoy-starter

install-glibc: install $(DESTDIR)$(GLIBC_DIR)
	LD_LINUX=$$(basename $$(patchelf --print-interpreter bazel-bin/cilium-envoy)); \
	$(SUDO) patchelf --set-interpreter $(GLIBC_DIR)/$${LD_LINUX} --set-rpath $(GLIBC_DIR) $(DESTDIR)$(BINDIR)/cilium-envoy-starter
	$(SUDO) patchelf --set-interpreter $(GLIBC_DIR)/$${LD_LINUX} --set-rpath $(GLIBC_DIR) $(DESTDIR)$(BINDIR)/cilium-envoy

# Remove the binaries
clean: force
	@$(ECHO_CLEAN) $(notdir $(shell pwd))
	-$(QUIET) rm -f $(ENVOY_BINS) $(ENVOY_TESTS)

proxylib/libcilium.so:
	make -C proxylib

.PHONY: envoy-test-deps
envoy-test-deps: $(COMPILER_DEP) SOURCE_VERSION proxylib/libcilium.so
	@$(ECHO_BAZEL)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) $(BAZEL_TEST_OPTS) //tests/... @envoy//test/integration:tcp_proxy_integration_test $(BAZEL_FILTER)

.PHONY: envoy-tests
envoy-tests: $(COMPILER_DEP) SOURCE_VERSION proxylib/libcilium.so
	@$(ECHO_BAZEL)
	# Upstream tcp_proxy_integration_test included to validate that our custom patches
	# didn't break anything
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) $(BAZEL_TEST_OPTS) //tests/... @envoy//test/integration:tcp_proxy_integration_test $(BAZEL_FILTER)

.PHONY: \
	install \
	force \
	force-non-root \
	force-root

force :;

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

force-non-root:
ifeq ($(USER),root)
	$(error This target cannot be run as root!)
endif


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

include Makefile.quiet

# Depends on Envoy dependencies, Envoy API & protoc must be built first

PROTOC ?= bazel-out/host/bin/external/com_google_protobuf/protoc

ENVOY_API_PROTO_PATH = bazel-proxy/external/envoy_api
CILIUM_PROTO_PATH = .
PROTO_DEPS = \
	-I bazel-proxy/external/com_google_protobuf/src \
	-I bazel-proxy/external/com_google_googleapis \
	-I bazel-proxy/external/com_envoyproxy_protoc_gen_validate \
	-I bazel-proxy/external/opentelemetry_proto \
	-I bazel-proxy/external/prometheus_metrics_model \
	-I bazel-proxy/external/com_github_cncf_xds \
	-I bazel-proxy/external/dev_cel/proto

GO_OUT = go
GO_MODULE = module=github.com/cilium/proxy/go

CILIUM_PROTO_SOURCES := \
	cilium/api/accesslog.proto \
	cilium/api/bpf_metadata.proto \
	cilium/api/l7policy.proto \
	cilium/api/network_filter.proto \
	cilium/api/npds.proto \
	cilium/api/nphds.proto
CILIUM_PROTO_DIRS := $(sort $(dir $(CILIUM_PROTO_SOURCES)))

export PATH:=$(HOME)/go/bin:$(PATH)

all: cilium-go-targets

.PHONY: cilium-go-targets
cilium-go-targets: $(CILIUM_PROTO_SOURCES) $(ENVOY_API_PROTO_PATH) Makefile.api
	GOFLAGS="$(GOFLAGS) -mod=mod" go install tool
	$(QUIET)set -e; \
	for path in $(CILIUM_PROTO_DIRS) ; do \
		$(ECHO_GEN) envoy/$$path; \
		$(PROTOC) -I $(ENVOY_API_PROTO_PATH) -I $(CILIUM_PROTO_PATH) $(PROTO_DEPS) "--go_out=$(GO_MODULE):$(GO_OUT)" "--go-grpc_out=$(GO_MODULE):$(GO_OUT)" "--validate_out=lang=go,$(GO_MODULE):$(GO_OUT)" $${path}*.proto; \
	done
	go mod tidy && go mod vendor

.PHONY: all


================================================
FILE: Makefile.defs
================================================
ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
include $(ROOT_DIR)/Makefile.quiet

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

# GO_NOQUIET should not have any Makefile directives.
GO_NOQUIET = go
GO = $(QUIET)$(GO_NOQUIET)
INSTALL = $(QUIET)install


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

CHECK_FORMAT ?= ./bazel-bin/check_format.py

BAZEL_CACHE ?= ~/.cache/bazel
BAZEL_ARCHIVE ?= ~/bazel-cache.tar.bz2

# @envoy_api//:v3_protos must be built before invoking Makefile.api
API_DEPS = @envoy_api//:v3_protos
PROTOC_TARGET = @com_google_protobuf//:protoc
api: force-non-root Makefile.api install-bazelisk
	PROTOC=`CARGO_BAZEL_REPIN=true $(BAZEL) cquery --output=starlark --starlark:expr=target.files_to_run.executable.path $(PROTOC_TARGET) | grep "fastbuild.*/bin/external"`; \
	CARGO_BAZEL_REPIN=true $(BAZEL) build $(PROTOC_TARGET) $(API_DEPS); \
	file $${PROTOC} && PROTOC=$${PROTOC} $(MAKE) -f Makefile.api all

api-clean:
	find go -name *.pb.go -delete
	find go -name *.pb.validate.go -delete
	find go -empty -type d -delete
	mkdir -p go/contrib/envoy
	mkdir go/envoy

$(CHECK_FORMAT): force-non-root SOURCE_VERSION install-bazelisk clang.bazelrc
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) build $(BAZEL_BUILD_OPTS) //:check_format.py

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

precheck: force-non-root
	tools/check_repositories.sh

FORMAT_EXCLUDED_PREFIXES = "./linux/" "./proxylib/" "./starter/"  "./vendor/" "./go/" "./envoy_build_config/" "./work/" "./bin/"

# The default set of sources assumes all relevant sources are dependecies of some tests!
TIDY_SOURCES ?= $(shell bazel query 'kind("source file", deps(//tests/...))' 2>/dev/null | sed -n "s/\/\/cilium:/cilium\//p; s/\/\/tests:/tests\//p")

# Must pass our bazel options to avoid discarding the analysis cache due to different options
# between this, check and build!
# Depend on the WORKSPACE and TIDY_SOURCES so that the database will be re-built if
# Envoy dependency or any of the source files has changed.
compile_commands.json: WORKSPACE $(TIDY_SOURCES) force-non-root
	CARGO_BAZEL_REPIN=true BAZEL_STARTUP_OPTION_LIST="$(BAZEL_OPTS)" BAZEL_BUILD_OPTION_LIST="$(BAZEL_BUILD_OPTS)" tools/gen_compilation_database.py --include_all //cilium/... //starter/... //tests/...

# Default number of jobs, derived from available memory
TIDY_JOBS ?= $$(( $(shell sed -n "s/^MemAvailable: *\([0-9]*\).*\$$/\1/p" /proc/meminfo) / 4500000 ))

# tidy uses run-clang-tidy, .clang-tidy must be present in the project directory and configured to
# ignore the same headers as .clangd. Unfortunately the configuration format is different.
tidy: compile_commands.json force-non-root
	run-clang-tidy -quiet -extra-arg="-Wno-unknown-pragmas" -checks=misc-include-cleaner -j $(TIDY_JOBS) $(TIDY_SOURCES) || echo "clang-tidy check failed, run 'make tidy-fix' locally to fix tidy errors."

tidy-fix: compile_commands.json force-non-root
	echo "clang-tidy fix results can contain duplicate or misplaced includes, check before committing!"
	run-clang-tidy -fix -format -style=file -quiet -extra-arg="-Wno-unknown-pragmas" -checks=misc-include-cleaner -j $(TIDY_JOBS) $(TIDY_SOURCES) || echo "clang-tidy fix produced changes, please commit them."

tidy-fix-head: compile_commands.json force-non-root
	echo "clang-tidy fix results can contain duplicate or misplaced includes, check before committing!"
	run-clang-tidy -fix -format -style=file -quiet -extra-arg="-Wno-unknown-pragmas" -checks=misc-include-cleaner -j $(TIDY_JOBS) $(shell git diff-tree --no-commit-id --name-only -r --diff-filter=d HEAD) || echo "clang-tidy fix produced changes, please commit them."

format: force-non-root
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) run $(BAZEL_BUILD_OPTS) @envoy//tools/code_format:check_format -- --path "$(PWD)" --skip_envoy_build_rule_check --add-excluded-prefixes $(FORMAT_EXCLUDED_PREFIXES) --bazel_tools_check_excluded_paths="./" --build_fixer_check_excluded_paths="./" check || echo "Format check failed, run 'make format-fix' locally to fix formatting errors."

format-fix: force-non-root
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) run $(BAZEL_BUILD_OPTS) @envoy//tools/code_format:check_format -- --path "$(PWD)" --skip_envoy_build_rule_check --add-excluded-prefixes $(FORMAT_EXCLUDED_PREFIXES) --bazel_tools_check_excluded_paths="." --build_fixer_check_excluded_paths="./" fix

# Run tests without debug by default.
tests:  $(COMPILER_DEP) force-non-root SOURCE_VERSION proxylib/libcilium.so install-bazelisk
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) //:envoy_binary_test $(BAZEL_FILTER)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) $(BAZEL_TEST_OPTS) //tests/... $(BAZEL_FILTER)
	$(MAKE) -C proxylib test

unstripped-tests:  $(COMPILER_DEP) force-non-root SOURCE_VERSION proxylib/libcilium.so install-bazelisk
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) --config=release_debug --fission=no --features=-per_object_debug_info //:envoy_binary_test $(BAZEL_FILTER)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) --config=release_debug --fission=no --features=-per_object_debug_info $(BAZEL_TEST_OPTS) //tests/... $(BAZEL_FILTER)

debug-tests:  $(COMPILER_DEP) force-non-root SOURCE_VERSION install-bazelisk
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c dbg --fission=no --features=-per_object_debug_info $(BAZEL_TEST_OPTS) //:envoy_binary_test $(BAZEL_FILTER)
	CARGO_BAZEL_REPIN=true $(BAZEL) $(BAZEL_OPTS) test $(BAZEL_BUILD_OPTS) -c dbg --fission=no --features=-per_object_debug_info $(BAZEL_TEST_OPTS) //tests/... $(BAZEL_FILTER)


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

# Always use buildx
DOCKER := $(QUIET)DOCKER_BUILDKIT=1 docker buildx

DOCKER_DEV_ACCOUNT ?= quay.io/cilium
# CACHE_REF ?= docker.io/cilium/cilium-dev:cilium-envoy-cache
CACHE_REF ?=
DOCKER_BUILD_OPTS ?=
DOCKER_CACHE_OPTS ?=
ifndef NO_CACHE
  ifneq ($(CACHE_REF),)
    DOCKER_CACHE_OPTS += --cache-from=$(CACHE_REF)
  endif
endif

ifeq ($(ARCH),amd64)
  DOCKER_PLATFORMS := --platform=linux/amd64
else ifeq ($(ARCH),arm64)
  DOCKER_PLATFORMS := --platform=linux/arm64
else ifeq ($(ARCH),multi)
  DOCKER_PLATFORMS := --platform=linux/arm64,linux/amd64
endif
DOCKER_BUILDER := $(shell docker buildx ls | grep -E -e "[a-zA-Z0-9-]+ \*" | cut -d ' ' -f1)
ifdef DOCKER_PLATFORMS
  ifneq (,$(filter $(DOCKER_BUILDER),default desktop-linux))
    DOCKER_BUILDKIT_DRIVER :=
    ifdef DOCKER_BUILDKIT_IMAGE
      DOCKER_BUILDKIT_DRIVER := --driver docker-container --driver-opt image=$(DOCKER_BUILDKIT_IMAGE)
    endif
    BUILDER_SETUP := $(shell docker buildx create $(DOCKER_PLATFORMS) $(DOCKER_BUILDKIT_DRIVER) --use)
    DOCKER_BUILDER := $(shell docker buildx ls | grep -E -e "[a-zA-Z0-9-]+ \*" | cut -d ' ' -f1)
  endif
endif
ifneq ($(DOCKER_BUILDER),default)
  # Only insert '--push' or '--output' if the user did not pass a conflicting '--output' or '--load' option
  ifeq ($(filter --output --load,$(DOCKER_BUILD_OPTS)),)
    ifdef IMAGE_PUSH
      # Push to registry if explicit push is enforce via IMAGE_PUSH=1 (needs auth)
      DOCKER_BUILD_OPTS += --push
    else ifeq ($(ARCH),multi)
      # Push to registry if multi-arch is enforced via ARCH=multi (needs auth)
      # (It's not supported to write multi-arch builds to the local Docker registry)
      DOCKER_BUILD_OPTS += --push
    else
      # Push to local docker registry by default
      DOCKER_BUILD_OPTS += --output type=docker
    endif
  endif
  DOCKER_BUILD_OPTS += $(DOCKER_PLATFORMS)
  ifdef CACHE_PUSH
    DOCKER_CACHE_OPTS += --cache-to=$(CACHE_PUSH),mode=max
  endif
endif
$(info Using Docker Buildx builder "$(DOCKER_BUILDER)" with build flags "$(DOCKER_BUILD_OPTS)".)

HYPHEN = -
ARCH ?= $(subst aarch64,arm64,$(subst x86_64,amd64,$(patsubst i%86,386,$(shell uname -m))))
# Add -<arch> suffix if ARCH is not "multi"
ifeq ($(ARCH),multi)
  ARCH :=
else
  IMAGE_ARCH := $(HYPHEN)$(ARCH)
endif

SOURCE_VERSION :=

# This makefile may only be used with a git repo present
SOURCE_VERSION := $(shell git rev-parse HEAD)
SOURCE_VERSION: force
	@if [ "$(SOURCE_VERSION)" != "`cat 2>/dev/null SOURCE_VERSION`" ] ; then echo "$(SOURCE_VERSION)" >SOURCE_VERSION; fi

ENVOY_VERSION := $(shell cat ENVOY_VERSION)
BAZEL_VERSION := $(shell cat .bazelversion)
BRANCH_NAME ?= $(shell git rev-parse --abbrev-ref HEAD)
BRANCH_TAG := $(shell echo $(BRANCH_NAME) | tr -c '[:alnum:]_.\n-' '-')

# target for builder archive
BUILDER_ARCHIVE_TAG ?= main-archive-latest
TESTS_ARCHIVE_TAG ?= test-main-archive-latest

BUILDER_DOCKER_HASH=$(shell git ls-tree --full-tree HEAD -- ./Dockerfile.builder | awk '{ print $$3 }')
BUILDER_BASE_TAG ?= $(BUILDER_DOCKER_HASH)
BUILDER_BASE ?= $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(BUILDER_BASE_TAG)

BUILD_IMAGE_OPTS := --build-arg BUILDER_BASE="$(BUILDER_BASE)"
TESTS_IMAGE_OPTS := --build-arg BUILDER_BASE="$(BUILDER_BASE)"

ifdef DEBUG
  BUILD_IMAGE_OPTS += --build-arg DEBUG=$(DEBUG)
else ifdef RELEASE_DEBUG
  BUILD_IMAGE_OPTS += --build-arg RELEASE_DEBUG=$(RELEASE_DEBUG)
endif

ifndef NO_ARCHIVE
  ifndef ARCHIVE_IMAGE
    # Default builder refresh image ref
    ARCHIVE_IMAGE := $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(BUILDER_ARCHIVE_TAG)
    TESTS_ARCHIVE_IMAGE := $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(TESTS_ARCHIVE_TAG)
  else
    TESTS_ARCHIVE_IMAGE := $(ARCHIVE_IMAGE)
  endif
endif

ifdef NO_CACHE
  DOCKER_CACHE_OPTS += --build-arg NO_CACHE=$(NO_CACHE)
  ifeq ($(NO_CACHE),2)
    DOCKER_CACHE_OPTS += --no-cache
  endif
endif

ifdef DEBUG
  DOCKER_BUILD_OPTS += --build-arg DEBUG=$(DEBUG)
  DEBUG_TAG := -debug
endif

ifdef ARCHIVE_IMAGE
  BUILD_IMAGE_OPTS += --build-arg ARCHIVE_IMAGE=$(ARCHIVE_IMAGE)
endif

ifdef TESTS_ARCHIVE_IMAGE
  TESTS_IMAGE_OPTS += --build-arg ARCHIVE_IMAGE=$(TESTS_ARCHIVE_IMAGE)
endif

# Builder image consists only of build tools, so it only needs .bazelversion
Dockerfile.builder.dockerignore:
	echo "*" >$@
	echo "!/.bazelversion" >>$@

# Builder image for tests consists only of build tools, so it only needs .bazelversion
Dockerfile.builder.tests.dockerignore:
	echo "*" >$@
	echo "!/.bazelversion" >>$@

# Release does not need Go API or test files
Dockerfile.dockerignore: .dockerignore Makefile.docker
	cp $< $@
	echo "/tests/" >>$@
	echo "/Makefile.api" >>$@
	echo "/envoy_binary_test.sh" >>$@

Dockerfile.tests.dockerignore: .dockerignore Makefile.docker
	cp $< $@
	echo "/Makefile.api" >>$@

# None of the docker builds need these. '-H' to not follow symbolic links.
GIT_IGNORE_FILES := $(shell find -H . -not -path "./_build*" -not -path "./vendor*" -name .gitignore -print)
.dockerignore: .gitignore Makefile.docker
	echo "/.git/" >$@
	echo $(dir $(GIT_IGNORE_FILES)) | tr ' ' '\n' | xargs -P1 -n1 -I {DIR} sed \
	    -e '# Remove lines with white space, comments and files that must be passed to docker, "$$" due to make. #' \
		-e '/^[[:space:]]*$$/d' -e '/^#/d' -e '/SOURCE_VERSION/d' \
	    -e '# Apply pattern in all directories if it contains no "/", keep "!" up front. #' \
		-e '/^[^!/][^/]*$$/s<^<**/<' -e '/^![^/]*$$/s<^!<!**/<' \
            -e '# Prepend with the directory name, keep "!" up front. #' \
		-e '/^[^!]/s<^<{DIR}<' -e '/^!/s<^!<!{DIR}<' \
	    -e '# Remove leading "./", keep "!" up front. #' \
		-e 's<^\./<<' -e 's<^!\./<!<' \
	    -e '# Append newline to the last line if missing. GNU sed does not do this automatically. #' \
		-e "$$a" \
	    $< >>$@
	echo "/.gitignore" >>$@
	echo "/Dockerfile*" >>$@
	echo "/Makefile.docker" >>$@
	echo "/README*" >>$@

.PHONY: docker-image-builder
docker-image-builder: Dockerfile.builder SOURCE_VERSION Dockerfile.builder.dockerignore
	$(DOCKER) build $(DOCKER_BUILD_OPTS) --build-arg BAZEL_BUILD_OPTS="$(EXTRA_BAZEL_BUILD_OPTS)" --build-arg BUILDER_BASE="$(BUILDER_BASE)" -f $< -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(BUILDER_BASE_TAG) .

.PHONY: docker-builder-archive
docker-builder-archive: Dockerfile SOURCE_VERSION Dockerfile.dockerignore
	$(DOCKER) build --target builder-archive $(DOCKER_BUILD_OPTS) $(DOCKER_CACHE_OPTS) $(BUILD_IMAGE_OPTS) --build-arg BAZEL_BUILD_OPTS="$(EXTRA_BAZEL_BUILD_OPTS)" --build-arg COPY_CACHE_EXT=.new -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(BUILDER_ARCHIVE_TAG) .

.PHONY: docker-tests-archive
docker-tests-archive: Dockerfile.tests SOURCE_VERSION Dockerfile.tests.dockerignore
	$(DOCKER) build --target builder-archive $(DOCKER_BUILD_OPTS) $(DOCKER_CACHE_OPTS) $(TESTS_IMAGE_OPTS) --build-arg BAZEL_BUILD_OPTS="$(EXTRA_BAZEL_BUILD_OPTS)" --build-arg COPY_CACHE_EXT=.new -f $< -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-builder:$(TESTS_ARCHIVE_TAG) .

ifeq ($(BRANCH_TAG),main)
  DOCKER_TESTS_TAGS += -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy:latest$(IMAGE_ARCH)$(DEBUG_TAG)-testlogs
else
  DOCKER_TESTS_TAGS ?= -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-dev:$(BRANCH_TAG)$(IMAGE_ARCH)$(DEBUG_TAG)-testlogs
endif

.PHONY: docker-tests
docker-tests: Dockerfile.tests SOURCE_VERSION Dockerfile.tests.dockerignore
	$(DOCKER) build --progress=plain $(subst --push,--load,$(DOCKER_BUILD_OPTS)) $(DOCKER_CACHE_OPTS) $(TESTS_IMAGE_OPTS) --build-arg BAZEL_BUILD_OPTS="$(EXTRA_BAZEL_BUILD_OPTS)" --build-arg BAZEL_TEST_OPTS="$(BAZEL_TEST_OPTS)" -f $< $(DOCKER_TESTS_TAGS) .

ifeq ($(BRANCH_TAG),main)
  DOCKER_IMAGE_ENVOY_TAGS := -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy:$(SOURCE_VERSION)$(IMAGE_ARCH)$(DEBUG_TAG)
  DOCKER_IMAGE_ENVOY_TAGS += -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy:latest$(IMAGE_ARCH)$(DEBUG_TAG)
else
  DOCKER_IMAGE_ENVOY_TAGS ?= -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-dev:$(BRANCH_TAG)$(IMAGE_ARCH)$(DEBUG_TAG)
  DOCKER_IMAGE_ENVOY_TAGS += -t $(DOCKER_DEV_ACCOUNT)/cilium-envoy-dev:$(SOURCE_VERSION)$(IMAGE_ARCH)$(DEBUG_TAG)
endif

.PHONY: docker-image-envoy
docker-image-envoy: Dockerfile SOURCE_VERSION Dockerfile.dockerignore
	@$(ECHO_GEN) docker-image-envoy
	$(DOCKER) build $(DOCKER_BUILD_OPTS) $(DOCKER_CACHE_OPTS) $(BUILD_IMAGE_OPTS) --build-arg BAZEL_BUILD_OPTS="$(EXTRA_BAZEL_BUILD_OPTS)" $(DOCKER_IMAGE_ENVOY_TAGS) .


================================================
FILE: Makefile.quiet
================================================
ifeq ($(V),0)
	QUIET=@
	ECHO_CC=echo "  CC    $(notdir $(shell pwd))/$@"
	ECHO_GEN=echo "  GEN   $(notdir $(shell pwd))/"
	ECHO_GO=echo "  GO    $(notdir $(shell pwd))/$@"
	ECHO_CHECK=echo "  CHECK"
	ECHO_BAZEL=echo "  BAZEL $(notdir $(shell pwd))/$(notdir $(shell dirname $(ENVOY_BIN)))/$@"
	ECHO_GINKGO=echo "  GINKG $(notdir $(shell pwd))"
	ECHO_CLEAN=echo "  CLEAN"
	SPHINXOPTS+="-q"
else
	# The whitespace at below EOLs is required for verbose case!
	ECHO_CC=: 
	ECHO_GEN=: 
	ECHO_GO=: 
	ECHO_CHECK=: 
	ECHO_BAZEL=: 
	ECHO_GINKGO=: 
	ECHO_CLEAN=: 
endif



================================================
FILE: README.md
================================================
# Cilium Proxy

[Envoy proxy](https://github.com/envoyproxy/envoy) for Cilium with
minimal Envoy extensions and Cilium policy enforcement filters. Cilium
uses this as its host proxy for enforcing HTTP and other L7 policies
as specified in [network
policies](https://docs.cilium.io/en/latest/concepts/kubernetes/policy/#k8s-policy)
for the cluster. Cilium proxy is distributed within the Cilium images.

## Version compatibility matrix

The following table shows the Cilium proxy version compatibility with supported upstream Cilium versions.
Other combinations may work but are not tested.

Note: The below table is updated by script `tools/update_version_matrix.sh`

| Cilium Version | Envoy version |
|----------------|---------------|
| (main)         | v1.36.x       |
| v1.19.0        | v1.35.9       |
| v1.18.7        | v1.35.9       |
| v1.18.6        | v1.35.9       |
| v1.18.5        | v1.34.12      |
| v1.18.4        | v1.34.10      |
| v1.18.3        | v1.34.10      |
| v1.18.2        | v1.34.7       |
| v1.18.1        | v1.34.4       |
| v1.18.0        | v1.34.4       |
| v1.17.13       | v1.35.9       |
| v1.17.12       | v1.34.12      |
| v1.17.11       | v1.34.12      |
| v1.17.10       | v1.34.10      |
| v1.17.9        | v1.34.10      |
| v1.17.8        | v1.33.9       |
| v1.17.7        | v1.33.6       |
| v1.17.6        | v1.33.4       |
| v1.17.5        | v1.32.6       |
| v1.17.4        | v1.32.6       |
| v1.17.3        | v1.32.5       |
| v1.17.2        | v1.31.5       |
| v1.17.1        | v1.31.5       |
| v1.17.0        | v1.31.5       |

## Building

Cilium proxy is best built with the provided build containers. For a
local host build consult [the builder
Dockerfile](https://github.com/cilium/proxy/blob/main/Dockerfile.builder)
for the required dependencies.

Container builds require Docker Buildkit and optionally Buildx for
multi-arch builds. Builds are currently only supported for amd64 and
arm64 targets. For arm64 both native and cross compile on amd64 are
supported.  Container builds produce container images by
default. These images can not be run by themselves as they do not
contain the required runtime dependencies. To run the Cilium proxy the
binary `/usr/bin/cilium-envoy` needs to be copied from the image to a
compatible runtime environment, such as Ubuntu 20.04, or 22.04.

The provided container build tools work on both Linux and macOS.

To build the Cilium proxy in a docker container for the host
architecture only:

```
make docker-image-envoy
```

This will write the image to the local Docker registry.

Depending on hour host CPU and memory resources a fresh build can take
an hour or more. Docker caching will speed up subsequent builds.

> If your build fails due to a compiler failure the most likely reason
> is the compiler running out of memory. You can mitigate this by
> limiting the number of concurrent build jobs by passing environment
> variable `BAZEL_BUILD_OPTS=--jobs=2` to `make`. By default the
> number of jobs is the number of CPUs available for the build, and
> for some complex C++ sources this may be too much.  Note that
> changing the value of `BAZEL_BUILD_OPTS` invalidates Docker caches
> for the build stages.


### Multi-arch builds

Build target architecture can be specified by passing `ARCH`
environment variable to `make`. Supported values are `amd64` (only on
amd64 hosts), `arm64` (on arm64 or amd64 hosts), and `multi` (on amd64
hosts). `multi` builds for all the supported architectures, currrently
amd64 and arm64:

```
ARCH=multi make docker-image-envoy
```

This will try to push the images to the container registry. Appropriate
authentication is required. (Pushing to the local Docker registry isn't
supported for multi-arch builds. See [Docker documentation](https://docs.docker.com/reference/cli/docker/buildx/build/#docker))

Builds will be performed concurrently when building for multiple
architectures on a single machine. You most likely need to limit the
number of jobs allowed for each builder, see the note above for
details.

Docker builds are done using Docker Buildx by default when `ARCH` is
explicitly passed to `make`. You can also force Docker Buildx to be
used when building for the host platform only (by not defining `ARCH`)
by defining `DOCKER_BUILDX=1`. A new buildx builder instance will be
created for amd64 and arm64 cross builds if the current builder is set
to `default`.

> Buildx builds will push the build result to
> `quay.io/cilium/cilium-envoy:<GIT_SHA>` by default. You can change
> the first two parts of this by defining
> `DOCKER_DEV_ACCOUNT=docker.io/me` for your own docker hub account.
> You can also request the build results to be output to your local
> directory instead by defining `DOCKER_BUILD_OPTS=--output=out`,
> where `out` is a local directory name or use 
> `DOCKER_BUILD_OPTS="--output=type=docker"` to load it into the
> local Docker daemon.

#### Building for the Raspberry Pi kernel

By default Raspberry Pi OS and other OSes using the 
[Raspberry Pi kernel](https://github.com/raspberrypi/linux) will
not be able to use Envoy as their default `CONFIG_ARM64_VA_BITS_39`
configuration [is not compatible with tcmalloc](https://github.com/raspberrypi/linux/issues/4375).

A workaround is to compile the Envoy proxy with `gperftools`: 
```
ARCH=arm64 BAZEL_BUILD_OPTS="--define tcmalloc=gperftools" make docker-image-envoy
```

This image can then be used in the [Envoy DaemonSet mode](https://docs.cilium.io/en/stable/security/network/proxy/envoy/#enable-and-configure-envoy-daemonset).

### Using custom pre-compiled Envoy dependencies

Docker build uses cached Bazel artifacts from
`quay.io/cilium/cilium-envoy-builder:main-archive-latest` by
default. You can override this by defining `ARCHIVE_IMAGE=<ref>`:

```
ARCH=multi ARCHIVE_IMAGE=docker.io/me/cilium-envoy-archive make docker-image-envoy
```

> Bazel build artifacts contain toolchain specific data and binaries
> that are not compatible between native and cross-compiled
> builds. For now the image ref shown above is for builds on amd64
> only (native amd64, cross-compiled arm64).

Define `NO_CACHE=1` to clear the local build cache before the build, and `NO_ARCHIVE=1` to build
from scratch, but be warned that this can take a long time.

### Docker caching

By default the build also tries to pull Docker build caches from
`docker.io/cilium/cilium-dev:cilium-envoy-cache`. You can override
this with our own build cache, which you can also update with the
`CACHE_PUSH=1` definition:

```
ARCH=multi CACHE_REF=docker.io/me/cilium-proxy:cache CACHE_PUSH=1 make docker-image-envoy
```

`NO_CACHE=1` can be used to disable docker cache pulling.

In a CI environment it might be a good idea to push a new cache image
after each main branch commit.


### Updating the pre-compiled Envoy dependencies

Build and push a new version of the pre-compiled Envoy dependencies by:

```
ARCH=multi make docker-builder-archive
```

By default the pre-compiled dependencies image is tagged as
`quay.io/cilium/cilium-envoy-builder:main-archive-latest`. You
can override the first two parts of this by defining
`DOCKER_DEV_ACCOUNT=docker.io/me`,
`BUILDER_ARCHIVE_TAG=my-builder-archive`, or completely by defining
`ARCHIVE_IMAGE=<ref>`.

Pre-compiled Envoy dependencies need to be updated only when Envoy
version is updated or patched enough to increase compilation time
significantly. To do this you should update Envoy version in
`ENVOY_VERSION` and supply `NO_CACHE=1` and `NO_ARCHIVE=1` on the make line, e.g.:

```
ARCH=multi NO_CACHE=1 NO_ARCHIVE=1 BUILDER_ARCHIVE_TAG=main-archive-latest make docker-builder-archive
```


## Updating the builder image

The required Bazel version typically changes from one Envoy release to
another. To create a new builder image first update the required Bazel
version at `.bazelversion` and then run:

```
ARCH=multi NO_CACHE=1 NO_ARCHIVE=1 make docker-image-builder
```

The builder can not be cross-compiled as native build tools are needed
for native arm64 builds. This means that for non-native builds QEMU
CPU emulation is used instead of cross-compilation. If you have an
arm64 machine you can create a Docker buildx builder to use it for
native builds.

The builder image is tagged as
"quay.io/cilium/cilium-envoy-builder:bazel-<version>". Change the
BUILDER_BASE ARG in `Dockerfile` to use the new builder and commit the
result.

For testing purposes you can define `DOCKER_DEV_ACCOUNT` as explained
above to push the builder into a different registry or account.


## Running integration tests

To run Cilium Envoy integration tests in a docker container:

```
make docker-tests
```

This runs the integration tests after loading Bazel build cache for
Envoy dependencies from
`quay.io/cilium/cilium-envoy-builder:test-main-archive-latest`. Define
`NO_ARCHIVE=1` and `NO_CACHE=1` to compile tests from scratch.

This command fails if any of the integration tests fail, printing the
failing test logs on console.

> Note that cross-compiling is not supported for running tests, so
> specifying `ARCH` is only supported for the native platform.
> `ARCH=multi` will fail.


### Updating the pre-compiled Envoy test dependencies

Build and push a new version of the pre-compiled test dependencies by:

```
make docker-tests-archive
```

By default the pre-compiled test dependencies image is tagged as
`quay.io/cilium/cilium-envoy-builder:test-main-archive-latest`. You
can override the first two parts of this by defining
`DOCKER_DEV_ACCOUNT=docker.io/me`,
`TESTS_ARCHIVE_TAG=my-test-archive`, or completely by defining
`ARCHIVE_IMAGE=<ref>`.

Pre-compiled Envoy test dependencies need to be updated only when
Envoy version is updated or patched enough to increase compilation
time significantly. To do this you should update Envoy version
in `ENVOY_VERSION` and supply `NO_ARCHIVE=1` and `NO_CACHE=1` on
the make line, e.g.:

```
ARCH=amd64 NO_ARCHIVE=1 NO_CACHE=1 make docker-tests-archive
```


## Updating generated API

[Cilium project](https://github.com/cilium/cilium) vendors Cilium extensions from this repository. To update
the generated API files, run:

```
make api
```

`rm` is needed to clean up API files that are no longer generated for
Envoy. **Do not** remove files at `go/cilium/` as some of them are not
automatically generated!

Commit the results and update
[Cilium](https://github.com/cilium/cilium) to vendor this new commit.


================================================
FILE: UPGRADE_ENVOY.md
================================================
# Envoy Upgrade

Occasionally, we need to bump Envoy minor release version to support new
upstream features, or for any security fixes with patch version.

The recent PR [#417](https://github.com/cilium/proxy/pull/417) can be used
as reference.

For the patch release, we normally just need to do [Update Envoy release commit hash](#update-envoy-release-commit-hash) most of the time.
If there is no security fix involved, we can just Renovate Bot to perform
the upgrade automatically.

### Sync up Bazel version

New Envoy minor version might require new Bazel version.

1. Update `.bazelversion` file.
2. Sync up `WORKSPACE` file with upstream.
3. Sync up `envoy.bazelrc` file with upstream.

```shell
# Building a new builder image locally with your own docker account
$ DOCKER_DEV_ACCOUNT=docker.io/sayboras ARCH=multi NO_CACHE=1 make docker-image-builder

# Export the builder image environment variable for later use
$ export BUILDER=docker.io/sayboras/cilium-envoy-builder:6.3.2-35ff82a25ab6321721eba727a1cc23fe7c240d5f@sha256:028da98e1c815d12250cc32327f3511016a859a027c0136d1ac7a4a178fbfe41
```

### Update Envoy release commit hash
1. Bump version in `ENVOY_VERSION` file.
2. Update git hash from Envoy official release in `WORKSPACE`.
3. Sync up `envoy_build_config/extensions_build_config.bzl` with upstream.

### Adjust Cilium custom patches

Currently, we are maintaining a couple of custom patches in `patches` directory.
These patches should be applied successfully on top of new Envoy baseline.

The easiest way to do this is to apply the patches on top of `envoyproxy/envoy` repository.

```shell
# Run `git am` command in `envoyproxy/envoy` repository with local patch files.
$ git am ../../cilium/proxy/patches/0001-network-Add-callback-for-upstream-authorization.patch
$ git am ../../cilium/proxy/patches/0002-listener-add-socket-options.patch
$ git am ../../cilium/proxy/patches/0003-original_dst_cluster-Avoid-multiple-hosts-for-the-sa.patch
$ git am ../../cilium/proxy/patches/0004-thread_local-reset-slot-in-worker-threads-first.patch
$ git am ../../cilium/proxy/patches/0005-http-header-expose-attribute.patch
$ git am ../../cilium/proxy/patches/0006-liburing-arm-build.patch

# Export all the patch file, assume that we are upgrading to v1.28.
# Then you can copy these patch files to `cilium/proxy/patches` directory.
$ git format-patch upstream/release/v1.28
```

### Adjust Cilium custom filters

We are maintaining a couple of custom filters in `cilium` directory. The
easiest way is to just run the compilation and fix any issues coming up.

```shell
# Please refer to main README.md for the details of how to build.
$ DOCKER_DEV_ACCOUNT=docker.io/sayboras BUILDER_BASE=$BUILDER ARCH=multi NO_CACHE=1 make docker-image-envoy
```

### Update Envoy API

Double check if we need to update any dependency in `Makefile.api` godeps target, otherwise
just run `make api` and submit the changes.

The last step is to pray for CI to be green, and then merge it in :pray:.


================================================
FILE: Vagrantfile
================================================
# -*- mode: ruby -*-
# vi: set ft=ruby :

$VM_MEMORY = (ENV['VM_MEMORY'] || 4096)
$VM_CPUS = (ENV['VM_CPUS'] || 4)
# Requires `vagrant plugin install vagrant-disksize`
$VM_DISK = (ENV['VM_DISK'] || "100GB")

$GO_VERSION = (ENV['GO_VERSION'] || "1.22.0")

## Some inline scripts for installation
$go_install = <<-'SCRIPT'
# Install golang
GO_VERSION=$1
curl -O https://storage.googleapis.com/golang/go$GO_VERSION.linux-amd64.tar.gz && \
    rm -rf /usr/local/go \
    && tar -C /usr/local -xzf go$GO_VERSION.linux-amd64.tar.gz \
    && rm -rf go$GO_VERSION.linux-amd64.tar.gz && \
    echo 'export PATH=$PATH:/usr/local/go/bin:/home/vagrant/go/bin' >> /home/vagrant/.bashrc
SCRIPT

# This is same as what mentioned in Docker.builder.tests
$dependencies = <<-'SCRIPT'
apt-get update && \
    apt-get upgrade -y --no-install-recommends && \
    apt-get install -y --no-install-recommends \
      ca-certificates \
      gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross binutils-aarch64-linux-gnu \
      gcc-x86-64-linux-gnu g++-x86-64-linux-gnu libc6-dev-amd64-cross binutils-x86-64-linux-gnu \
      libc6-dev \
      autoconf automake cmake coreutils curl git libtool make ninja-build patch patchelf \
      python3 python-is-python3 unzip virtualenv wget zip \
      software-properties-common && \
    wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc && \
    apt-add-repository -y "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main" && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
      clang-18 clangd-18 llvm-18-dev lld-18 lldb-18 clang-format-18 clang-tools-18 clang-tidy-18 libc++-18-dev libc++abi-18-dev && \
    apt-get purge --auto-remove && \
    apt-get clean
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-24.04"
  config.disksize.size = $VM_DISK

  config.vm.provider "virtualbox" do |vb|
    # Customize the amount of memory on the VM:
    vb.memory = $VM_MEMORY
    vb.cpus = $VM_CPUS
  end
  config.vm.synced_folder ".", "/home/vagrant/proxy"

  config.vm.provision "docker"
  config.vm.provision "shell", inline: $go_install, args: $GO_VERSION
  config.vm.provision "shell", inline: $dependencies
end


================================================
FILE: WORKSPACE
================================================
workspace(name = "cilium")

ENVOY_PROJECT = "envoyproxy"

ENVOY_REPO = "envoy"

# Envoy GIT commit SHA of release
#
# We grep for the following line to generate SOURCE_VERSION file for non-git
# distribution builds. This line must start with the string ENVOY_SHA followed by
# an equals sign and a git SHA in double quotes.
#
# No other line in this file may have ENVOY_SHA followed by an equals sign!
#
# renovate: datasource=github-releases depName=envoyproxy/envoy digestVersion=v1.37.2
ENVOY_SHA = "5afe27fb338b16d5bb06b3a7198bcd581b4e3dee"

# // clang-format off: unexpected @bazel_tools reference, please indirect via a definition in //bazel
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
# // clang-format on

local_repository(
    name = "envoy_build_config",
    path = "envoy_build_config",
)

# This is a local repository for local development instead of git repository for faster feedback loop
#local_repository(
#    name = "envoy",
#    # Update the path to point to your local Envoy repository.
#    path = "/home/tammach/go/src/github.com/envoyproxy/envoy",
#)

git_repository(
    name = "envoy",
    commit = ENVOY_SHA,
    patch_args = ["apply"],
    patch_tool = "git",
    patches = [
        "@//patches:0001-network-Add-callback-for-upstream-authorization.patch",
        "@//patches:0002-listener-add-socket-options.patch",
        "@//patches:0003-original_dst_cluster-Avoid-multiple-hosts-for-the-sa.patch",
        "@//patches:0004-thread_local-reset-slot-in-worker-threads-first.patch",
        "@//patches:0005-http-header-expose-attribute.patch",
        "@//patches:0006-test-integration-Defer-fake-upstream-read-enable-un.patch",
        "@//patches:0008-repo-Make-yq-dependency-optional-for-CI-config-parsi.patch",
    ],
    # // clang-format off: Envoy's format check: Only repository_locations.bzl may contains URL references
    remote = "https://github.com/envoyproxy/envoy.git",
    # // clang-format on
)

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

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

envoy_api_binding()

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

envoy_api_dependencies()

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

envoy_dependencies()

load("@envoy//bazel:bazel_deps.bzl", "envoy_bazel_dependencies")

envoy_bazel_dependencies()

load("@envoy//bazel:repositories_extra.bzl", "envoy_dependencies_extra")

envoy_dependencies_extra()

load("@envoy//bazel:python_dependencies.bzl", "envoy_python_dependencies")

envoy_python_dependencies()

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

go_repository(
    name = "org_golang_x_text",
    build_external = "external",
    importpath = "golang.org/x/text",
    sum = "h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=",
    version = "v0.33.0",
)

go_repository(
    name = "org_golang_x_tools",
    build_external = "external",
    importpath = "golang.org/x/tools",
    sum = "h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=",
    version = "v0.41.0",
)

go_repository(
    name = "org_golang_x_net",
    build_external = "external",
    importpath = "golang.org/x/net",
    sum = "h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=",
    version = "v0.49.0",
)

go_repository(
    name = "org_golang_x_sys",
    build_external = "external",
    importpath = "golang.org/x/sys",
    sum = "h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=",
    version = "v0.42.0",
)

go_repository(
    name = "org_golang_x_mod",
    build_external = "external",
    importpath = "golang.org/x/mod",
    sum = "h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=",
    version = "v0.32.0",
)

envoy_dependency_imports()

load("@envoy//bazel:repo.bzl", "envoy_repo")

envoy_repo()

load("@envoy//bazel:toolchains.bzl", "envoy_toolchains")

envoy_toolchains()

# When BAZEL_LLVM_PATH is set, envoy_toolchains() skips creating the
# llvm_toolchain_llvm repo, but envoy's clang-format target still depends on it.
# Provide it only if it wasn't already created.
load("//bazel:local_llvm.bzl", "local_llvm_repo")

local_llvm_repo(name = "llvm_toolchain_llvm")

load("@envoy//bazel:dependency_imports_extra.bzl", "envoy_dependency_imports_extra")

envoy_dependency_imports_extra()


================================================
FILE: bazel/BUILD
================================================
platform(
    name = "linux_aarch64",
    constraint_values = [
        "@platforms//cpu:aarch64",
        "@platforms//os:linux",
    ],
)

platform(
    name = "linux_x86_64",
    constraint_values = [
        "@platforms//cpu:x86_64",
        "@platforms//os:linux",
    ],
)


================================================
FILE: bazel/get_workspace_status
================================================
#!/bin/bash

# This file was imported from https://github.com/bazelbuild/bazel at d6fec93.

# This script will be run bazel when building process starts to
# generate key-value information that represents the status of the
# workspace. The output should be like
#
# KEY1 VALUE1
# KEY2 VALUE2
#
# If the script exits with non-zero code, it's considered as a failure
# and the output will be discarded.

# For Envoy in particular, we want to force binaries to relink when the Git
# SHA changes (https://github.com/envoyproxy/envoy/issues/2551). This can be
# done by prefixing keys with "STABLE_". To avoid breaking compatibility with
# other status scripts, this one still echos the non-stable ("volatile") names.

# If this SOURCE_VERSION file exists then it must have been placed here by a
# distribution doing a non-git, source build.
# Distributions would be expected to echo the commit/tag as BUILD_SCM_REVISION
if [ -f SOURCE_VERSION ]
then
    echo "BUILD_SCM_REVISION $(cat SOURCE_VERSION)"
    echo "STABLE_BUILD_SCM_REVISION $(cat SOURCE_VERSION)"
    echo "BUILD_SCM_STATUS Distribution"
    exit 0
fi

# The code below presents an implementation that works for git repository
git_rev=$(git rev-parse HEAD) || exit 1
echo "BUILD_SCM_REVISION ${git_rev}"
echo "STABLE_BUILD_SCM_REVISION ${git_rev}"

# Check whether there are any uncommitted changes
tree_status="Clean"
git diff-index --quiet HEAD -- || {
    tree_status="Modified"
}
echo "BUILD_SCM_STATUS ${tree_status}"
echo "STABLE_BUILD_SCM_STATUS ${tree_status}"


================================================
FILE: bazel/local_llvm.bzl
================================================
"""Repository rule to provide llvm_toolchain_llvm when using a local LLVM toolchain.

When BAZEL_LLVM_PATH is set (local toolchain mode), the toolchains_llvm
llvm_toolchain() macro skips creating the llvm_toolchain_llvm repository.
Envoy's tools/clang-format target still depends on @llvm_toolchain_llvm//:clang-format,
so we need to provide it.
"""

def _local_llvm_repo_impl(repository_ctx):
    llvm_path = repository_ctx.os.environ.get("BAZEL_LLVM_PATH", "")
    clang_format = None

    if llvm_path:
        candidate = repository_ctx.path(llvm_path + "/bin/clang-format")
        if candidate.exists:
            clang_format = candidate

    if not clang_format:
        clang_format = repository_ctx.which("clang-format")

    if not clang_format:
        fail("Could not find clang-format. Set BAZEL_LLVM_PATH or ensure clang-format is on PATH.")

    repository_ctx.symlink(clang_format, "bin/clang-format")
    repository_ctx.file("BUILD.bazel", """\
package(default_visibility = ["//visibility:public"])

filegroup(
    name = "clang-format",
    srcs = ["bin/clang-format"],
)
""")

local_llvm_repo = repository_rule(
    implementation = _local_llvm_repo_impl,
    environ = ["BAZEL_LLVM_PATH", "PATH"],
    local = True,
)


================================================
FILE: bazel/platform_mappings
================================================
platforms:
  //bazel:linux_aarch64
    --cpu=aarch64
    --crosstool_top=//bazel/toolchains:toolchain

  //bazel:linux_x86_64
    --cpu=k8
    --crosstool_top=//bazel/toolchains:toolchain

flags:
  --cpu=k8
    //bazel:linux_x86_64

  --cpu=aarch64
    //bazel:linux_aarch64



================================================
FILE: bazel/setup_clang.sh
================================================
#!/bin/bash

BAZELRC_FILE="${BAZELRC_FILE:-$(bazel info workspace)/clang.bazelrc}"

LLVM_PREFIX=$1

if [[ ! -e "${LLVM_PREFIX}/bin/llvm-config" ]]; then
  echo "Error: cannot find llvm-config in ${LLVM_PREFIX}."
  exit 1
fi

BINDIR="$("${LLVM_PREFIX}"/bin/llvm-config --bindir)"
PATH="${BINDIR}:${PATH}"
export PATH

LLVM_VERSION="$(llvm-config --version)"
LLVM_LIBDIR="$(llvm-config --libdir)"
LLVM_TARGET="$(llvm-config --host-target)"

RT_LIBRARY_PATH="${LLVM_LIBDIR}/clang/${LLVM_VERSION}/lib/${LLVM_TARGET}"

echo "# Generated file, do not edit. If you want to disable clang, just delete this file.
build:clang-local --action_env='PATH=${PATH}' --host_action_env='PATH=${PATH}'
build:clang-local --action_env='LLVM_CONFIG=${LLVM_PREFIX}/bin/llvm-config' --host_action_env='LLVM_CONFIG=${LLVM_PREFIX}/bin/llvm-config'
build:clang-local --repo_env='LLVM_CONFIG=${LLVM_PREFIX}/bin/llvm-config'
build:clang-local --linkopt='-L$(llvm-config --libdir)'
build:clang-local --linkopt='-Wl,-rpath,$(llvm-config --libdir)'

build:clang-asan --linkopt='-L${RT_LIBRARY_PATH}'
" >"${BAZELRC_FILE}"


================================================
FILE: bazel/toolchains/BUILD
================================================
load("@rules_cc//cc:defs.bzl", "cc_toolchain", "cc_toolchain_suite")
load(":cc_toolchain_config.bzl", "cc_toolchain_config")

# Using platform-provided files
filegroup(name = "empty")

toolchain(
    name = "aarch64_linux_cc_toolchain",
    exec_compatible_with = ["@platforms//os:linux"],
    target_compatible_with = [
        "@platforms//cpu:aarch64",
        "@platforms//os:linux",
    ],
    toolchain = ":clang_aarch64_linux_cc_toolchain",
    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)

cc_toolchain(
    name = "clang_aarch64_linux_cc_toolchain",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    toolchain_config = ":clang_aarch64_linux_toolchain_config",
)

cc_toolchain_config(
    name = "clang_aarch64_linux_toolchain_config",
    abi_libc_version = "aarch64",
    abi_version = "aarch64",
    compile_flags = [
        "--target=aarch64-unknown-linux-gnu",
        "-fuse-ld=lld",  # cmake compiler test needs this
        "-U_FORTIFY_SOURCE",
        "-fstack-protector",
        "-Wall",
        "-Wunused-but-set-parameter",
        "-Wthread-safety-analysis",
        "-Wno-free-nonheap-object",
        "-fno-omit-frame-pointer",
        # Needed by Envoy dependencies to build:
        "-Wno-unused-command-line-argument",  # tcmalloc needs this since -fuse-ld was added above
        "-Wno-deprecated-builtins",
    ],
    compiler = "clang",
    coverage_compile_flags = ["--coverage"],
    coverage_link_flags = ["--coverage"],
    cpu = "aarch64",
    cxx_builtin_include_directories = [
        "/usr/lib/llvm-18",
        "/usr/lib/clang",
        "/usr/aarch64-linux-gnu/include",
        "/usr/include",
    ],
    cxx_flags = ["-std=c++0x"],
    dbg_compile_flags = ["-g"],
    # Cross-compilation flags exported as environment variables for foreign_cc
    # rules (e.g. liburing's configure_make). This ensures foreign build systems
    # see the correct --target when they use CFLAGS/CPPFLAGS from the environment.
    foreign_cc_env = {
        "CFLAGS": "--target=aarch64-unknown-linux-gnu -fuse-ld=lld",
        "CPPFLAGS": "--target=aarch64-unknown-linux-gnu -fuse-ld=lld",
        # -lc is needed because liburing builds a shared library with -Wl,-z,defs
        # which requires all symbols (including memset from libc) to be resolved.
        # The cross-compiler driver doesn't implicitly add -lc for shared libraries.
        "LDFLAGS": "--target=aarch64-unknown-linux-gnu -fuse-ld=lld -lc",
    },
    host_system_name = "local",
    link_flags = [
        "--target=aarch64-unknown-linux-gnu",
        "-fuse-ld=lld",
        "-Wl,-no-as-needed",
        "-Wl,-z,relro,-z,now",
        "-lm",
    ],
    link_libs = [
        "-l:libstdc++.a",
        "-latomic",
    ],
    opt_compile_flags = [
        "-g0",
        "-O2",
        "-D_FORTIFY_SOURCE=1",
        "-DNDEBUG",
        "-ffunction-sections",
        "-fdata-sections",
    ],
    opt_link_flags = ["-Wl,--gc-sections"],
    supports_start_end_lib = True,
    target_libc = "glibc",
    target_system_name = "aarch64-linux-gnu",
    tool_paths = {
        "ar": "/usr/bin/llvm-ar",
        "compat-ld": "/usr/bin/lld",
        "ld": "/usr/bin/lld",
        "gold": "/usr/bin/lld",
        "cpp": "/usr/bin/clang-cpp",
        "gcc": "/usr/bin/clang",
        "dwp": "/usr/bin/llvm-dwp",
        "gcov": "/usr/bin/llvm-cov",
        "nm": "/usr/bin/llvm-nm",
        "objcopy": "/usr/bin/llvm-objcopy",
        "objdump": "/usr/bin/llvm-objdump",
        "strip": "/usr/bin/llvm-strip",
    },
    toolchain_identifier = "linux_aarch64",
    unfiltered_compile_flags = [
        "-Wno-builtin-macro-redefined",
        "-D__DATE__=\"redacted\"",
        "-D__TIMESTAMP__=\"redacted\"",
        "-D__TIME__=\"redacted\"",
    ],
    #
    # cxx_builtin_include_directories entries need "" prefix if sysroot is set
    #
    # builtin_sysroot = "/sysroot",
)

toolchain(
    name = "x86_64_linux_cc_toolchain",
    exec_compatible_with = ["@platforms//os:linux"],
    target_compatible_with = [
        "@platforms//cpu:x86_64",
        "@platforms//os:linux",
    ],
    toolchain = ":clang_x86_64_linux_cc_toolchain",
    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)

cc_toolchain(
    name = "clang_x86_64_linux_cc_toolchain",
    all_files = ":empty",
    compiler_files = ":empty",
    dwp_files = ":empty",
    linker_files = ":empty",
    objcopy_files = ":empty",
    strip_files = ":empty",
    toolchain_config = ":clang_x86_64_linux_toolchain_config",
)

cc_toolchain_config(
    name = "clang_x86_64_linux_toolchain_config",
    abi_libc_version = "unknown",
    abi_version = "unknown",
    compile_flags = [
        "--target=x86_64-unknown-linux-gnu",
        "-fuse-ld=lld",  # cmake compiler test needs this
        "-U_FORTIFY_SOURCE",
        "-fstack-protector",
        "-Wall",
        "-Wunused-but-set-parameter",
        "-Wthread-safety-analysis",
        "-Wno-free-nonheap-object",
        "-fno-omit-frame-pointer",
        # Needed by Envoy dependencies to build:
        "-Wno-unused-command-line-argument",  # tcmalloc needs this since -fuse-ld was added above
        "-Wno-deprecated-builtins",
    ],
    compiler = "clang",
    coverage_compile_flags = ["--coverage"],
    coverage_link_flags = ["--coverage"],
    cpu = "k8",
    cxx_builtin_include_directories = [
        "/usr/lib/llvm-18",
        "/usr/lib/clang",
        "/usr/x86_64-linux-gnu/include",
        "/usr/include",
    ],
    cxx_flags = ["-std=c++0x"],
    dbg_compile_flags = ["-g"],
    host_system_name = "local",
    link_flags = [
        "--target=x86_64-unknown-linux-gnu",
        "-fuse-ld=lld",
        "-Wl,-no-as-needed",
        "-Wl,-z,relro,-z,now",
        "-lm",
    ],
    link_libs = [
        "-l:libstdc++.a",
        "-latomic",
    ],
    opt_compile_flags = [
        "-g0",
        "-O2",
        "-D_FORTIFY_SOURCE=1",
        "-DNDEBUG",
        "-ffunction-sections",
        "-fdata-sections",
    ],
    opt_link_flags = ["-Wl,--gc-sections"],
    supports_start_end_lib = True,
    target_libc = "unknown",
    target_system_name = "unknown",
    tool_paths = {
        "ar": "/usr/bin/llvm-ar",
        "compat-ld": "/usr/bin/lld",
        "ld": "/usr/bin/lld",
        "gold": "/usr/bin/lld",
        "cpp": "/usr/bin/clang-cpp",
        "gcc": "/usr/bin/clang",
        "dwp": "/usr/bin/llvm-dwp",
        "gcov": "/usr/bin/llvm-cov",
        "nm": "/usr/bin/llvm-nm",
        "objcopy": "/usr/bin/llvm-objcopy",
        "objdump": "/usr/bin/llvm-objdump",
        "strip": "/usr/bin/llvm-strip",
    },
    toolchain_identifier = "linux_x86_64",
    unfiltered_compile_flags = [
        "-Wno-builtin-macro-redefined",
        "-D__DATE__=\"redacted\"",
        "-D__TIMESTAMP__=\"redacted\"",
        "-D__TIME__=\"redacted\"",
    ],
    #
    # cxx_builtin_include_directories entries need "%sysroot%" prefix if sysroot is set
    #
    # builtin_sysroot = "/sysroot",
)

# still needed to avoid use of local_config_cc toolchain
cc_toolchain_suite(
    name = "toolchain",
    toolchains = {
        "k8": ":clang_x86_64_linux_cc_toolchain",
        "aarch64": ":clang_aarch64_linux_cc_toolchain",
    },
)


================================================
FILE: bazel/toolchains/cc_toolchain_config.bzl
================================================
# Copied from https://github.com/envoyproxy/envoy-build-tools
# Originally generatd by https://github.com/bazelbuild/bazel-toolchains
#
# Copyright 2019 The Bazel 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.

"""A Starlark cc_toolchain configuration rule"""

load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
    "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
    "env_entry",
    "env_set",
    "feature",
    "feature_set",
    "flag_group",
    "flag_set",
    "tool_path",
    "variable_with_value",
    "with_feature_set",
)

def layering_check_features(compiler):
    if compiler != "clang":
        return []
    return [
        feature(
            name = "use_module_maps",
            requires = [feature_set(features = ["module_maps"])],
            flag_sets = [
                flag_set(
                    actions = [
                        ACTION_NAMES.c_compile,
                        ACTION_NAMES.cpp_compile,
                        ACTION_NAMES.cpp_header_parsing,
                        ACTION_NAMES.cpp_module_compile,
                    ],
                    flag_groups = [
                        flag_group(
                            flags = [
                                "-fmodule-name=%{module_name}",
                                "-fmodule-map-file=%{module_map_file}",
                            ],
                        ),
                    ],
                ),
            ],
        ),

        # Tell blaze we support module maps in general, so they will be generated
        # for all c/c++ rules.
        # Note: not all C++ rules support module maps; thus, do not imply this
        # feature from other features - instead, require it.
        feature(name = "module_maps", enabled = True),
        feature(
            name = "layering_check",
            implies = ["use_module_maps"],
            flag_sets = [
                flag_set(
                    actions = [
                        ACTION_NAMES.c_compile,
                        ACTION_NAMES.cpp_compile,
                        ACTION_NAMES.cpp_header_parsing,
                        ACTION_NAMES.cpp_module_compile,
                    ],
                    flag_groups = [
                        flag_group(flags = [
                            "-fmodules-strict-decluse",
                            "-Wprivate-header",
                        ]),
                        flag_group(
                            iterate_over = "dependent_module_map_files",
                            flags = [
                                "-fmodule-map-file=%{dependent_module_map_files}",
                            ],
                        ),
                    ],
                ),
            ],
        ),
    ]

all_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.assemble,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.cpp_module_codegen,
    ACTION_NAMES.clif_match,
    ACTION_NAMES.lto_backend,
]

all_cpp_compile_actions = [
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.cpp_module_codegen,
    ACTION_NAMES.clif_match,
]

preprocessor_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_header_parsing,
    ACTION_NAMES.cpp_module_compile,
    ACTION_NAMES.clif_match,
]

codegen_compile_actions = [
    ACTION_NAMES.c_compile,
    ACTION_NAMES.cpp_compile,
    ACTION_NAMES.linkstamp_compile,
    ACTION_NAMES.assemble,
    ACTION_NAMES.preprocess_assemble,
    ACTION_NAMES.cpp_module_codegen,
    ACTION_NAMES.lto_backend,
]

all_link_actions = [
    ACTION_NAMES.cpp_link_executable,
    ACTION_NAMES.cpp_link_dynamic_library,
    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]

lto_index_actions = [
    ACTION_NAMES.lto_index_for_executable,
    ACTION_NAMES.lto_index_for_dynamic_library,
    ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
]

def _impl(ctx):
    tool_paths = [
        tool_path(name = name, path = path)
        for name, path in ctx.attr.tool_paths.items()
    ]
    action_configs = []

    supports_pic_feature = feature(
        name = "supports_pic",
        enabled = True,
    )
    supports_start_end_lib_feature = feature(
        name = "supports_start_end_lib",
        enabled = True,
    )

    default_compile_flags_feature = feature(
        name = "default_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.compile_flags,
                    ),
                ] if ctx.attr.compile_flags else []),
            ),
            flag_set(
                actions = all_compile_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.dbg_compile_flags,
                    ),
                ] if ctx.attr.dbg_compile_flags else []),
                with_features = [with_feature_set(features = ["dbg"])],
            ),
            flag_set(
                actions = all_compile_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.opt_compile_flags,
                    ),
                ] if ctx.attr.opt_compile_flags else []),
                with_features = [with_feature_set(features = ["opt"])],
            ),
            flag_set(
                actions = all_cpp_compile_actions + [ACTION_NAMES.lto_backend],
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.cxx_flags,
                    ),
                ] if ctx.attr.cxx_flags else []),
            ),
        ],
    )

    default_link_flags_feature = feature(
        name = "default_link_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.link_flags,
                    ),
                ] if ctx.attr.link_flags else []),
            ),
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.opt_link_flags,
                    ),
                ] if ctx.attr.opt_link_flags else []),
                with_features = [with_feature_set(features = ["opt"])],
            ),
        ],
    )

    dbg_feature = feature(name = "dbg")

    opt_feature = feature(name = "opt")

    sysroot_feature = feature(
        name = "sysroot",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.linkstamp_compile,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.cpp_module_codegen,
                    ACTION_NAMES.lto_backend,
                    ACTION_NAMES.clif_match,
                ] + all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["--sysroot=%{sysroot}"],
                        expand_if_available = "sysroot",
                    ),
                ],
            ),
        ],
    )

    fdo_optimize_feature = feature(
        name = "fdo_optimize",
        flag_sets = [
            flag_set(
                actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fprofile-use=%{fdo_profile_path}",
                            "-fprofile-correction",
                        ],
                        expand_if_available = "fdo_profile_path",
                    ),
                ],
            ),
        ],
        provides = ["profile"],
    )

    supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)

    user_compile_flags_feature = feature(
        name = "user_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = [
                    flag_group(
                        flags = ["%{user_compile_flags}"],
                        iterate_over = "user_compile_flags",
                        expand_if_available = "user_compile_flags",
                    ),
                ],
            ),
        ],
    )

    unfiltered_compile_flags_feature = feature(
        name = "unfiltered_compile_flags",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = all_compile_actions,
                flag_groups = ([
                    flag_group(
                        flags = ctx.attr.unfiltered_compile_flags,
                    ),
                ] if ctx.attr.unfiltered_compile_flags else []),
            ),
        ],
    )

    library_search_directories_feature = feature(
        name = "library_search_directories",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["-L%{library_search_directories}"],
                        iterate_over = "library_search_directories",
                        expand_if_available = "library_search_directories",
                    ),
                ],
            ),
        ],
    )

    static_libgcc_feature = feature(
        name = "static_libgcc",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.cpp_link_executable,
                    ACTION_NAMES.cpp_link_dynamic_library,
                    ACTION_NAMES.lto_index_for_executable,
                    ACTION_NAMES.lto_index_for_dynamic_library,
                ],
                flag_groups = [flag_group(flags = ["-static-libgcc"])],
                with_features = [
                    with_feature_set(features = ["static_link_cpp_runtimes"]),
                ],
            ),
        ],
    )

    pic_feature = feature(
        name = "pic",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.assemble,
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.linkstamp_compile,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_codegen,
                    ACTION_NAMES.cpp_module_compile,
                ],
                flag_groups = [
                    flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
                ],
            ),
        ],
    )

    per_object_debug_info_feature = feature(
        name = "per_object_debug_info",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.assemble,
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_codegen,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-gsplit-dwarf"],
                        expand_if_available = "per_object_debug_info_file",
                    ),
                ],
            ),
        ],
    )

    preprocessor_defines_feature = feature(
        name = "preprocessor_defines",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.linkstamp_compile,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.clif_match,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-D%{preprocessor_defines}"],
                        iterate_over = "preprocessor_defines",
                    ),
                ],
            ),
        ],
    )

    cs_fdo_optimize_feature = feature(
        name = "cs_fdo_optimize",
        flag_sets = [
            flag_set(
                actions = [ACTION_NAMES.lto_backend],
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fprofile-use=%{fdo_profile_path}",
                            "-Wno-profile-instr-unprofiled",
                            "-Wno-profile-instr-out-of-date",
                            "-fprofile-correction",
                        ],
                        expand_if_available = "fdo_profile_path",
                    ),
                ],
            ),
        ],
        provides = ["csprofile"],
    )

    autofdo_feature = feature(
        name = "autofdo",
        flag_sets = [
            flag_set(
                actions = [ACTION_NAMES.c_compile, ACTION_NAMES.cpp_compile],
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fauto-profile=%{fdo_profile_path}",
                            "-fprofile-correction",
                        ],
                        expand_if_available = "fdo_profile_path",
                    ),
                ],
            ),
        ],
        provides = ["profile"],
    )

    runtime_library_search_directories_feature = feature(
        name = "runtime_library_search_directories",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        iterate_over = "runtime_library_search_directories",
                        flag_groups = [
                            flag_group(
                                flags = [
                                    "-Wl,-rpath,$EXEC_ORIGIN/%{runtime_library_search_directories}",
                                ],
                                expand_if_true = "is_cc_test",
                            ),
                            flag_group(
                                flags = [
                                    "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
                                ],
                                expand_if_false = "is_cc_test",
                            ),
                        ],
                        expand_if_available =
                            "runtime_library_search_directories",
                    ),
                ],
                with_features = [
                    with_feature_set(features = ["static_link_cpp_runtimes"]),
                ],
            ),
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        iterate_over = "runtime_library_search_directories",
                        flag_groups = [
                            flag_group(
                                flags = [
                                    "-Wl,-rpath,$ORIGIN/%{runtime_library_search_directories}",
                                ],
                            ),
                        ],
                        expand_if_available =
                            "runtime_library_search_directories",
                    ),
                ],
                with_features = [
                    with_feature_set(
                        not_features = ["static_link_cpp_runtimes"],
                    ),
                ],
            ),
        ],
    )

    fission_support_feature = feature(
        name = "fission_support",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["-Wl,--gdb-index"],
                        expand_if_available = "is_using_fission",
                    ),
                ],
            ),
        ],
    )

    shared_flag_feature = feature(
        name = "shared_flag",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.cpp_link_dynamic_library,
                    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
                    ACTION_NAMES.lto_index_for_dynamic_library,
                    ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
                ],
                flag_groups = [flag_group(flags = ["-shared"])],
            ),
        ],
    )

    random_seed_feature = feature(
        name = "random_seed",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_codegen,
                    ACTION_NAMES.cpp_module_compile,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-frandom-seed=%{output_file}"],
                        expand_if_available = "output_file",
                    ),
                ],
            ),
        ],
    )

    includes_feature = feature(
        name = "includes",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.linkstamp_compile,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.clif_match,
                    ACTION_NAMES.objc_compile,
                    ACTION_NAMES.objcpp_compile,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-include", "%{includes}"],
                        iterate_over = "includes",
                        expand_if_available = "includes",
                    ),
                ],
            ),
        ],
    )

    fdo_instrument_feature = feature(
        name = "fdo_instrument",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                ] + all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fprofile-generate=%{fdo_instrument_path}",
                            "-fno-data-sections",
                        ],
                        expand_if_available = "fdo_instrument_path",
                    ),
                ],
            ),
        ],
        provides = ["profile"],
    )

    cs_fdo_instrument_feature = feature(
        name = "cs_fdo_instrument",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.lto_backend,
                ] + all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fcs-profile-generate=%{cs_fdo_instrument_path}",
                        ],
                        expand_if_available = "cs_fdo_instrument_path",
                    ),
                ],
            ),
        ],
        provides = ["csprofile"],
    )

    include_paths_feature = feature(
        name = "include_paths",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.linkstamp_compile,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.clif_match,
                    ACTION_NAMES.objc_compile,
                    ACTION_NAMES.objcpp_compile,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-iquote", "%{quote_include_paths}"],
                        iterate_over = "quote_include_paths",
                    ),
                    flag_group(
                        flags = ["-I%{include_paths}"],
                        iterate_over = "include_paths",
                    ),
                    flag_group(
                        flags = ["-isystem", "%{system_include_paths}"],
                        iterate_over = "system_include_paths",
                    ),
                ],
            ),
        ],
    )

    symbol_counts_feature = feature(
        name = "symbol_counts",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = [
                            "-Wl,--print-symbol-counts=%{symbol_counts_output}",
                        ],
                        expand_if_available = "symbol_counts_output",
                    ),
                ],
            ),
        ],
    )

    llvm_coverage_map_format_feature = feature(
        name = "llvm_coverage_map_format",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.objc_compile,
                    ACTION_NAMES.objcpp_compile,
                ],
                flag_groups = [
                    flag_group(
                        flags = [
                            "-fprofile-instr-generate",
                            "-fcoverage-mapping",
                        ],
                    ),
                ],
            ),
            flag_set(
                actions = all_link_actions + lto_index_actions + [
                    "objc-executable",
                    "objc++-executable",
                ],
                flag_groups = [
                    flag_group(flags = ["-fprofile-instr-generate"]),
                ],
            ),
        ],
        requires = [feature_set(features = ["coverage"])],
        provides = ["profile"],
    )

    strip_debug_symbols_feature = feature(
        name = "strip_debug_symbols",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["-Wl,-S"],
                        expand_if_available = "strip_debug_symbols",
                    ),
                ],
            ),
        ],
    )

    build_interface_libraries_feature = feature(
        name = "build_interface_libraries",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.cpp_link_dynamic_library,
                    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
                    ACTION_NAMES.lto_index_for_dynamic_library,
                    ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
                ],
                flag_groups = [
                    flag_group(
                        flags = [
                            "%{generate_interface_library}",
                            "%{interface_library_builder_path}",
                            "%{interface_library_input_path}",
                            "%{interface_library_output_path}",
                        ],
                        expand_if_available = "generate_interface_library",
                    ),
                ],
                with_features = [
                    with_feature_set(
                        features = ["supports_interface_shared_libraries"],
                    ),
                ],
            ),
        ],
    )

    libraries_to_link_feature = feature(
        name = "libraries_to_link",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        iterate_over = "libraries_to_link",
                        flag_groups = [
                            flag_group(
                                flags = ["-Wl,--start-lib"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file_group",
                                ),
                            ),
                            flag_group(
                                flags = ["-Wl,-whole-archive"],
                                expand_if_true =
                                    "libraries_to_link.is_whole_archive",
                            ),
                            flag_group(
                                flags = ["%{libraries_to_link.object_files}"],
                                iterate_over = "libraries_to_link.object_files",
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file_group",
                                ),
                            ),
                            flag_group(
                                flags = ["%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file",
                                ),
                            ),
                            flag_group(
                                flags = ["%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "interface_library",
                                ),
                            ),
                            flag_group(
                                flags = ["%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "static_library",
                                ),
                            ),
                            flag_group(
                                flags = ["-l%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "dynamic_library",
                                ),
                            ),
                            flag_group(
                                flags = ["-l:%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "versioned_dynamic_library",
                                ),
                            ),
                            flag_group(
                                flags = ["-Wl,-no-whole-archive"],
                                expand_if_true = "libraries_to_link.is_whole_archive",
                            ),
                            flag_group(
                                flags = ["-Wl,--end-lib"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file_group",
                                ),
                            ),
                        ],
                        expand_if_available = "libraries_to_link",
                    ),
                    flag_group(
                        flags = ["-Wl,@%{thinlto_param_file}"],
                        expand_if_true = "thinlto_param_file",
                    ),
                ],
            ),
        ],
    )

    user_link_flags_feature = feature(
        name = "user_link_flags",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["%{user_link_flags}"],
                        iterate_over = "user_link_flags",
                        expand_if_available = "user_link_flags",
                    ),
                ] + ([flag_group(flags = ctx.attr.link_libs)] if ctx.attr.link_libs else []),
            ),
        ],
    )

    fdo_prefetch_hints_feature = feature(
        name = "fdo_prefetch_hints",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.lto_backend,
                ],
                flag_groups = [
                    flag_group(
                        flags = [
                            "-mllvm",
                            "-prefetch-hints-file=%{fdo_prefetch_hints_path}",
                        ],
                        expand_if_available = "fdo_prefetch_hints_path",
                    ),
                ],
            ),
        ],
    )

    linkstamps_feature = feature(
        name = "linkstamps",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["%{linkstamp_paths}"],
                        iterate_over = "linkstamp_paths",
                        expand_if_available = "linkstamp_paths",
                    ),
                ],
            ),
        ],
    )

    gcc_coverage_map_format_feature = feature(
        name = "gcc_coverage_map_format",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.objc_compile,
                    ACTION_NAMES.objcpp_compile,
                    "objc-executable",
                    "objc++-executable",
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-fprofile-arcs", "-ftest-coverage"],
                        expand_if_available = "gcov_gcno_file",
                    ),
                ],
            ),
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [flag_group(flags = ["--coverage"])],
            ),
        ],
        requires = [feature_set(features = ["coverage"])],
        provides = ["profile"],
    )

    archiver_flags_feature = feature(
        name = "archiver_flags",
        flag_sets = [
            flag_set(
                actions = [ACTION_NAMES.cpp_link_static_library],
                flag_groups = [
                    flag_group(flags = ["rcsD"]),
                    flag_group(
                        flags = ["%{output_execpath}"],
                        expand_if_available = "output_execpath",
                    ),
                ],
            ),
            flag_set(
                actions = [ACTION_NAMES.cpp_link_static_library],
                flag_groups = [
                    flag_group(
                        iterate_over = "libraries_to_link",
                        flag_groups = [
                            flag_group(
                                flags = ["%{libraries_to_link.name}"],
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file",
                                ),
                            ),
                            flag_group(
                                flags = ["%{libraries_to_link.object_files}"],
                                iterate_over = "libraries_to_link.object_files",
                                expand_if_equal = variable_with_value(
                                    name = "libraries_to_link.type",
                                    value = "object_file_group",
                                ),
                            ),
                        ],
                        expand_if_available = "libraries_to_link",
                    ),
                ],
            ),
        ],
    )

    force_pic_flags_feature = feature(
        name = "force_pic_flags",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.cpp_link_executable,
                    ACTION_NAMES.lto_index_for_executable,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-pie"],
                        expand_if_available = "force_pic",
                    ),
                ],
            ),
        ],
    )

    dependency_file_feature = feature(
        name = "dependency_file",
        enabled = True,
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.assemble,
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_module_compile,
                    ACTION_NAMES.objc_compile,
                    ACTION_NAMES.objcpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.clif_match,
                ],
                flag_groups = [
                    flag_group(
                        flags = ["-MD", "-MF", "%{dependency_file}"],
                        expand_if_available = "dependency_file",
                    ),
                ],
            ),
        ],
    )

    dynamic_library_linker_tool_path = tool_paths
    dynamic_library_linker_tool_feature = feature(
        name = "dynamic_library_linker_tool",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.cpp_link_dynamic_library,
                    ACTION_NAMES.cpp_link_nodeps_dynamic_library,
                    ACTION_NAMES.lto_index_for_dynamic_library,
                    ACTION_NAMES.lto_index_for_nodeps_dynamic_library,
                ],
                flag_groups = [
                    flag_group(
                        flags = [" + cppLinkDynamicLibraryToolPath + "],
                        expand_if_available = "generate_interface_library",
                    ),
                ],
                with_features = [
                    with_feature_set(
                        features = ["supports_interface_shared_libraries"],
                    ),
                ],
            ),
        ],
    )

    output_execpath_flags_feature = feature(
        name = "output_execpath_flags",
        flag_sets = [
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(
                        flags = ["-o", "%{output_execpath}"],
                        expand_if_available = "output_execpath",
                    ),
                ],
            ),
        ],
    )

    # Note that we also set --coverage for c++-link-nodeps-dynamic-library. The
    # generated code contains references to gcov symbols, and the dynamic linker
    # can't resolve them unless the library is linked against gcov.
    coverage_feature = feature(
        name = "coverage",
        provides = ["profile"],
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.preprocess_assemble,
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                    ACTION_NAMES.cpp_header_parsing,
                    ACTION_NAMES.cpp_module_compile,
                ],
                flag_groups = ([
                    flag_group(flags = ctx.attr.coverage_compile_flags),
                ] if ctx.attr.coverage_compile_flags else []),
            ),
            flag_set(
                actions = all_link_actions + lto_index_actions,
                flag_groups = ([
                    flag_group(flags = ctx.attr.coverage_link_flags),
                ] if ctx.attr.coverage_link_flags else []),
            ),
        ],
    )

    thinlto_feature = feature(
        name = "thin_lto",
        flag_sets = [
            flag_set(
                actions = [
                    ACTION_NAMES.c_compile,
                    ACTION_NAMES.cpp_compile,
                ] + all_link_actions + lto_index_actions,
                flag_groups = [
                    flag_group(flags = ["-flto=thin"]),
                    flag_group(
                        expand_if_available = "lto_indexing_bitcode_file",
                        flags = [
                            "-Xclang",
                            "-fthin-link-bitcode=%{lto_indexing_bitcode_file}",
                        ],
                    ),
                ],
            ),
            flag_set(
                actions = [ACTION_NAMES.linkstamp_compile],
                flag_groups = [flag_group(flags = ["-DBUILD_LTO_TYPE=thin"])],
            ),
            flag_set(
                actions = lto_index_actions,
                flag_groups = [
                    flag_group(flags = [
                        "-flto=thin",
                        "-Wl,-plugin-opt,thinlto-index-only%{thinlto_optional_params_file}",
                        "-Wl,-plugin-opt,thinlto-emit-imports-files",
                        "-Wl,-plugin-opt,thinlto-prefix-replace=%{thinlto_prefix_replace}",
                    ]),
                    flag_group(
                        expand_if_available = "thinlto_object_suffix_replace",
                        flags = [
                            "-Wl,-plugin-opt,thinlto-object-suffix-replace=%{thinlto_object_suffix_replace}",
                        ],
                    ),
                    flag_group(
                        expand_if_available = "thinlto_merged_object_file",
                        flags = [
                            "-Wl,-plugin-opt,obj-path=%{thinlto_merged_object_file}",
                        ],
                    ),
                ],
            ),
            flag_set(
                actions = [ACTION_NAMES.lto_backend],
                flag_groups = [
                    flag_group(flags = [
                        "-c",
                        "-fthinlto-index=%{thinlto_index}",
                        "-o",
                        "%{thinlto_output_object_file}",
                        "-x",
                        "ir",
                        "%{thinlto_input_bitcode_file}",
                    ]),
                ],
            ),
        ],
    )

    # Export cross-compilation flags as environment variables for foreign_cc rules
    # (e.g. rules_foreign_cc's configure_make). These env vars are picked up by
    # cc_common.get_environment_variables() and exported globally in the build
    # script prelude, making them available to both configure and make steps.
    # This is needed because some foreign build systems (like liburing) override
    # CFLAGS internally, losing the --target flag from the toolchain's compile_flags.
    foreign_cc_env_feature = feature(
        name = "foreign_cc_env",
        enabled = bool(ctx.attr.foreign_cc_env),
        env_sets = [
            env_set(
                actions = all_compile_actions + all_link_actions,
                env_entries = [
                    env_entry(key = key, value = value)
                    for key, value in ctx.attr.foreign_cc_env.items()
                ],
            ),
        ] if ctx.attr.foreign_cc_env else [],
    )

    is_linux = ctx.attr.target_libc != "macosx"

    # TODO(#8303): Mac crosstool should also declare every feature.
    if is_linux:
        features = [
            dependency_file_feature,
            random_seed_feature,
            pic_feature,
            per_object_debug_info_feature,
            preprocessor_defines_feature,
            includes_feature,
            include_paths_feature,
            fdo_instrument_feature,
            cs_fdo_instrument_feature,
            cs_fdo_optimize_feature,
            thinlto_feature,
            fdo_prefetch_hints_feature,
            autofdo_feature,
            build_interface_libraries_feature,
            dynamic_library_linker_tool_feature,
            symbol_counts_feature,
            shared_flag_feature,
            linkstamps_feature,
            output_execpath_flags_feature,
            runtime_library_search_directories_feature,
            library_search_directories_feature,
            archiver_flags_feature,
            
Download .txt
gitextract__yn3lawc/

├── .bazelrc
├── .bazelversion
├── .clang-format
├── .clang-tidy
├── .clangd
├── .github/
│   ├── CODEOWNERS
│   ├── renovate.json5
│   └── workflows/
│       ├── build-envoy-image-ci.yaml
│       ├── build-envoy-images-release-base.yaml
│       ├── build-envoy-images-release-debug.yaml
│       ├── build-envoy-images-release.yaml
│       ├── ci-check-format.yaml
│       ├── ci-tests.yaml
│       ├── cilium-gateway-api.yaml
│       ├── cilium-integration-tests.yaml
│       ├── codeql.yml
│       ├── renovate-config-validator.yaml
│       └── wait-for-image/
│           └── action.yaml
├── .gitignore
├── BUILD
├── CODEOWNERS
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile.builder
├── Dockerfile.tests
├── ENVOY_VERSION
├── LICENSE
├── Makefile
├── Makefile.api
├── Makefile.defs
├── Makefile.dev
├── Makefile.docker
├── Makefile.quiet
├── README.md
├── UPGRADE_ENVOY.md
├── Vagrantfile
├── WORKSPACE
├── bazel/
│   ├── BUILD
│   ├── get_workspace_status
│   ├── local_llvm.bzl
│   ├── platform_mappings
│   ├── setup_clang.sh
│   └── toolchains/
│       ├── BUILD
│       └── cc_toolchain_config.bzl
├── cilium/
│   ├── BUILD
│   ├── accesslog.cc
│   ├── accesslog.h
│   ├── api/
│   │   ├── BUILD
│   │   ├── accesslog.proto
│   │   ├── bpf_metadata.proto
│   │   ├── health_check_sink.proto
│   │   ├── l7policy.proto
│   │   ├── network_filter.proto
│   │   ├── npds.proto
│   │   ├── nphds.proto
│   │   ├── tls_wrapper.proto
│   │   └── websocket.proto
│   ├── bpf.cc
│   ├── bpf.h
│   ├── bpf_metadata.cc
│   ├── bpf_metadata.h
│   ├── conntrack.cc
│   ├── conntrack.h
│   ├── filter_state_cilium_destination.cc
│   ├── filter_state_cilium_destination.h
│   ├── filter_state_cilium_policy.cc
│   ├── filter_state_cilium_policy.h
│   ├── grpc_subscription.cc
│   ├── grpc_subscription.h
│   ├── health_check_sink.cc
│   ├── health_check_sink.h
│   ├── host_map.cc
│   ├── host_map.h
│   ├── ipcache.cc
│   ├── ipcache.h
│   ├── l7policy.cc
│   ├── l7policy.h
│   ├── network_filter.cc
│   ├── network_filter.h
│   ├── network_policy.cc
│   ├── network_policy.h
│   ├── policy_id.h
│   ├── privileged_service_client.cc
│   ├── privileged_service_client.h
│   ├── proxylib.cc
│   ├── proxylib.h
│   ├── secret_watcher.cc
│   ├── secret_watcher.h
│   ├── socket_option_cilium_mark.cc
│   ├── socket_option_cilium_mark.h
│   ├── socket_option_ip_transparent.cc
│   ├── socket_option_ip_transparent.h
│   ├── socket_option_source_address.cc
│   ├── socket_option_source_address.h
│   ├── tls_wrapper.cc
│   ├── tls_wrapper.h
│   ├── uds_client.cc
│   ├── uds_client.h
│   ├── websocket.cc
│   ├── websocket.h
│   ├── websocket_codec.cc
│   ├── websocket_codec.h
│   ├── websocket_config.cc
│   ├── websocket_config.h
│   └── websocket_protocol.h
├── envoy.bazelrc
├── envoy_binary_test.sh
├── envoy_build_config/
│   ├── BUILD
│   ├── WORKSPACE
│   └── extensions_build_config.bzl
├── go/
│   ├── README.md
│   └── cilium/
│       └── api/
│           ├── accesslog.go
│           ├── accesslog.pb.go
│           ├── accesslog.pb.validate.go
│           ├── bpf_metadata.pb.go
│           ├── bpf_metadata.pb.validate.go
│           ├── health_check_sink.pb.go
│           ├── health_check_sink.pb.validate.go
│           ├── l7policy.pb.go
│           ├── l7policy.pb.validate.go
│           ├── network_filter.pb.go
│           ├── network_filter.pb.validate.go
│           ├── npds.pb.go
│           ├── npds.pb.validate.go
│           ├── npds_grpc.pb.go
│           ├── nphds.pb.go
│           ├── nphds.pb.validate.go
│           ├── nphds_grpc.pb.go
│           ├── tls_wrapper.pb.go
│           ├── tls_wrapper.pb.validate.go
│           ├── websocket.pb.go
│           └── websocket.pb.validate.go
├── go.mod
├── go.sum
├── linux/
│   ├── bpf.h
│   ├── bpf_common.h
│   └── type_mapper.h
├── patches/
│   ├── 0001-network-Add-callback-for-upstream-authorization.patch
│   ├── 0002-listener-add-socket-options.patch
│   ├── 0003-original_dst_cluster-Avoid-multiple-hosts-for-the-sa.patch
│   ├── 0004-thread_local-reset-slot-in-worker-threads-first.patch
│   ├── 0005-http-header-expose-attribute.patch
│   ├── 0006-test-integration-Defer-fake-upstream-read-enable-un.patch
│   ├── 0008-repo-Make-yq-dependency-optional-for-CI-config-parsi.patch
│   └── BUILD
├── pkg/
│   └── policy/
│       └── api/
│           └── kafka/
│               ├── doc.go
│               ├── kafka.go
│               └── zz_generated.deepequal.go
├── proxylib/
│   ├── BUILD
│   ├── Makefile
│   ├── accesslog/
│   │   └── client.go
│   ├── cassandra/
│   │   ├── cassandraparser.go
│   │   └── cassandraparser_test.go
│   ├── kafka/
│   │   ├── kafkalib/
│   │   │   ├── doc.go
│   │   │   ├── error.go
│   │   │   ├── policy.go
│   │   │   ├── policy_test.go
│   │   │   ├── request.go
│   │   │   └── response.go
│   │   ├── parser.go
│   │   └── parser_test.go
│   ├── libcilium/
│   │   ├── helpers_test.go
│   │   ├── proxylib.go
│   │   ├── proxylib_memcached_test.go
│   │   └── proxylib_test.go
│   ├── libcilium.h
│   ├── memcached/
│   │   ├── binary/
│   │   │   ├── parser.go
│   │   │   └── parser_test.go
│   │   ├── meta/
│   │   │   └── meta.go
│   │   ├── parser.go
│   │   └── text/
│   │       └── parser.go
│   ├── npds/
│   │   ├── backoff.go
│   │   └── client.go
│   ├── proxylib/
│   │   ├── connection.go
│   │   ├── input_test.go
│   │   ├── instance.go
│   │   ├── parserfactory.go
│   │   ├── policymap.go
│   │   ├── reader.go
│   │   ├── test_util.go
│   │   └── types.go
│   ├── proxylib.go
│   ├── r2d2/
│   │   ├── r2d2parser.go
│   │   └── r2d2parser_test.go
│   ├── test/
│   │   ├── accesslog_server.go
│   │   └── tmpdir.go
│   ├── testparsers/
│   │   ├── blockparser.go
│   │   ├── headerparser.go
│   │   ├── headerparser.policy
│   │   ├── lineparser.go
│   │   └── passer.go
│   └── types.h
├── starter/
│   ├── BUILD
│   ├── main.cc
│   ├── privileged_service_protocol.cc
│   ├── privileged_service_protocol.h
│   ├── privileged_service_server.cc
│   └── privileged_service_server.h
├── tests/
│   ├── BUILD
│   ├── accesslog_server.cc
│   ├── accesslog_server.h
│   ├── accesslog_test.cc
│   ├── bpf_metadata.cc
│   ├── bpf_metadata.h
│   ├── bpf_metadata.proto
│   ├── bpf_metadata_config_test.cc
│   ├── bpf_metadata_integration_test.cc
│   ├── cilium_http_integration.cc
│   ├── cilium_http_integration.h
│   ├── cilium_http_integration_test.cc
│   ├── cilium_http_upstream_integration_test.cc
│   ├── cilium_network_policy_test.cc
│   ├── cilium_tcp_integration.cc
│   ├── cilium_tcp_integration.h
│   ├── cilium_tcp_integration_test.cc
│   ├── cilium_tls_http_integration_test.cc
│   ├── cilium_tls_integration.cc
│   ├── cilium_tls_integration.h
│   ├── cilium_tls_tcp_integration_test.cc
│   ├── cilium_websocket_codec_integration_test.cc
│   ├── cilium_websocket_decap_integration_test.cc
│   ├── cilium_websocket_encap_integration_test.cc
│   ├── cilium_websocket_policy_integration_test.cc
│   ├── health_check_sink_server.cc
│   ├── health_check_sink_server.h
│   ├── health_check_sink_test.cc
│   ├── uds_server.cc
│   └── uds_server.h
├── tools/
│   ├── BUILD
│   ├── check_repositories.sh
│   ├── code_format/
│   │   └── config.yaml
│   ├── gen_compilation_database.py
│   ├── install_bazelisk.sh
│   ├── push_manifest.sh
│   ├── stack_decode.py
│   └── update_version_matrix.sh
└── vendor/
    ├── cel.dev/
    │   └── expr/
    │       ├── .bazelversion
    │       ├── .gitignore
    │       ├── BUILD.bazel
    │       ├── CODE_OF_CONDUCT.md
    │       ├── CONTRIBUTING.md
    │       ├── GOVERNANCE.md
    │       ├── LICENSE
    │       ├── MAINTAINERS.md
    │       ├── MODULE.bazel
    │       ├── README.md
    │       ├── WORKSPACE
    │       ├── WORKSPACE.bzlmod
    │       ├── checked.pb.go
    │       ├── cloudbuild.yaml
    │       ├── eval.pb.go
    │       ├── explain.pb.go
    │       ├── regen_go_proto.sh
    │       ├── regen_go_proto_canonical_protos.sh
    │       ├── syntax.pb.go
    │       └── value.pb.go
    ├── github.com/
    │   ├── cilium/
    │   │   └── kafka/
    │   │       ├── LICENSE
    │   │       └── proto/
    │   │           ├── doc.go
    │   │           ├── errors.go
    │   │           ├── messages.go
    │   │           ├── serialization.go
    │   │           ├── snappy.go
    │   │           └── utils.go
    │   ├── cncf/
    │   │   └── xds/
    │   │       └── go/
    │   │           ├── LICENSE
    │   │           ├── udpa/
    │   │           │   └── annotations/
    │   │           │       ├── migrate.pb.go
    │   │           │       ├── migrate.pb.validate.go
    │   │           │       ├── security.pb.go
    │   │           │       ├── security.pb.validate.go
    │   │           │       ├── sensitive.pb.go
    │   │           │       ├── sensitive.pb.validate.go
    │   │           │       ├── status.pb.go
    │   │           │       ├── status.pb.validate.go
    │   │           │       ├── versioning.pb.go
    │   │           │       └── versioning.pb.validate.go
    │   │           └── xds/
    │   │               ├── annotations/
    │   │               │   └── v3/
    │   │               │       ├── migrate.pb.go
    │   │               │       ├── migrate.pb.validate.go
    │   │               │       ├── security.pb.go
    │   │               │       ├── security.pb.validate.go
    │   │               │       ├── sensitive.pb.go
    │   │               │       ├── sensitive.pb.validate.go
    │   │               │       ├── status.pb.go
    │   │               │       ├── status.pb.validate.go
    │   │               │       ├── versioning.pb.go
    │   │               │       └── versioning.pb.validate.go
    │   │               ├── core/
    │   │               │   └── v3/
    │   │               │       ├── authority.pb.go
    │   │               │       ├── authority.pb.validate.go
    │   │               │       ├── cidr.pb.go
    │   │               │       ├── cidr.pb.validate.go
    │   │               │       ├── collection_entry.pb.go
    │   │               │       ├── collection_entry.pb.validate.go
    │   │               │       ├── context_params.pb.go
    │   │               │       ├── context_params.pb.validate.go
    │   │               │       ├── extension.pb.go
    │   │               │       ├── extension.pb.validate.go
    │   │               │       ├── resource.pb.go
    │   │               │       ├── resource.pb.validate.go
    │   │               │       ├── resource_locator.pb.go
    │   │               │       ├── resource_locator.pb.validate.go
    │   │               │       ├── resource_name.pb.go
    │   │               │       └── resource_name.pb.validate.go
    │   │               └── type/
    │   │                   ├── matcher/
    │   │                   │   └── v3/
    │   │                   │       ├── cel.pb.go
    │   │                   │       ├── cel.pb.validate.go
    │   │                   │       ├── domain.pb.go
    │   │                   │       ├── domain.pb.validate.go
    │   │                   │       ├── http_inputs.pb.go
    │   │                   │       ├── http_inputs.pb.validate.go
    │   │                   │       ├── ip.pb.go
    │   │                   │       ├── ip.pb.validate.go
    │   │                   │       ├── matcher.pb.go
    │   │                   │       ├── matcher.pb.validate.go
    │   │                   │       ├── range.pb.go
    │   │                   │       ├── range.pb.validate.go
    │   │                   │       ├── regex.pb.go
    │   │                   │       ├── regex.pb.validate.go
    │   │                   │       ├── string.pb.go
    │   │                   │       └── string.pb.validate.go
    │   │                   └── v3/
    │   │                       ├── cel.pb.go
    │   │                       ├── cel.pb.validate.go
    │   │                       ├── range.pb.go
    │   │                       ├── range.pb.validate.go
    │   │                       ├── typed_struct.pb.go
    │   │                       └── typed_struct.pb.validate.go
    │   ├── davecgh/
    │   │   └── go-spew/
    │   │       ├── LICENSE
    │   │       └── spew/
    │   │           ├── bypass.go
    │   │           ├── bypasssafe.go
    │   │           ├── common.go
    │   │           ├── config.go
    │   │           ├── doc.go
    │   │           ├── dump.go
    │   │           ├── format.go
    │   │           └── spew.go
    │   ├── envoyproxy/
    │   │   ├── go-control-plane/
    │   │   │   └── envoy/
    │   │   │       ├── LICENSE
    │   │   │       ├── annotations/
    │   │   │       │   ├── deprecation.pb.go
    │   │   │       │   ├── deprecation.pb.validate.go
    │   │   │       │   ├── resource.pb.go
    │   │   │       │   ├── resource.pb.validate.go
    │   │   │       │   └── resource_vtproto.pb.go
    │   │   │       ├── config/
    │   │   │       │   ├── common/
    │   │   │       │   │   └── mutation_rules/
    │   │   │       │   │       └── v3/
    │   │   │       │   │           ├── mutation_rules.pb.go
    │   │   │       │   │           ├── mutation_rules.pb.validate.go
    │   │   │       │   │           └── mutation_rules_vtproto.pb.go
    │   │   │       │   ├── core/
    │   │   │       │   │   └── v3/
    │   │   │       │   │       ├── address.pb.go
    │   │   │       │   │       ├── address.pb.validate.go
    │   │   │       │   │       ├── address_vtproto.pb.go
    │   │   │       │   │       ├── backoff.pb.go
    │   │   │       │   │       ├── backoff.pb.validate.go
    │   │   │       │   │       ├── backoff_vtproto.pb.go
    │   │   │       │   │       ├── base.pb.go
    │   │   │       │   │       ├── base.pb.validate.go
    │   │   │       │   │       ├── base_vtproto.pb.go
    │   │   │       │   │       ├── cel.pb.go
    │   │   │       │   │       ├── cel.pb.validate.go
    │   │   │       │   │       ├── cel_vtproto.pb.go
    │   │   │       │   │       ├── config_source.pb.go
    │   │   │       │   │       ├── config_source.pb.validate.go
    │   │   │       │   │       ├── config_source_vtproto.pb.go
    │   │   │       │   │       ├── event_service_config.pb.go
    │   │   │       │   │       ├── event_service_config.pb.validate.go
    │   │   │       │   │       ├── event_service_config_vtproto.pb.go
    │   │   │       │   │       ├── extension.pb.go
    │   │   │       │   │       ├── extension.pb.validate.go
    │   │   │       │   │       ├── extension_vtproto.pb.go
    │   │   │       │   │       ├── grpc_method_list.pb.go
    │   │   │       │   │       ├── grpc_method_list.pb.validate.go
    │   │   │       │   │       ├── grpc_method_list_vtproto.pb.go
    │   │   │       │   │       ├── grpc_service.pb.go
    │   │   │       │   │       ├── grpc_service.pb.validate.go
    │   │   │       │   │       ├── grpc_service_vtproto.pb.go
    │   │   │       │   │       ├── health_check.pb.go
    │   │   │       │   │       ├── health_check.pb.validate.go
    │   │   │       │   │       ├── health_check_vtproto.pb.go
    │   │   │       │   │       ├── http_service.pb.go
    │   │   │       │   │       ├── http_service.pb.validate.go
    │   │   │       │   │       ├── http_service_vtproto.pb.go
    │   │   │       │   │       ├── http_uri.pb.go
    │   │   │       │   │       ├── http_uri.pb.validate.go
    │   │   │       │   │       ├── http_uri_vtproto.pb.go
    │   │   │       │   │       ├── protocol.pb.go
    │   │   │       │   │       ├── protocol.pb.validate.go
    │   │   │       │   │       ├── protocol_vtproto.pb.go
    │   │   │       │   │       ├── proxy_protocol.pb.go
    │   │   │       │   │       ├── proxy_protocol.pb.validate.go
    │   │   │       │   │       ├── proxy_protocol_vtproto.pb.go
    │   │   │       │   │       ├── resolver.pb.go
    │   │   │       │   │       ├── resolver.pb.validate.go
    │   │   │       │   │       ├── resolver_vtproto.pb.go
    │   │   │       │   │       ├── socket_cmsg_headers.pb.go
    │   │   │       │   │       ├── socket_cmsg_headers.pb.validate.go
    │   │   │       │   │       ├── socket_cmsg_headers_vtproto.pb.go
    │   │   │       │   │       ├── socket_option.pb.go
    │   │   │       │   │       ├── socket_option.pb.validate.go
    │   │   │       │   │       ├── socket_option_vtproto.pb.go
    │   │   │       │   │       ├── substitution_format_string.pb.go
    │   │   │       │   │       ├── substitution_format_string.pb.validate.go
    │   │   │       │   │       ├── substitution_format_string_vtproto.pb.go
    │   │   │       │   │       ├── udp_socket_config.pb.go
    │   │   │       │   │       ├── udp_socket_config.pb.validate.go
    │   │   │       │   │       └── udp_socket_config_vtproto.pb.go
    │   │   │       │   └── route/
    │   │   │       │       └── v3/
    │   │   │       │           ├── route.pb.go
    │   │   │       │           ├── route.pb.validate.go
    │   │   │       │           ├── route_components.pb.go
    │   │   │       │           ├── route_components.pb.validate.go
    │   │   │       │           ├── route_components_vtproto.pb.go
    │   │   │       │           ├── route_vtproto.pb.go
    │   │   │       │           ├── scoped_route.pb.go
    │   │   │       │           ├── scoped_route.pb.validate.go
    │   │   │       │           └── scoped_route_vtproto.pb.go
    │   │   │       ├── service/
    │   │   │       │   └── discovery/
    │   │   │       │       └── v3/
    │   │   │       │           ├── ads.pb.go
    │   │   │       │           ├── ads.pb.validate.go
    │   │   │       │           ├── ads_grpc.pb.go
    │   │   │       │           ├── ads_vtproto.pb.go
    │   │   │       │           ├── discovery.pb.go
    │   │   │       │           ├── discovery.pb.validate.go
    │   │   │       │           └── discovery_vtproto.pb.go
    │   │   │       └── type/
    │   │   │           ├── matcher/
    │   │   │           │   └── v3/
    │   │   │           │       ├── address.pb.go
    │   │   │           │       ├── address.pb.validate.go
    │   │   │           │       ├── address_vtproto.pb.go
    │   │   │           │       ├── filter_state.pb.go
    │   │   │           │       ├── filter_state.pb.validate.go
    │   │   │           │       ├── filter_state_vtproto.pb.go
    │   │   │           │       ├── http_inputs.pb.go
    │   │   │           │       ├── http_inputs.pb.validate.go
    │   │   │           │       ├── http_inputs_vtproto.pb.go
    │   │   │           │       ├── metadata.pb.go
    │   │   │           │       ├── metadata.pb.validate.go
    │   │   │           │       ├── metadata_vtproto.pb.go
    │   │   │           │       ├── node.pb.go
    │   │   │           │       ├── node.pb.validate.go
    │   │   │           │       ├── node_vtproto.pb.go
    │   │   │           │       ├── number.pb.go
    │   │   │           │       ├── number.pb.validate.go
    │   │   │           │       ├── number_vtproto.pb.go
    │   │   │           │       ├── path.pb.go
    │   │   │           │       ├── path.pb.validate.go
    │   │   │           │       ├── path_vtproto.pb.go
    │   │   │           │       ├── regex.pb.go
    │   │   │           │       ├── regex.pb.validate.go
    │   │   │           │       ├── regex_vtproto.pb.go
    │   │   │           │       ├── status_code_input.pb.go
    │   │   │           │       ├── status_code_input.pb.validate.go
    │   │   │           │       ├── status_code_input_vtproto.pb.go
    │   │   │           │       ├── string.pb.go
    │   │   │           │       ├── string.pb.validate.go
    │   │   │           │       ├── string_vtproto.pb.go
    │   │   │           │       ├── struct.pb.go
    │   │   │           │       ├── struct.pb.validate.go
    │   │   │           │       ├── struct_vtproto.pb.go
    │   │   │           │       ├── value.pb.go
    │   │   │           │       ├── value.pb.validate.go
    │   │   │           │       └── value_vtproto.pb.go
    │   │   │           ├── metadata/
    │   │   │           │   └── v3/
    │   │   │           │       ├── metadata.pb.go
    │   │   │           │       ├── metadata.pb.validate.go
    │   │   │           │       └── metadata_vtproto.pb.go
    │   │   │           ├── tracing/
    │   │   │           │   └── v3/
    │   │   │           │       ├── custom_tag.pb.go
    │   │   │           │       ├── custom_tag.pb.validate.go
    │   │   │           │       └── custom_tag_vtproto.pb.go
    │   │   │           └── v3/
    │   │   │               ├── hash_policy.pb.go
    │   │   │               ├── hash_policy.pb.validate.go
    │   │   │               ├── hash_policy_vtproto.pb.go
    │   │   │               ├── http.pb.go
    │   │   │               ├── http.pb.validate.go
    │   │   │               ├── http_status.pb.go
    │   │   │               ├── http_status.pb.validate.go
    │   │   │               ├── http_status_vtproto.pb.go
    │   │   │               ├── percent.pb.go
    │   │   │               ├── percent.pb.validate.go
    │   │   │               ├── percent_vtproto.pb.go
    │   │   │               ├── range.pb.go
    │   │   │               ├── range.pb.validate.go
    │   │   │               ├── range_vtproto.pb.go
    │   │   │               ├── ratelimit_strategy.pb.go
    │   │   │               ├── ratelimit_strategy.pb.validate.go
    │   │   │               ├── ratelimit_strategy_vtproto.pb.go
    │   │   │               ├── ratelimit_unit.pb.go
    │   │   │               ├── ratelimit_unit.pb.validate.go
    │   │   │               ├── semantic_version.pb.go
    │   │   │               ├── semantic_version.pb.validate.go
    │   │   │               ├── semantic_version_vtproto.pb.go
    │   │   │               ├── token_bucket.pb.go
    │   │   │               ├── token_bucket.pb.validate.go
    │   │   │               └── token_bucket_vtproto.pb.go
    │   │   └── protoc-gen-validate/
    │   │       ├── .bazelrc
    │   │       ├── .bazelversion
    │   │       ├── .clang-format
    │   │       ├── .gitignore
    │   │       ├── BUILD.bazel
    │   │       ├── Dockerfile
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── Next.mk
    │   │       ├── README.md
    │   │       ├── Tools.mk
    │   │       ├── WORKSPACE
    │   │       ├── dependencies.bzl
    │   │       ├── main.go
    │   │       ├── module/
    │   │       │   ├── BUILD
    │   │       │   ├── checker.go
    │   │       │   └── validate.go
    │   │       ├── requirements.txt
    │   │       ├── rule_comparison.md
    │   │       ├── templates/
    │   │       │   ├── BUILD.bazel
    │   │       │   ├── cc/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── const.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── in.go
    │   │       │   │   ├── known.go
    │   │       │   │   ├── ltgt.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── ccnop/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── file.go
    │   │       │   │   └── register.go
    │   │       │   ├── go/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── required.go
    │   │       │   │   └── timestamp.go
    │   │       │   ├── goshared/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── const.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── in.go
    │   │       │   │   ├── known.go
    │   │       │   │   ├── ltgt.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── java/
    │   │       │   │   ├── BUILD.bazel
    │   │       │   │   ├── any.go
    │   │       │   │   ├── bool.go
    │   │       │   │   ├── bytes.go
    │   │       │   │   ├── duration.go
    │   │       │   │   ├── enum.go
    │   │       │   │   ├── file.go
    │   │       │   │   ├── map.go
    │   │       │   │   ├── message.go
    │   │       │   │   ├── msg.go
    │   │       │   │   ├── none.go
    │   │       │   │   ├── num.go
    │   │       │   │   ├── oneof.go
    │   │       │   │   ├── register.go
    │   │       │   │   ├── repeated.go
    │   │       │   │   ├── required.go
    │   │       │   │   ├── string.go
    │   │       │   │   ├── timestamp.go
    │   │       │   │   └── wrapper.go
    │   │       │   ├── pkg.go
    │   │       │   └── shared/
    │   │       │       ├── BUILD.bazel
    │   │       │       ├── context.go
    │   │       │       ├── disabled.go
    │   │       │       ├── enums.go
    │   │       │       ├── functions.go
    │   │       │       ├── reflection.go
    │   │       │       └── well_known.go
    │   │       ├── tools.go
    │   │       └── validate/
    │   │           ├── BUILD
    │   │           ├── validate.h
    │   │           ├── validate.pb.go
    │   │           └── validate.proto
    │   ├── golang/
    │   │   └── snappy/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README
    │   │       ├── decode.go
    │   │       ├── decode_amd64.s
    │   │       ├── decode_arm64.s
    │   │       ├── decode_asm.go
    │   │       ├── decode_other.go
    │   │       ├── encode.go
    │   │       ├── encode_amd64.s
    │   │       ├── encode_arm64.s
    │   │       ├── encode_asm.go
    │   │       ├── encode_other.go
    │   │       └── snappy.go
    │   ├── iancoleman/
    │   │   └── strcase/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── acronyms.go
    │   │       ├── camel.go
    │   │       ├── doc.go
    │   │       └── snake.go
    │   ├── planetscale/
    │   │   └── vtprotobuf/
    │   │       ├── LICENSE
    │   │       ├── protohelpers/
    │   │       │   └── protohelpers.go
    │   │       └── types/
    │   │           └── known/
    │   │               ├── anypb/
    │   │               │   └── any_vtproto.pb.go
    │   │               ├── durationpb/
    │   │               │   └── duration_vtproto.pb.go
    │   │               ├── emptypb/
    │   │               │   └── empty_vtproto.pb.go
    │   │               ├── structpb/
    │   │               │   └── struct_vtproto.pb.go
    │   │               └── wrapperspb/
    │   │                   └── wrappers_vtproto.pb.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── spf13/
    │   │   └── afero/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.txt
    │   │       ├── README.md
    │   │       ├── afero.go
    │   │       ├── appveyor.yml
    │   │       ├── basepath.go
    │   │       ├── cacheOnReadFs.go
    │   │       ├── const_bsds.go
    │   │       ├── const_win_unix.go
    │   │       ├── copyOnWriteFs.go
    │   │       ├── httpFs.go
    │   │       ├── internal/
    │   │       │   └── common/
    │   │       │       └── adapters.go
    │   │       ├── iofs.go
    │   │       ├── ioutil.go
    │   │       ├── lstater.go
    │   │       ├── match.go
    │   │       ├── mem/
    │   │       │   ├── dir.go
    │   │       │   ├── dirmap.go
    │   │       │   └── file.go
    │   │       ├── memmap.go
    │   │       ├── os.go
    │   │       ├── path.go
    │   │       ├── readonlyfs.go
    │   │       ├── regexpfs.go
    │   │       ├── symlink.go
    │   │       ├── unionFile.go
    │   │       └── util.go
    │   └── stretchr/
    │       └── testify/
    │           ├── LICENSE
    │           ├── assert/
    │           │   ├── assertion_compare.go
    │           │   ├── assertion_format.go
    │           │   ├── assertion_format.go.tmpl
    │           │   ├── assertion_forward.go
    │           │   ├── assertion_forward.go.tmpl
    │           │   ├── assertion_order.go
    │           │   ├── assertions.go
    │           │   ├── doc.go
    │           │   ├── errors.go
    │           │   ├── forward_assertions.go
    │           │   ├── http_assertions.go
    │           │   └── yaml/
    │           │       ├── yaml_custom.go
    │           │       ├── yaml_default.go
    │           │       └── yaml_fail.go
    │           └── require/
    │               ├── doc.go
    │               ├── forward_requirements.go
    │               ├── require.go
    │               ├── require.go.tmpl
    │               ├── require_forward.go
    │               ├── require_forward.go.tmpl
    │               └── requirements.go
    ├── golang.org/
    │   └── x/
    │       ├── mod/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── internal/
    │       │   │   └── lazyregexp/
    │       │   │       └── lazyre.go
    │       │   ├── module/
    │       │   │   ├── module.go
    │       │   │   └── pseudo.go
    │       │   └── semver/
    │       │       └── semver.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── context/
    │       │   │   └── context.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── client_priority_go126.go
    │       │   │   ├── client_priority_go127.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go125.go
    │       │   │   ├── config_go126.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority_rfc7540.go
    │       │   │   ├── writesched_priority_rfc9218.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   ├── httpsfv/
    │       │   │   │   └── httpsfv.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   └── trace/
    │       │       ├── events.go
    │       │       ├── histogram.go
    │       │       └── trace.go
    │       ├── sync/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   └── errgroup/
    │       │       └── errgroup.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       └── bidirule.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables17.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables17.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           ├── go/
    │           │   └── ast/
    │           │       └── astutil/
    │           │           ├── enclosing.go
    │           │           ├── imports.go
    │           │           ├── rewrite.go
    │           │           └── util.go
    │           ├── imports/
    │           │   └── forward.go
    │           └── internal/
    │               ├── event/
    │               │   ├── core/
    │               │   │   ├── event.go
    │               │   │   ├── export.go
    │               │   │   └── fast.go
    │               │   ├── doc.go
    │               │   ├── event.go
    │               │   ├── keys/
    │               │   │   ├── keys.go
    │               │   │   ├── standard.go
    │               │   │   └── util.go
    │               │   └── label/
    │               │       └── label.go
    │               ├── gocommand/
    │               │   ├── invoke.go
    │               │   ├── invoke_notunix.go
    │               │   ├── invoke_unix.go
    │               │   ├── vendor.go
    │               │   └── version.go
    │               ├── gopathwalk/
    │               │   └── walk.go
    │               ├── imports/
    │               │   ├── fix.go
    │               │   ├── imports.go
    │               │   ├── mod.go
    │               │   ├── mod_cache.go
    │               │   ├── sortimports.go
    │               │   ├── source.go
    │               │   ├── source_env.go
    │               │   └── source_modindex.go
    │               ├── modindex/
    │               │   ├── directories.go
    │               │   ├── index.go
    │               │   ├── lookup.go
    │               │   ├── modindex.go
    │               │   └── symbols.go
    │               └── stdlib/
    │                   ├── deps.go
    │                   ├── import.go
    │                   ├── manifest.go
    │                   └── stdlib.go
    ├── google.golang.org/
    │   ├── genproto/
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   ├── LICENSE
    │   │       │   ├── annotations/
    │   │       │   │   ├── annotations.pb.go
    │   │       │   │   ├── client.pb.go
    │   │       │   │   ├── field_behavior.pb.go
    │   │       │   │   ├── field_info.pb.go
    │   │       │   │   ├── http.pb.go
    │   │       │   │   ├── resource.pb.go
    │   │       │   │   └── routing.pb.go
    │   │       │   ├── expr/
    │   │       │   │   └── v1alpha1/
    │   │       │   │       ├── checked.pb.go
    │   │       │   │       ├── eval.pb.go
    │   │       │   │       ├── explain.pb.go
    │   │       │   │       ├── syntax.pb.go
    │   │       │   │       └── value.pb.go
    │   │       │   └── launch_stage.pb.go
    │   │       └── rpc/
    │   │           ├── LICENSE
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── AUTHORS
    │   │   ├── CODE-OF-CONDUCT.md
    │   │   ├── CONTRIBUTING.md
    │   │   ├── GOVERNANCE.md
    │   │   ├── LICENSE
    │   │   ├── MAINTAINERS.md
    │   │   ├── Makefile
    │   │   ├── NOTICE.txt
    │   │   ├── README.md
    │   │   ├── SECURITY.md
    │   │   ├── attributes/
    │   │   │   └── attributes.go
    │   │   ├── backoff/
    │   │   │   └── backoff.go
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   ├── conn_state_evaluator.go
    │   │   │   ├── endpointsharding/
    │   │   │   │   └── endpointsharding.go
    │   │   │   ├── grpclb/
    │   │   │   │   └── state/
    │   │   │   │       └── state.go
    │   │   │   ├── pickfirst/
    │   │   │   │   ├── internal/
    │   │   │   │   │   └── internal.go
    │   │   │   │   └── pickfirst.go
    │   │   │   ├── roundrobin/
    │   │   │   │   └── roundrobin.go
    │   │   │   └── subconn.go
    │   │   ├── balancer_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── channelz/
    │   │   │   └── channelz.go
    │   │   ├── clientconn.go
    │   │   ├── cmd/
    │   │   │   └── protoc-gen-go-grpc/
    │   │   │       ├── LICENSE
    │   │   │       ├── README.md
    │   │   │       ├── grpc.go
    │   │   │       ├── main.go
    │   │   │       └── protoc-gen-go-grpc_test.sh
    │   │   ├── codec.go
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   ├── insecure/
    │   │   │   │   └── insecure.go
    │   │   │   └── tls.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   ├── encoding_v2.go
    │   │   │   ├── internal/
    │   │   │   │   └── internal.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── experimental/
    │   │   │   └── stats/
    │   │   │       ├── metricregistry.go
    │   │   │       └── metrics.go
    │   │   ├── grpclog/
    │   │   │   ├── component.go
    │   │   │   ├── grpclog.go
    │   │   │   ├── internal/
    │   │   │   │   ├── grpclog.go
    │   │   │   │   ├── logger.go
    │   │   │   │   └── loggerv2.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── balancer/
    │   │   │   │   ├── gracefulswitch/
    │   │   │   │   │   ├── config.go
    │   │   │   │   │   └── gracefulswitch.go
    │   │   │   │   └── weight/
    │   │   │   │       └── weight.go
    │   │   │   ├── balancerload/
    │   │   │   │   └── load.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   └── sink.go
    │   │   │   ├── buffer/
    │   │   │   │   └── unbounded.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── channel.go
    │   │   │   │   ├── channelmap.go
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── logging.go
    │   │   │   │   ├── server.go
    │   │   │   │   ├── socket.go
    │   │   │   │   ├── subchannel.go
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   ├── syscall_nonlinux.go
    │   │   │   │   └── trace.go
    │   │   │   ├── credentials/
    │   │   │   │   ├── credentials.go
    │   │   │   │   ├── spiffe.go
    │   │   │   │   ├── syscallconn.go
    │   │   │   │   └── util.go
    │   │   │   ├── envconfig/
    │   │   │   │   ├── envconfig.go
    │   │   │   │   ├── observability.go
    │   │   │   │   └── xds.go
    │   │   │   ├── experimental.go
    │   │   │   ├── grpclog/
    │   │   │   │   └── prefix_logger.go
    │   │   │   ├── grpcsync/
    │   │   │   │   ├── callback_serializer.go
    │   │   │   │   ├── event.go
    │   │   │   │   └── pubsub.go
    │   │   │   ├── grpcutil/
    │   │   │   │   ├── compressor.go
    │   │   │   │   ├── encode_duration.go
    │   │   │   │   ├── grpcutil.go
    │   │   │   │   ├── metadata.go
    │   │   │   │   ├── method.go
    │   │   │   │   └── regex.go
    │   │   │   ├── idle/
    │   │   │   │   └── idle.go
    │   │   │   ├── internal.go
    │   │   │   ├── mem/
    │   │   │   │   └── buffer_pool.go
    │   │   │   ├── metadata/
    │   │   │   │   └── metadata.go
    │   │   │   ├── pretty/
    │   │   │   │   └── pretty.go
    │   │   │   ├── proxyattributes/
    │   │   │   │   └── proxyattributes.go
    │   │   │   ├── resolver/
    │   │   │   │   ├── config_selector.go
    │   │   │   │   ├── delegatingresolver/
    │   │   │   │   │   └── delegatingresolver.go
    │   │   │   │   ├── dns/
    │   │   │   │   │   ├── dns_resolver.go
    │   │   │   │   │   └── internal/
    │   │   │   │   │       └── internal.go
    │   │   │   │   ├── passthrough/
    │   │   │   │   │   └── passthrough.go
    │   │   │   │   └── unix/
    │   │   │   │       └── unix.go
    │   │   │   ├── serviceconfig/
    │   │   │   │   ├── duration.go
    │   │   │   │   └── serviceconfig.go
    │   │   │   ├── stats/
    │   │   │   │   ├── labels.go
    │   │   │   │   ├── metrics_recorder_list.go
    │   │   │   │   └── stats.go
    │   │   │   ├── status/
    │   │   │   │   └── status.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   ├── tcp_keepalive_others.go
    │   │   │   ├── tcp_keepalive_unix.go
    │   │   │   ├── tcp_keepalive_windows.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── client_stream.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── logging.go
    │   │   │       ├── networktype/
    │   │   │       │   └── networktype.go
    │   │   │       ├── proxy.go
    │   │   │       ├── readyreader/
    │   │   │       │   ├── raw_conn_linux.go
    │   │   │       │   ├── raw_conn_nonlinux.go
    │   │   │       │   └── ready_reader.go
    │   │   │       ├── server_stream.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── mem/
    │   │   │   ├── buffer_pool.go
    │   │   │   ├── buffer_slice.go
    │   │   │   └── buffers.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── preloader.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── map.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── serviceconfig/
    │   │   │   └── serviceconfig.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   ├── metrics.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── stream_interfaces.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── trace_notrace.go
    │   │   ├── trace_withtrace.go
    │   │   └── version.go
    │   └── protobuf/
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── cmd/
    │       │   └── protoc-gen-go/
    │       │       ├── internal_gengo/
    │       │       │   ├── init.go
    │       │       │   ├── init_opaque.go
    │       │       │   ├── main.go
    │       │       │   ├── opaque.go
    │       │       │   ├── reflect.go
    │       │       │   └── well_known_types.go
    │       │       └── main.go
    │       ├── compiler/
    │       │   └── protogen/
    │       │       ├── protogen.go
    │       │       ├── protogen_apilevel.go
    │       │       └── protogen_opaque.go
    │       ├── encoding/
    │       │   ├── protojson/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   ├── encode.go
    │       │   │   └── well_known_types.go
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── editiondefaults/
    │       │   │   ├── defaults.go
    │       │   │   └── editions_defaults.binpb
    │       │   ├── editionssupport/
    │       │   │   └── editions.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── json/
    │       │   │   │   ├── decode.go
    │       │   │   │   ├── decode_number.go
    │       │   │   │   ├── decode_string.go
    │       │   │   │   ├── decode_token.go
    │       │   │   │   └── encode.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   └── errors.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   ├── editions.go
    │       │   │   ├── placeholder.go
    │       │   │   └── presence.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── go_features_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── name.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── api_export_opaque.go
    │       │   │   ├── bitmap.go
    │       │   │   ├── bitmap_race.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_field_opaque.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_message_opaque.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── equal.go
    │       │   │   ├── extension.go
    │       │   │   ├── lazy.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_opaque.go
    │       │   │   ├── message_opaque_gen.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_field_gen.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── pointer_unsafe_opaque.go
    │       │   │   ├── presence.go
    │       │   │   └── validate.go
    │       │   ├── msgfmt/
    │       │   │   └── format.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── protolazy/
    │       │   │   ├── bufferreader.go
    │       │   │   ├── lazy.go
    │       │   │   └── pointer_unsafe.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   ├── wrapperopaque.go
    │       │   └── wrappers.go
    │       ├── protoadapt/
    │       │   └── convert.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   ├── editions.go
    │       │   │   └── proto.go
    │       │   ├── protopath/
    │       │   │   ├── path.go
    │       │   │   └── step.go
    │       │   ├── protorange/
    │       │   │   └── range.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_equal.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           ├── dynamicpb/
    │           │   ├── dynamic.go
    │           │   └── types.go
    │           ├── gofeaturespb/
    │           │   └── go_features.pb.go
    │           ├── known/
    │           │   ├── anypb/
    │           │   │   └── any.pb.go
    │           │   ├── durationpb/
    │           │   │   └── duration.pb.go
    │           │   ├── emptypb/
    │           │   │   └── empty.pb.go
    │           │   ├── structpb/
    │           │   │   └── struct.pb.go
    │           │   ├── timestamppb/
    │           │   │   └── timestamp.pb.go
    │           │   └── wrapperspb/
    │           │       └── wrappers.pb.go
    │           └── pluginpb/
    │               └── plugin.pb.go
    ├── gopkg.in/
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    └── modules.txt
Copy disabled (too large) Download .txt
Showing preview only (10,591K chars total). Download the full file to get everything.
SYMBOL INDEX (121979 symbols across 1239 files)

FILE: cilium/accesslog.cc
  type Envoy (line 25) | namespace Envoy {
    type Cilium (line 26) | namespace Cilium {
      function AccessLogSharedPtr (line 31) | AccessLogSharedPtr AccessLog::open(const std::string& path, TimeSour...

FILE: cilium/accesslog.h
  function namespace (line 22) | namespace Envoy {

FILE: cilium/bpf.cc
  type Envoy (line 18) | namespace Envoy {
    type Cilium (line 19) | namespace Cilium {

FILE: cilium/bpf.h
  function namespace (line 13) | namespace Envoy {

FILE: cilium/bpf_metadata.cc
  type Configuration (line 55) | namespace Configuration {
    class BpfMetadataConfigFactory (line 61) | class BpfMetadataConfigFactory : public NamedListenerFilterConfigFacto...
      method createListenerFilterFactoryFromProto (line 64) | Network::ListenerFilterFactoryCb createListenerFilterFactoryFromProto(
      method createEmptyConfigProto (line 100) | ProtobufTypes::MessagePtr createEmptyConfigProto() override {
      method name (line 104) | std::string name() const override { return "cilium.bpf_metadata"; }
    function REGISTER_FACTORY (line 111) | REGISTER_FACTORY(BpfMetadataConfigFactory,
    type Cilium (line 172) | namespace Cilium {
      function getCiliumXDSAPIConfig (line 176) | const envoy::config::core::v3::ConfigSource getCiliumXDSAPIConfig() {
      type BpfMetadata (line 194) | namespace BpfMetadata {
        function createHostMap (line 203) | std::shared_ptr<const Cilium::PolicyHostMap>
        function createPolicyMap (line 214) | std::shared_ptr<const Cilium::NetworkPolicyMap>
        function IpAddressPair (line 343) | IpAddressPair Config::getIpAddressPairWithPort(uint16_t port, cons...
        function PolicyInstance (line 378) | const PolicyInstance& Config::getPolicy(const std::string& pod_ip)...

FILE: cilium/bpf_metadata.h
  function namespace (line 32) | namespace Envoy {

FILE: cilium/conntrack.cc
  type Envoy (line 21) | namespace Envoy {
    type Cilium (line 22) | namespace Cilium {
      type IPv6CtTuple (line 38) | struct IPv6CtTuple {
      type IPv4CtTuple (line 47) | struct IPv4CtTuple {
      type CtEntry (line 56) | struct CtEntry {
      type IPv4CtTuple (line 80) | struct IPv4CtTuple
      type CtEntry (line 80) | struct CtEntry
      type IPv6CtTuple (line 92) | struct IPv6CtTuple
      type CtEntry (line 92) | struct CtEntry
      type IPv4CtTuple (line 116) | struct IPv4CtTuple
      type IPv6CtTuple (line 117) | struct IPv6CtTuple
      type CtEntry (line 118) | struct CtEntry

FILE: cilium/conntrack.h
  function namespace (line 14) | namespace Envoy {

FILE: cilium/filter_state_cilium_destination.cc
  type Envoy (line 7) | namespace Envoy {
    type Cilium (line 8) | namespace Cilium {

FILE: cilium/filter_state_cilium_destination.h
  function namespace (line 11) | namespace Envoy {

FILE: cilium/filter_state_cilium_policy.cc
  type Envoy (line 15) | namespace Envoy {
    type Cilium (line 16) | namespace Cilium {

FILE: cilium/filter_state_cilium_policy.h
  function namespace (line 20) | namespace Envoy {

FILE: cilium/grpc_subscription.cc
  type Envoy (line 38) | namespace Envoy {
    type Cilium (line 39) | namespace Cilium {
      type Service (line 44) | struct Service {
      function TypeUrlToServiceMap (line 53) | TypeUrlToServiceMap* buildTypeUrlToServiceMap() {
      function TypeUrlToServiceMap (line 92) | TypeUrlToServiceMap& typeUrlToServiceMap() {
      class NopConfigValidatorsImpl (line 97) | class NopConfigValidatorsImpl : public Envoy::Config::CustomConfigVa...
        method NopConfigValidatorsImpl (line 99) | NopConfigValidatorsImpl() = default;
        method executeValidators (line 101) | void executeValidators(absl::string_view,
        method executeValidators (line 103) | void executeValidators(absl::string_view, const std::vector<Envoy:...
      function subscribe (line 123) | std::unique_ptr<Config::GrpcSubscriptionImpl>

FILE: cilium/grpc_subscription.h
  function namespace (line 20) | namespace Envoy {

FILE: cilium/health_check_sink.cc
  type Envoy (line 22) | namespace Envoy {
    type Cilium (line 23) | namespace Cilium {

FILE: cilium/health_check_sink.h
  function namespace (line 20) | namespace Envoy {

FILE: cilium/host_map.cc
  type Envoy (line 34) | namespace Envoy {
    type Cilium (line 35) | namespace Cilium {
      function checkPrefix (line 43) | unsigned int checkPrefix(T addr, bool have_prefix, unsigned int plen...
      type ThreadLocalHostMapInitializer (line 60) | struct ThreadLocalHostMapInitializer : public PolicyHostMap::ThreadL...
        method M (line 67) | M& getMap(std::vector<std::pair<unsigned int, M>>& maps, unsigned ...
        method insert (line 88) | bool insert(uint32_t addr, unsigned int plen, uint64_t policy) {
        method insert (line 93) | bool insert(absl::uint128 addr, unsigned int plen, uint64_t policy) {
        method insert (line 98) | void insert(const cilium::NetworkPolicyHosts& proto) {

FILE: cilium/host_map.h
  function namespace (line 43) | namespace std {
  function namespace (line 52) | namespace Envoy {
  function startSubscription (line 122) | void startSubscription(std::unique_ptr<Envoy::Config::Subscription>&& su...
  type ThreadLocalHostMap (line 130) | struct ThreadLocalHostMap
  function resolve (line 211) | uint64_t resolve(const Network::Address::Ip* addr) const {
  function logmaps (line 216) | void logmaps(const std::string& msg) {

FILE: cilium/ipcache.cc
  type Envoy (line 21) | namespace Envoy {
    type Cilium (line 22) | namespace Cilium {
      function H (line 26) | H AbslHashValue(H state, const IpCacheKey& key) {
      function IpCacheSharedPtr (line 34) | IpCacheSharedPtr IpCache::newIpCache(Server::Configuration::ServerFa...
      function IpCacheSharedPtr (line 53) | IpCacheSharedPtr IpCache::getIpCache(Server::Configuration::ServerFa...
      type IpCacheKey (line 60) | struct IpCacheKey
      type RemoteEndpointInfo (line 61) | struct RemoteEndpointInfo
      type IpCacheKey (line 118) | struct IpCacheKey
      type RemoteEndpointInfo (line 119) | struct RemoteEndpointInfo

FILE: cilium/ipcache.h
  function namespace (line 24) | namespace Envoy {
  type bpf_lpm_trie_key (line 53) | struct bpf_lpm_trie_key
  type RemoteEndpointInfo (line 74) | struct RemoteEndpointInfo {
  type CachedEndpointInfo (line 79) | struct CachedEndpointInfo {

FILE: cilium/l7policy.cc
  type Envoy (line 41) | namespace Envoy {
    type Cilium (line 42) | namespace Cilium {
      class CiliumAccessFilterFactory (line 44) | class CiliumAccessFilterFactory
        method CiliumAccessFilterFactory (line 47) | CiliumAccessFilterFactory() : DualFactoryBase("cilium.l7policy") {}
        method createFilterFactoryFromProtoTyped (line 50) | absl::StatusOr<Http::FilterFactoryCb>

FILE: cilium/l7policy.h
  function namespace (line 23) | namespace Envoy {

FILE: cilium/network_filter.cc
  type Envoy (line 37) | namespace Envoy {
    type Server (line 38) | namespace Server {
      type Configuration (line 39) | namespace Configuration {
        class CiliumNetworkConfigFactory (line 45) | class CiliumNetworkConfigFactory : public NamedNetworkFilterConfig...
          method createFilterFactoryFromProto (line 48) | absl::StatusOr<Network::FilterFactoryCb>
          method createEmptyConfigProto (line 60) | ProtobufTypes::MessagePtr createEmptyConfigProto() override {
          method name (line 64) | std::string name() const override { return "cilium.network"; }
    type Filter (line 75) | namespace Filter {
      type CiliumL3 (line 76) | namespace CiliumL3 {

FILE: cilium/network_filter.h
  function namespace (line 26) | namespace Envoy {

FILE: cilium/network_policy.cc
  type fmt (line 72) | namespace fmt {
    type formatter<Envoy::Cilium::RuleVerdict> (line 74) | struct formatter<Envoy::Cilium::RuleVerdict> {
      method parse (line 75) | constexpr auto parse(fmt::format_parse_context& ctx) { return ctx.be...
      method format (line 78) | auto format(Envoy::Cilium::RuleVerdict verdict, FormatContext& ctx) ...
  type Envoy (line 100) | namespace Envoy {
    type Cilium (line 101) | namespace Cilium {
      class HeaderMatch (line 121) | class HeaderMatch : public Logger::Loggable<Logger::Id::config> {
        method HeaderMatch (line 123) | HeaderMatch(const NetworkPolicyMapImpl& parent, const cilium::Head...
        method logRejected (line 131) | void logRejected(Cilium::AccessLog::Entry& log_entry, absl::string...
        method logMissing (line 135) | void logMissing(Cilium::AccessLog::Entry& log_entry, absl::string_...
        method allowed (line 140) | bool allowed(Envoy::Http::RequestHeaderMap& headers, Cilium::Acces...
        method toString (line 226) | void toString(int indent, std::string& res) const {
      class HttpNetworkPolicyRule (line 254) | class HttpNetworkPolicyRule : public Logger::Loggable<Logger::Id::co...
        method HttpNetworkPolicyRule (line 256) | HttpNetworkPolicyRule(const NetworkPolicyMapImpl& parent,
        method allowed (line 287) | bool allowed(const Envoy::Http::RequestHeaderMap& headers) const {
        method headerMatches (line 294) | bool headerMatches(Envoy::Http::RequestHeaderMap& headers,
        method toString (line 305) | void toString(int indent, std::string& res) const {
      class L7NetworkPolicyRule (line 379) | class L7NetworkPolicyRule : public Logger::Loggable<Logger::Id::conf...
        method L7NetworkPolicyRule (line 381) | L7NetworkPolicyRule(const NetworkPolicyMapImpl& parent, const cili...
        method matches (line 390) | bool matches(const envoy::config::core::v3::Metadata& metadata) co...
        method toString (line 400) | void toString(int indent, std::string& res) const {
      class PortNetworkPolicyRule (line 459) | class PortNetworkPolicyRule : public Logger::Loggable<Logger::Id::co...
        method PortNetworkPolicyRule (line 461) | PortNetworkPolicyRule()
        method PortNetworkPolicyRule (line 465) | PortNetworkPolicyRule(const NetworkPolicyMapImpl& parent,
        method inheritPassPrecedence (line 514) | void inheritPassPrecedence(const PortNetworkPolicyRule& pass_rule) {
        method isRemoteWildcard (line 519) | bool isRemoteWildcard() const { return remotes_.empty(); }
        method RuleVerdict (line 521) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id) const {
        method RuleVerdict (line 534) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id, absl...
        method RuleVerdict (line 545) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method RuleVerdict (line 572) | RuleVerdict useProxylib(uint16_t proxy_id, uint32_t remote_id, std...
        method RuleVerdict (line 587) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method getServerTlsContext (line 617) | bool getServerTlsContext(Ssl::ContextSharedPtr& tls_context,
        method getClientTlsContext (line 629) | bool getClientTlsContext(Ssl::ContextSharedPtr& tls_context,
        method toString (line 639) | void toString(int indent, std::string& res) const {
        method hasHttpRules (line 697) | bool hasHttpRules() const { return http_rules_ && !http_rules_->em...
      class PortNetworkPolicyRules (line 720) | class PortNetworkPolicyRules : public Logger::Loggable<Logger::Id::c...
        method PortNetworkPolicyRules (line 722) | PortNetworkPolicyRules() = default;
        method clear (line 731) | void clear() {
        method PortNetworkPolicyRules (line 738) | PortNetworkPolicyRules& operator=(PortNetworkPolicyRules&& other) ...
        method PortNetworkPolicyRules (line 741) | PortNetworkPolicyRules(PortNetworkPolicyRules&& other) noexcept = ...
        method PortNetworkPolicyRules (line 744) | PortNetworkPolicyRules& operator=(const PortNetworkPolicyRules&) =...
        method PortNetworkPolicyRules (line 745) | PortNetworkPolicyRules(const PortNetworkPolicyRules&) = default;
        method updateFor (line 747) | void updateFor(const PortNetworkPolicyRuleConstSharedPtr& rule) {
        method addDefaultAllowRule (line 756) | void addDefaultAllowRule() { rules_.emplace_back(std::make_shared<...
        method append (line 761) | void append(const NetworkPolicyMapImpl& parent,
        method prepend (line 778) | void prepend(const NetworkPolicyMapImpl& parent,
        method appendNonPassRules (line 796) | void appendNonPassRules(const std::vector<PortNetworkPolicyRuleCon...
        method sort (line 811) | void sort() {
        method empty (line 821) | bool empty() const { return rules_.empty(); }
        method RuleVerdict (line 823) | RuleVerdict forEachRule(bool can_short_circuit, F&& func) const {
        method RuleVerdict (line 863) | RuleVerdict forEachRulePred(F&& get_verdict, P&& pred) const {
        method RuleVerdict (line 905) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method RuleVerdict (line 918) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id, absl...
        method RuleVerdict (line 927) | RuleVerdict useProxylib(uint16_t proxy_id, uint32_t remote_id, std...
        method RuleVerdict (line 932) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method RuleVerdict (line 944) | RuleVerdict getServerTlsContext(uint16_t proxy_id, uint32_t remote...
        method RuleVerdict (line 953) | RuleVerdict getClientTlsContext(uint16_t proxy_id, uint32_t remote...
        method toString (line 962) | void toString(int indent, std::string& res) const {
        method hasHttpRules (line 972) | bool hasHttpRules() const {
      function PortNetworkPolicyRules (line 990) | const PortNetworkPolicyRules* findPortRules(const PolicyMap& map, ui...
        method PortNetworkPolicyRules (line 722) | PortNetworkPolicyRules() = default;
        method clear (line 731) | void clear() {
        method PortNetworkPolicyRules (line 738) | PortNetworkPolicyRules& operator=(PortNetworkPolicyRules&& other) ...
        method PortNetworkPolicyRules (line 741) | PortNetworkPolicyRules(PortNetworkPolicyRules&& other) noexcept = ...
        method PortNetworkPolicyRules (line 744) | PortNetworkPolicyRules& operator=(const PortNetworkPolicyRules&) =...
        method PortNetworkPolicyRules (line 745) | PortNetworkPolicyRules(const PortNetworkPolicyRules&) = default;
        method updateFor (line 747) | void updateFor(const PortNetworkPolicyRuleConstSharedPtr& rule) {
        method addDefaultAllowRule (line 756) | void addDefaultAllowRule() { rules_.emplace_back(std::make_shared<...
        method append (line 761) | void append(const NetworkPolicyMapImpl& parent,
        method prepend (line 778) | void prepend(const NetworkPolicyMapImpl& parent,
        method appendNonPassRules (line 796) | void appendNonPassRules(const std::vector<PortNetworkPolicyRuleCon...
        method sort (line 811) | void sort() {
        method empty (line 821) | bool empty() const { return rules_.empty(); }
        method RuleVerdict (line 823) | RuleVerdict forEachRule(bool can_short_circuit, F&& func) const {
        method RuleVerdict (line 863) | RuleVerdict forEachRulePred(F&& get_verdict, P&& pred) const {
        method RuleVerdict (line 905) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method RuleVerdict (line 918) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id, absl...
        method RuleVerdict (line 927) | RuleVerdict useProxylib(uint16_t proxy_id, uint32_t remote_id, std...
        method RuleVerdict (line 932) | RuleVerdict getVerdict(uint16_t proxy_id, uint32_t remote_id,
        method RuleVerdict (line 944) | RuleVerdict getServerTlsContext(uint16_t proxy_id, uint32_t remote...
        method RuleVerdict (line 953) | RuleVerdict getClientTlsContext(uint16_t proxy_id, uint32_t remote...
        method toString (line 962) | void toString(int indent, std::string& res) const {
        method hasHttpRules (line 972) | bool hasHttpRules() const {
      function rangesOverlap (line 1086) | bool inline rangesOverlap(const PortRange& a, const PortRange& b) {
      function intersection (line 1092) | absl::btree_set<T> intersection(const absl::btree_set<T>& a, const a...
      class ShadowedRemotes (line 1105) | class ShadowedRemotes {
        method reset (line 1108) | void reset(uint32_t first_precedence) {
        method resetForNewTier (line 1118) | void resetForNewTier(uint32_t first_precedence) {
        method shadowPassRemotes (line 1129) | bool shadowPassRemotes(const absl::btree_set<uint32_t>& pass_remot...
        method filterShadowPassRemotes (line 1144) | bool filterShadowPassRemotes(PortNetworkPolicyRule& rule) {
        method shadowNonpassRule (line 1158) | bool shadowNonpassRule(PortNetworkPolicyRule& rule) {
      class Passes (line 1224) | class Passes {
        method reset (line 1227) | void reset(uint32_t first_precedence) {
        method resetForNextTier (line 1239) | void resetForNextTier(uint32_t first_precedence) {
        method inheritHigherTierWildcardPassRules (line 1252) | void inheritHigherTierWildcardPassRules(uint32_t precedence) {
        method inheritCurrentTierWildcardPassRules (line 1268) | void inheritCurrentTierWildcardPassRules(uint32_t precedence) {
        method addPassRule (line 1296) | void addPassRule(const PortNetworkPolicyRuleConstSharedPtr& rule) {
        method promoteRuleFromHigherTierPasses (line 1317) | bool
        method storeWildcardPassRules (line 1380) | void storeWildcardPassRules(const PortRange& port_range) {
        method apply (line 1427) | void apply(const PortRange& port_range, PortNetworkPolicyRules& ru...
        method ensurePassPrecedence (line 1510) | void ensurePassPrecedence(uint32_t tier_last_precedence) {
      class PortNetworkPolicy (line 1533) | class PortNetworkPolicy : public Logger::Loggable<Logger::Id::config> {
        method PortNetworkPolicy (line 1535) | PortNetworkPolicy(const NetworkPolicyMapImpl& parent,
        method PortPolicy (line 1750) | const PortPolicy findPortPolicy(uint16_t port) const { return Port...
        method toString (line 1752) | void toString(int indent, std::string& res) const {
      class PolicyInstanceImpl (line 1771) | class PolicyInstanceImpl : public PolicyInstance {
        method PolicyInstanceImpl (line 1773) | PolicyInstanceImpl(const NetworkPolicyMapImpl& parent, uint64_t hash,
        method allowed (line 1779) | bool allowed(bool ingress, uint16_t proxy_id, uint32_t remote_id, ...
        method allowed (line 1789) | bool allowed(bool ingress, uint16_t proxy_id, uint32_t remote_id, ...
        method PortPolicy (line 1795) | const PortPolicy findPortPolicy(bool ingress, uint16_t port) const...
        method useProxylib (line 1799) | bool useProxylib(bool ingress, uint16_t proxy_id, uint32_t remote_...
        method getEndpointID (line 1805) | uint32_t getEndpointID() const override { return endpoint_id_; }
        method IpAddressPair (line 1807) | const IpAddressPair& getEndpointIPs() const override { return endp...
        method string (line 1809) | std::string string() const override {
        method tlsWrapperMissingPolicyInc (line 1818) | void tlsWrapperMissingPolicyInc() const override { parent_.tlsWrap...
      class AllowAllEgressPolicyInstanceImpl (line 2131) | class AllowAllEgressPolicyInstanceImpl : public PolicyInstance {
        method AllowAllEgressPolicyInstanceImpl (line 2133) | AllowAllEgressPolicyInstanceImpl() {
        method allowed (line 2137) | bool allowed(bool ingress, uint16_t, uint32_t, uint16_t, Envoy::Ht...
        method allowed (line 2142) | bool allowed(bool ingress, uint16_t, uint32_t, absl::string_view, ...
        method PortPolicy (line 2146) | const PortPolicy findPortPolicy(bool ingress, uint16_t) const over...
        method useProxylib (line 2150) | bool useProxylib(bool, uint16_t, uint32_t, uint16_t, std::string&)...
        method getEndpointID (line 2154) | uint32_t getEndpointID() const override { return 0; }
        method IpAddressPair (line 2156) | const IpAddressPair& getEndpointIPs() const override { return empt...
        method string (line 2158) | std::string string() const override { return "AllowAllEgressPolicy...
        method tlsWrapperMissingPolicyInc (line 2160) | void tlsWrapperMissingPolicyInc() const override {}
      function PolicyInstance (line 2172) | PolicyInstance& NetworkPolicyMap::getAllowAllEgressPolicy() { return...
      class DenyAllPolicyInstanceImpl (line 2175) | class DenyAllPolicyInstanceImpl : public PolicyInstance {
        method DenyAllPolicyInstanceImpl (line 2177) | DenyAllPolicyInstanceImpl() = default;
        method allowed (line 2179) | bool allowed(bool, uint16_t, uint32_t, uint16_t, Envoy::Http::Requ...
        method allowed (line 2184) | bool allowed(bool, uint16_t, uint32_t, absl::string_view, uint16_t...
        method PortPolicy (line 2188) | const PortPolicy findPortPolicy(bool, uint16_t) const override {
        method useProxylib (line 2192) | bool useProxylib(bool, uint16_t, uint32_t, uint16_t, std::string&)...
        method getEndpointID (line 2196) | uint32_t getEndpointID() const override { return 0; }
        method IpAddressPair (line 2198) | const IpAddressPair& getEndpointIPs() const override { return empt...
        method string (line 2200) | std::string string() const override { return "DenyAllPolicyInstanc...
        method tlsWrapperMissingPolicyInc (line 2202) | void tlsWrapperMissingPolicyInc() const override {}
      function PolicyInstance (line 2214) | PolicyInstance& NetworkPolicyMap::getDenyAllPolicy() { return DenyAl...
      function PolicyInstance (line 2216) | const PolicyInstance*
      function PolicyInstance (line 2237) | const PolicyInstance& NetworkPolicyMap::getPolicyInstance(const std:...

FILE: cilium/network_policy.h
  function namespace (line 54) | namespace Envoy {
  function startSubscription (line 361) | void startSubscription(std::unique_ptr<Envoy::Config::Subscription>&& su...
  function exists (line 373) | bool exists(const std::string& endpoint_policy_name) const {
  function class (line 414) | class SniPattern : public Logger::Loggable<Logger::Id::config> {

FILE: cilium/policy_id.h
  function namespace (line 5) | namespace Envoy {

FILE: cilium/privileged_service_client.cc
  type Envoy (line 29) | namespace Envoy {
    type Cilium (line 30) | namespace Cilium {
      type PrivilegedService (line 31) | namespace PrivilegedService {

FILE: cilium/privileged_service_client.h
  function namespace (line 27) | namespace Envoy {

FILE: cilium/proxylib.cc
  type Envoy (line 21) | namespace Envoy {
    type Cilium (line 22) | namespace Cilium {
      function FilterResult (line 116) | FilterResult GoFilter::Instance::onIo(bool reply, Buffer::Instance& ...

FILE: cilium/proxylib.h
  function namespace (line 18) | namespace Envoy {

FILE: cilium/secret_watcher.cc
  type Envoy (line 28) | namespace Envoy {
    type Cilium (line 29) | namespace Cilium {
      function getCiliumSDSConfig (line 34) | envoy::config::core::v3::ConfigSource
      function secretProvider (line 41) | Secret::GenericSecretConfigProviderSharedPtr
      function setSDSConfigFunc (line 53) | void setSDSConfigFunc(GetSdsConfigFunc func) { getSDSConfig = func; }
      function resetSDSConfigFunc (line 54) | void resetSDSConfigFunc() { getSDSConfig = &getCiliumSDSConfig; }
      function setCommonConfig (line 101) | void setCommonConfig(const cilium::TLSContext config,

FILE: cilium/secret_watcher.h
  function namespace (line 26) | namespace Envoy {

FILE: cilium/socket_option_cilium_mark.cc
  type Envoy (line 14) | namespace Envoy {
    type Cilium (line 15) | namespace Cilium {

FILE: cilium/socket_option_cilium_mark.h
  function namespace (line 13) | namespace Envoy {

FILE: cilium/socket_option_ip_transparent.cc
  type Envoy (line 17) | namespace Envoy {
    type Cilium (line 18) | namespace Cilium {

FILE: cilium/socket_option_ip_transparent.h
  function namespace (line 13) | namespace Envoy {

FILE: cilium/socket_option_source_address.cc
  type Envoy (line 23) | namespace Envoy {
    type Cilium (line 24) | namespace Cilium {
      type linger (line 104) | struct linger
      function addressIntoVector (line 135) | void addressIntoVector(std::vector<uint8_t>& vec, const T& address) {

FILE: cilium/socket_option_source_address.h
  function namespace (line 17) | namespace Envoy {

FILE: cilium/tls_wrapper.cc
  type Envoy (line 34) | namespace Envoy {
    type Cilium (line 35) | namespace Cilium {
      class SslSocketWrapper (line 43) | class SslSocketWrapper : public Network::TransportSocket, Logger::Lo...
        method SslSocketWrapper (line 45) | SslSocketWrapper(Extensions::TransportSockets::Tls::InitialState s...
        method setTransportSocketCallbacks (line 50) | void setTransportSocketCallbacks(Network::TransportSocketCallbacks...
        method protocol (line 65) | std::string protocol() const override { return socket_ ? socket_->...
        method failureReason (line 67) | absl::string_view failureReason() const override {
        method canFlushClose (line 71) | bool canFlushClose() override { return socket_ ? socket_->canFlush...
        method closeSocket (line 76) | void closeSocket(Network::ConnectionEvent type) override {
        method doRead (line 82) | Network::IoResult doRead(Buffer::Instance& buffer) override {
        method doWrite (line 89) | Network::IoResult doWrite(Buffer::Instance& buffer, bool end_strea...
        method onConnected (line 96) | void onConnected() override {
        method prepareSocket (line 107) | void prepareSocket() {
        method ssl (line 216) | Ssl::ConnectionInfoConstSharedPtr ssl() const override {
        method startSecureTransport (line 220) | bool startSecureTransport() override { return socket_ ? socket_->s...
        method configureInitialCongestionWindow (line 222) | void configureInitialCongestionWindow(uint64_t bandwidth_bits_per_...
      class ClientSslSocketFactory (line 236) | class ClientSslSocketFactory : public Network::CommonUpstreamTranspo...
        method createTransportSocket (line 238) | Network::TransportSocketPtr
        method defaultServerNameIndication (line 245) | absl::string_view defaultServerNameIndication() const override { r...
        method implementsSecureTransport (line 247) | bool implementsSecureTransport() const override { return true; }
      class ServerSslSocketFactory (line 250) | class ServerSslSocketFactory : public Network::DownstreamTransportSo...
        method createDownstreamTransportSocket (line 252) | Network::TransportSocketPtr createDownstreamTransportSocket() cons...
        method implementsSecureTransport (line 257) | bool implementsSecureTransport() const override { return true; }

FILE: cilium/tls_wrapper.h
  function namespace (line 15) | namespace Envoy {

FILE: cilium/uds_client.cc
  type Envoy (line 21) | namespace Envoy {
    type Cilium (line 22) | namespace Cilium {

FILE: cilium/uds_client.h
  function namespace (line 16) | namespace Envoy {

FILE: cilium/websocket.cc
  type Envoy (line 31) | namespace Envoy {
    type Cilium (line 32) | namespace Cilium {
      type WebSocket (line 33) | namespace WebSocket {
        class CiliumWebSocketServerConfigFactory (line 59) | class CiliumWebSocketServerConfigFactory
          method createFilterFactoryFromProto (line 63) | absl::StatusOr<Network::FilterFactoryCb>
          method createEmptyConfigProto (line 75) | ProtobufTypes::MessagePtr createEmptyConfigProto() override {
          method name (line 79) | std::string name() const override { return "cilium.network.webso...
        class CiliumWebSocketClientConfigFactory (line 92) | class CiliumWebSocketClientConfigFactory
          method createFilterFactoryFromProto (line 96) | absl::StatusOr<Network::FilterFactoryCb>
          method createEmptyConfigProto (line 108) | ProtobufTypes::MessagePtr createEmptyConfigProto() override {
          method name (line 112) | std::string name() const override { return "cilium.network.webso...

FILE: cilium/websocket.h
  function namespace (line 19) | namespace WebSocket {
  function ConfigSharedPtr (line 39) | const ConfigSharedPtr& config() override { return config_; }
  function onHandshakeCreated (line 40) | void onHandshakeCreated(const Http::RequestHeaderMap& headers) override {
  function onHandshakeSent (line 43) | void onHandshakeSent() override { config_->log(log_entry_, ::cilium::Ent...
  function onHandshakeResponse (line 45) | void onHandshakeResponse(const Http::ResponseHeaderMap& headers) override {
  function onHandshakeResponseSent (line 49) | void onHandshakeResponseSent(const Http::ResponseHeaderMap& headers) ove...
  function setOriginalDestinationAddress (line 64) | void
  function CodecPtr (line 74) | CodecPtr codec_{nullptr};

FILE: cilium/websocket_codec.cc
  type Envoy (line 41) | namespace Envoy {
    type Cilium (line 42) | namespace Cilium {
      type WebSocket (line 43) | namespace WebSocket {
        class HttpParser (line 63) | class HttpParser : public Logger::Loggable<Logger::Id::filter> {
          method HttpParser (line 66) | HttpParser(http_parser_type type) : type_(type) {}
          method parse (line 68) | bool parse(absl::string_view msg) {
          method versionIsHttp11 (line 105) | bool versionIsHttp11() {
          method size (line 111) | uint32_t size() { return parser_.nread; }
          method completeLastHeader (line 114) | int completeLastHeader() {
          method onHeaderField (line 136) | int onHeaderField(const char* data, size_t length) {
          method onHeaderValue (line 148) | int onHeaderValue(const char* data, size_t length) {
          method onHeadersComplete (line 167) | virtual int onHeadersComplete() { return completeLastHeader(); }
        class RequestParser (line 180) | class RequestParser : public HttpParser {
          method RequestParser (line 182) | RequestParser() : HttpParser(HTTP_REQUEST), headers_(Http::Reque...
          method onHeadersComplete (line 187) | int onHeadersComplete() override {
          method addHeader (line 192) | void addHeader(Http::HeaderString&& key, Http::HeaderString&& va...
        class ResponseParser (line 200) | class ResponseParser : public HttpParser {
          method ResponseParser (line 202) | ResponseParser() : HttpParser(HTTP_RESPONSE), headers_(Http::Res...
          method status (line 206) | unsigned int status() {
          method onHeadersComplete (line 213) | int onHeadersComplete() override {
          method addHeader (line 218) | void addHeader(Http::HeaderString&& key, Http::HeaderString&& va...
        function encodeHeader (line 232) | void encodeHeader(Buffer::Instance& buffer, absl::string_view key,...
        function encodeHeaders (line 239) | void encodeHeaders(Buffer::Instance& buffer, Http::RequestOrRespon...
        function encodeRequest (line 259) | void encodeRequest(Buffer::Instance& buffer, Http::RequestHeaderMa...
        function encodeResponse (line 273) | void encodeResponse(Buffer::Instance& buffer, Http::ResponseHeader...
        function maskData (line 308) | size_t maskData(uint8_t* buf, size_t n_bytes, uint8_t mask[4], siz...

FILE: cilium/websocket_codec.h
  function virtual (line 29) | virtual const ConfigSharedPtr& config() PURE;
  function hasData (line 59) | size_t hasData() { return encoded_.length() > 0; }
  function endStream (line 61) | bool endStream() { return end_stream_; }
  function drain (line 62) | void drain() { encoded_.drain(encoded_.length()); }
  function end_stream_ (line 65) | bool end_stream_{false};
  function hasData (line 75) | size_t hasData() { return decoded_.length() > 0; }
  function endStream (line 77) | bool endStream() { return end_stream_; }
  function drain (line 78) | void drain() { decoded_.drain(decoded_.length()); }
  function unmasking_ (line 85) | bool unmasking_{false};
  function resetPingTimer (line 92) | void resetPingTimer() {
  function ConfigSharedPtr (line 110) | const ConfigSharedPtr& config() { return parent_->config(); }
  function ping_interval_jitter_percent_ (line 123) | uint32_t ping_interval_jitter_percent_{15};

FILE: cilium/websocket_config.cc
  type Envoy (line 31) | namespace Envoy {
    type Cilium (line 32) | namespace Cilium {
      type WebSocket (line 33) | namespace WebSocket {

FILE: cilium/websocket_config.h
  function namespace (line 25) | namespace Envoy {

FILE: go/cilium/api/accesslog.pb.go
  constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type HttpProtocol (line 24) | type HttpProtocol
    method Enum (line 46) | func (x HttpProtocol) Enum() *HttpProtocol {
    method String (line 52) | func (x HttpProtocol) String() string {
    method Descriptor (line 56) | func (HttpProtocol) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 60) | func (HttpProtocol) Type() protoreflect.EnumType {
    method Number (line 64) | func (x HttpProtocol) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 69) | func (HttpProtocol) EnumDescriptor() ([]byte, []int) {
  constant HttpProtocol_HTTP10 (line 27) | HttpProtocol_HTTP10 HttpProtocol = 0
  constant HttpProtocol_HTTP11 (line 28) | HttpProtocol_HTTP11 HttpProtocol = 1
  constant HttpProtocol_HTTP2 (line 29) | HttpProtocol_HTTP2  HttpProtocol = 2
  type EntryType (line 73) | type EntryType
    method Enum (line 95) | func (x EntryType) Enum() *EntryType {
    method String (line 101) | func (x EntryType) String() string {
    method Descriptor (line 105) | func (EntryType) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 109) | func (EntryType) Type() protoreflect.EnumType {
    method Number (line 113) | func (x EntryType) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 118) | func (EntryType) EnumDescriptor() ([]byte, []int) {
  constant EntryType_Request (line 76) | EntryType_Request  EntryType = 0
  constant EntryType_Response (line 77) | EntryType_Response EntryType = 1
  constant EntryType_Denied (line 78) | EntryType_Denied   EntryType = 2
  type KeyValue (line 122) | type KeyValue struct
    method Reset (line 130) | func (x *KeyValue) Reset() {
    method String (line 137) | func (x *KeyValue) String() string {
    method ProtoMessage (line 141) | func (*KeyValue) ProtoMessage() {}
    method ProtoReflect (line 143) | func (x *KeyValue) ProtoReflect() protoreflect.Message {
    method Descriptor (line 156) | func (*KeyValue) Descriptor() ([]byte, []int) {
    method GetKey (line 160) | func (x *KeyValue) GetKey() string {
    method GetValue (line 167) | func (x *KeyValue) GetValue() string {
  type HttpLogEntry (line 174) | type HttpLogEntry struct
    method Reset (line 197) | func (x *HttpLogEntry) Reset() {
    method String (line 204) | func (x *HttpLogEntry) String() string {
    method ProtoMessage (line 208) | func (*HttpLogEntry) ProtoMessage() {}
    method ProtoReflect (line 210) | func (x *HttpLogEntry) ProtoReflect() protoreflect.Message {
    method Descriptor (line 223) | func (*HttpLogEntry) Descriptor() ([]byte, []int) {
    method GetHttpProtocol (line 227) | func (x *HttpLogEntry) GetHttpProtocol() HttpProtocol {
    method GetScheme (line 234) | func (x *HttpLogEntry) GetScheme() string {
    method GetHost (line 241) | func (x *HttpLogEntry) GetHost() string {
    method GetPath (line 248) | func (x *HttpLogEntry) GetPath() string {
    method GetMethod (line 255) | func (x *HttpLogEntry) GetMethod() string {
    method GetHeaders (line 262) | func (x *HttpLogEntry) GetHeaders() []*KeyValue {
    method GetStatus (line 269) | func (x *HttpLogEntry) GetStatus() uint32 {
    method GetMissingHeaders (line 276) | func (x *HttpLogEntry) GetMissingHeaders() []*KeyValue {
    method GetRejectedHeaders (line 283) | func (x *HttpLogEntry) GetRejectedHeaders() []*KeyValue {
  type KafkaLogEntry (line 290) | type KafkaLogEntry struct
    method Reset (line 311) | func (x *KafkaLogEntry) Reset() {
    method String (line 318) | func (x *KafkaLogEntry) String() string {
    method ProtoMessage (line 322) | func (*KafkaLogEntry) ProtoMessage() {}
    method ProtoReflect (line 324) | func (x *KafkaLogEntry) ProtoReflect() protoreflect.Message {
    method Descriptor (line 337) | func (*KafkaLogEntry) Descriptor() ([]byte, []int) {
    method GetCorrelationId (line 341) | func (x *KafkaLogEntry) GetCorrelationId() int32 {
    method GetErrorCode (line 348) | func (x *KafkaLogEntry) GetErrorCode() int32 {
    method GetApiVersion (line 355) | func (x *KafkaLogEntry) GetApiVersion() int32 {
    method GetApiKey (line 362) | func (x *KafkaLogEntry) GetApiKey() int32 {
    method GetTopics (line 369) | func (x *KafkaLogEntry) GetTopics() []string {
  type L7LogEntry (line 376) | type L7LogEntry struct
    method Reset (line 384) | func (x *L7LogEntry) Reset() {
    method String (line 391) | func (x *L7LogEntry) String() string {
    method ProtoMessage (line 395) | func (*L7LogEntry) ProtoMessage() {}
    method ProtoReflect (line 397) | func (x *L7LogEntry) ProtoReflect() protoreflect.Message {
    method Descriptor (line 410) | func (*L7LogEntry) Descriptor() ([]byte, []int) {
    method GetProto (line 414) | func (x *L7LogEntry) GetProto() string {
    method GetFields (line 421) | func (x *L7LogEntry) GetFields() map[string]string {
  type LogEntry (line 428) | type LogEntry struct
    method Reset (line 461) | func (x *LogEntry) Reset() {
    method String (line 468) | func (x *LogEntry) String() string {
    method ProtoMessage (line 472) | func (*LogEntry) ProtoMessage() {}
    method ProtoReflect (line 474) | func (x *LogEntry) ProtoReflect() protoreflect.Message {
    method Descriptor (line 487) | func (*LogEntry) Descriptor() ([]byte, []int) {
    method GetTimestamp (line 491) | func (x *LogEntry) GetTimestamp() uint64 {
    method GetIsIngress (line 498) | func (x *LogEntry) GetIsIngress() bool {
    method GetEntryType (line 505) | func (x *LogEntry) GetEntryType() EntryType {
    method GetPolicyName (line 512) | func (x *LogEntry) GetPolicyName() string {
    method GetProxyId (line 519) | func (x *LogEntry) GetProxyId() uint32 {
    method GetCiliumRuleRef (line 526) | func (x *LogEntry) GetCiliumRuleRef() string {
    method GetSourceSecurityId (line 533) | func (x *LogEntry) GetSourceSecurityId() uint32 {
    method GetDestinationSecurityId (line 540) | func (x *LogEntry) GetDestinationSecurityId() uint32 {
    method GetSourceAddress (line 547) | func (x *LogEntry) GetSourceAddress() string {
    method GetDestinationAddress (line 554) | func (x *LogEntry) GetDestinationAddress() string {
    method GetL7 (line 561) | func (x *LogEntry) GetL7() isLogEntry_L7 {
    method GetHttp (line 568) | func (x *LogEntry) GetHttp() *HttpLogEntry {
    method GetKafka (line 577) | func (x *LogEntry) GetKafka() *KafkaLogEntry {
    method GetGenericL7 (line 586) | func (x *LogEntry) GetGenericL7() *L7LogEntry {
  type isLogEntry_L7 (line 595) | type isLogEntry_L7 interface
  type LogEntry_Http (line 599) | type LogEntry_Http struct
    method isLogEntry_L7 (line 611) | func (*LogEntry_Http) isLogEntry_L7() {}
  type LogEntry_Kafka (line 603) | type LogEntry_Kafka struct
    method isLogEntry_L7 (line 613) | func (*LogEntry_Kafka) isLogEntry_L7() {}
  type LogEntry_GenericL7 (line 607) | type LogEntry_GenericL7 struct
    method isLogEntry_L7 (line 615) | func (*LogEntry_GenericL7) isLogEntry_L7() {}
  constant file_cilium_api_accesslog_proto_rawDesc (line 619) | file_cilium_api_accesslog_proto_rawDesc = "" +
  function file_cilium_api_accesslog_proto_rawDescGZIP (line 686) | func file_cilium_api_accesslog_proto_rawDescGZIP() []byte {
  function init (line 722) | func init() { file_cilium_api_accesslog_proto_init() }
  function file_cilium_api_accesslog_proto_init (line 723) | func file_cilium_api_accesslog_proto_init() {

FILE: go/cilium/api/accesslog.pb.validate.go
  method Validate (line 41) | func (m *KeyValue) Validate() error {
  method ValidateAll (line 49) | func (m *KeyValue) ValidateAll() error {
  method validate (line 53) | func (m *KeyValue) validate(all bool) error {
  type KeyValueMultiError (line 73) | type KeyValueMultiError
    method Error (line 76) | func (m KeyValueMultiError) Error() string {
    method AllErrors (line 85) | func (m KeyValueMultiError) AllErrors() []error { return m }
  type KeyValueValidationError (line 89) | type KeyValueValidationError struct
    method Field (line 97) | func (e KeyValueValidationError) Field() string { return e.field }
    method Reason (line 100) | func (e KeyValueValidationError) Reason() string { return e.reason }
    method Cause (line 103) | func (e KeyValueValidationError) Cause() error { return e.cause }
    method Key (line 106) | func (e KeyValueValidationError) Key() bool { return e.key }
    method ErrorName (line 109) | func (e KeyValueValidationError) ErrorName() string { return "KeyValue...
    method Error (line 112) | func (e KeyValueValidationError) Error() string {
  method Validate (line 144) | func (m *HttpLogEntry) Validate() error {
  method ValidateAll (line 152) | func (m *HttpLogEntry) ValidateAll() error {
  method validate (line 156) | func (m *HttpLogEntry) validate(all bool) error {
  type HttpLogEntryMultiError (line 286) | type HttpLogEntryMultiError
    method Error (line 289) | func (m HttpLogEntryMultiError) Error() string {
    method AllErrors (line 298) | func (m HttpLogEntryMultiError) AllErrors() []error { return m }
  type HttpLogEntryValidationError (line 302) | type HttpLogEntryValidationError struct
    method Field (line 310) | func (e HttpLogEntryValidationError) Field() string { return e.field }
    method Reason (line 313) | func (e HttpLogEntryValidationError) Reason() string { return e.reason }
    method Cause (line 316) | func (e HttpLogEntryValidationError) Cause() error { return e.cause }
    method Key (line 319) | func (e HttpLogEntryValidationError) Key() bool { return e.key }
    method ErrorName (line 322) | func (e HttpLogEntryValidationError) ErrorName() string { return "Http...
    method Error (line 325) | func (e HttpLogEntryValidationError) Error() string {
  method Validate (line 357) | func (m *KafkaLogEntry) Validate() error {
  method ValidateAll (line 365) | func (m *KafkaLogEntry) ValidateAll() error {
  method validate (line 369) | func (m *KafkaLogEntry) validate(all bool) error {
  type KafkaLogEntryMultiError (line 394) | type KafkaLogEntryMultiError
    method Error (line 397) | func (m KafkaLogEntryMultiError) Error() string {
    method AllErrors (line 406) | func (m KafkaLogEntryMultiError) AllErrors() []error { return m }
  type KafkaLogEntryValidationError (line 410) | type KafkaLogEntryValidationError struct
    method Field (line 418) | func (e KafkaLogEntryValidationError) Field() string { return e.field }
    method Reason (line 421) | func (e KafkaLogEntryValidationError) Reason() string { return e.reason }
    method Cause (line 424) | func (e KafkaLogEntryValidationError) Cause() error { return e.cause }
    method Key (line 427) | func (e KafkaLogEntryValidationError) Key() bool { return e.key }
    method ErrorName (line 430) | func (e KafkaLogEntryValidationError) ErrorName() string { return "Kaf...
    method Error (line 433) | func (e KafkaLogEntryValidationError) Error() string {
  method Validate (line 465) | func (m *L7LogEntry) Validate() error {
  method ValidateAll (line 473) | func (m *L7LogEntry) ValidateAll() error {
  method validate (line 477) | func (m *L7LogEntry) validate(all bool) error {
  type L7LogEntryMultiError (line 497) | type L7LogEntryMultiError
    method Error (line 500) | func (m L7LogEntryMultiError) Error() string {
    method AllErrors (line 509) | func (m L7LogEntryMultiError) AllErrors() []error { return m }
  type L7LogEntryValidationError (line 513) | type L7LogEntryValidationError struct
    method Field (line 521) | func (e L7LogEntryValidationError) Field() string { return e.field }
    method Reason (line 524) | func (e L7LogEntryValidationError) Reason() string { return e.reason }
    method Cause (line 527) | func (e L7LogEntryValidationError) Cause() error { return e.cause }
    method Key (line 530) | func (e L7LogEntryValidationError) Key() bool { return e.key }
    method ErrorName (line 533) | func (e L7LogEntryValidationError) ErrorName() string { return "L7LogE...
    method Error (line 536) | func (e L7LogEntryValidationError) Error() string {
  method Validate (line 568) | func (m *LogEntry) Validate() error {
  method ValidateAll (line 576) | func (m *LogEntry) ValidateAll() error {
  method validate (line 580) | func (m *LogEntry) validate(all bool) error {
  type LogEntryMultiError (line 744) | type LogEntryMultiError
    method Error (line 747) | func (m LogEntryMultiError) Error() string {
    method AllErrors (line 756) | func (m LogEntryMultiError) AllErrors() []error { return m }
  type LogEntryValidationError (line 760) | type LogEntryValidationError struct
    method Field (line 768) | func (e LogEntryValidationError) Field() string { return e.field }
    method Reason (line 771) | func (e LogEntryValidationError) Reason() string { return e.reason }
    method Cause (line 774) | func (e LogEntryValidationError) Cause() error { return e.cause }
    method Key (line 777) | func (e LogEntryValidationError) Key() bool { return e.key }
    method ErrorName (line 780) | func (e LogEntryValidationError) ErrorName() string { return "LogEntry...
    method Error (line 783) | func (e LogEntryValidationError) Error() string {

FILE: go/cilium/api/bpf_metadata.pb.go
  constant _ (line 22) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 24) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type BpfMetadata (line 27) | type BpfMetadata struct
    method Reset (line 96) | func (x *BpfMetadata) Reset() {
    method String (line 103) | func (x *BpfMetadata) String() string {
    method ProtoMessage (line 107) | func (*BpfMetadata) ProtoMessage() {}
    method ProtoReflect (line 109) | func (x *BpfMetadata) ProtoReflect() protoreflect.Message {
    method Descriptor (line 122) | func (*BpfMetadata) Descriptor() ([]byte, []int) {
    method GetBpfRoot (line 126) | func (x *BpfMetadata) GetBpfRoot() string {
    method GetIsIngress (line 133) | func (x *BpfMetadata) GetIsIngress() bool {
    method GetUseOriginalSourceAddress (line 140) | func (x *BpfMetadata) GetUseOriginalSourceAddress() bool {
    method GetIsL7Lb (line 147) | func (x *BpfMetadata) GetIsL7Lb() bool {
    method GetIpv4SourceAddress (line 154) | func (x *BpfMetadata) GetIpv4SourceAddress() string {
    method GetIpv6SourceAddress (line 161) | func (x *BpfMetadata) GetIpv6SourceAddress() string {
    method GetEnforcePolicyOnL7Lb (line 168) | func (x *BpfMetadata) GetEnforcePolicyOnL7Lb() bool {
    method GetProxyId (line 175) | func (x *BpfMetadata) GetProxyId() uint32 {
    method GetPolicyUpdateWarningLimit (line 182) | func (x *BpfMetadata) GetPolicyUpdateWarningLimit() *durationpb.Durati...
    method GetL7LbPolicyName (line 189) | func (x *BpfMetadata) GetL7LbPolicyName() string {
    method GetOriginalSourceSoLingerTime (line 196) | func (x *BpfMetadata) GetOriginalSourceSoLingerTime() uint32 {
    method GetIpcacheName (line 203) | func (x *BpfMetadata) GetIpcacheName() string {
    method GetUseNphds (line 210) | func (x *BpfMetadata) GetUseNphds() bool {
    method GetCacheEntryTtl (line 217) | func (x *BpfMetadata) GetCacheEntryTtl() *durationpb.Duration {
    method GetCacheGcInterval (line 224) | func (x *BpfMetadata) GetCacheGcInterval() *durationpb.Duration {
    method GetNpdsConfig (line 231) | func (x *BpfMetadata) GetNpdsConfig() *v3.ConfigSource {
  constant file_cilium_api_bpf_metadata_proto_rawDesc (line 240) | file_cilium_api_bpf_metadata_proto_rawDesc = "" +
  function file_cilium_api_bpf_metadata_proto_rawDescGZIP (line 270) | func file_cilium_api_bpf_metadata_proto_rawDescGZIP() []byte {
  function init (line 295) | func init() { file_cilium_api_bpf_metadata_proto_init() }
  function file_cilium_api_bpf_metadata_proto_init (line 296) | func file_cilium_api_bpf_metadata_proto_init() {

FILE: go/cilium/api/bpf_metadata.pb.validate.go
  method Validate (line 41) | func (m *BpfMetadata) Validate() error {
  method ValidateAll (line 49) | func (m *BpfMetadata) ValidateAll() error {
  method validate (line 53) | func (m *BpfMetadata) validate(all bool) error {
  type BpfMetadataMultiError (line 220) | type BpfMetadataMultiError
    method Error (line 223) | func (m BpfMetadataMultiError) Error() string {
    method AllErrors (line 232) | func (m BpfMetadataMultiError) AllErrors() []error { return m }
  type BpfMetadataValidationError (line 236) | type BpfMetadataValidationError struct
    method Field (line 244) | func (e BpfMetadataValidationError) Field() string { return e.field }
    method Reason (line 247) | func (e BpfMetadataValidationError) Reason() string { return e.reason }
    method Cause (line 250) | func (e BpfMetadataValidationError) Cause() error { return e.cause }
    method Key (line 253) | func (e BpfMetadataValidationError) Key() bool { return e.key }
    method ErrorName (line 256) | func (e BpfMetadataValidationError) ErrorName() string { return "BpfMe...
    method Error (line 259) | func (e BpfMetadataValidationError) Error() string {

FILE: go/cilium/api/health_check_sink.pb.go
  constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type HealthCheckEventPipeSink (line 27) | type HealthCheckEventPipeSink struct
    method Reset (line 35) | func (x *HealthCheckEventPipeSink) Reset() {
    method String (line 42) | func (x *HealthCheckEventPipeSink) String() string {
    method ProtoMessage (line 46) | func (*HealthCheckEventPipeSink) ProtoMessage() {}
    method ProtoReflect (line 48) | func (x *HealthCheckEventPipeSink) ProtoReflect() protoreflect.Message {
    method Descriptor (line 61) | func (*HealthCheckEventPipeSink) Descriptor() ([]byte, []int) {
    method GetPath (line 65) | func (x *HealthCheckEventPipeSink) GetPath() string {
  constant file_cilium_api_health_check_sink_proto_rawDesc (line 74) | file_cilium_api_health_check_sink_proto_rawDesc = "" +
  function file_cilium_api_health_check_sink_proto_rawDescGZIP (line 85) | func file_cilium_api_health_check_sink_proto_rawDescGZIP() []byte {
  function init (line 104) | func init() { file_cilium_api_health_check_sink_proto_init() }
  function file_cilium_api_health_check_sink_proto_init (line 105) | func file_cilium_api_health_check_sink_proto_init() {

FILE: go/cilium/api/health_check_sink.pb.validate.go
  method Validate (line 41) | func (m *HealthCheckEventPipeSink) Validate() error {
  method ValidateAll (line 49) | func (m *HealthCheckEventPipeSink) ValidateAll() error {
  method validate (line 53) | func (m *HealthCheckEventPipeSink) validate(all bool) error {
  type HealthCheckEventPipeSinkMultiError (line 81) | type HealthCheckEventPipeSinkMultiError
    method Error (line 84) | func (m HealthCheckEventPipeSinkMultiError) Error() string {
    method AllErrors (line 93) | func (m HealthCheckEventPipeSinkMultiError) AllErrors() []error { retu...
  type HealthCheckEventPipeSinkValidationError (line 97) | type HealthCheckEventPipeSinkValidationError struct
    method Field (line 105) | func (e HealthCheckEventPipeSinkValidationError) Field() string { retu...
    method Reason (line 108) | func (e HealthCheckEventPipeSinkValidationError) Reason() string { ret...
    method Cause (line 111) | func (e HealthCheckEventPipeSinkValidationError) Cause() error { retur...
    method Key (line 114) | func (e HealthCheckEventPipeSinkValidationError) Key() bool { return e...
    method ErrorName (line 117) | func (e HealthCheckEventPipeSinkValidationError) ErrorName() string {
    method Error (line 122) | func (e HealthCheckEventPipeSinkValidationError) Error() string {

FILE: go/cilium/api/l7policy.pb.go
  constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type L7Policy (line 24) | type L7Policy struct
    method Reset (line 35) | func (x *L7Policy) Reset() {
    method String (line 42) | func (x *L7Policy) String() string {
    method ProtoMessage (line 46) | func (*L7Policy) ProtoMessage() {}
    method ProtoReflect (line 48) | func (x *L7Policy) ProtoReflect() protoreflect.Message {
    method Descriptor (line 61) | func (*L7Policy) Descriptor() ([]byte, []int) {
    method GetAccessLogPath (line 65) | func (x *L7Policy) GetAccessLogPath() string {
    method GetDenied_403Body (line 72) | func (x *L7Policy) GetDenied_403Body() string {
  constant file_cilium_api_l7policy_proto_rawDesc (line 81) | file_cilium_api_l7policy_proto_rawDesc = "" +
  function file_cilium_api_l7policy_proto_rawDescGZIP (line 93) | func file_cilium_api_l7policy_proto_rawDescGZIP() []byte {
  function init (line 112) | func init() { file_cilium_api_l7policy_proto_init() }
  function file_cilium_api_l7policy_proto_init (line 113) | func file_cilium_api_l7policy_proto_init() {

FILE: go/cilium/api/l7policy.pb.validate.go
  method Validate (line 41) | func (m *L7Policy) Validate() error {
  method ValidateAll (line 49) | func (m *L7Policy) ValidateAll() error {
  method validate (line 53) | func (m *L7Policy) validate(all bool) error {
  type L7PolicyMultiError (line 73) | type L7PolicyMultiError
    method Error (line 76) | func (m L7PolicyMultiError) Error() string {
    method AllErrors (line 85) | func (m L7PolicyMultiError) AllErrors() []error { return m }
  type L7PolicyValidationError (line 89) | type L7PolicyValidationError struct
    method Field (line 97) | func (e L7PolicyValidationError) Field() string { return e.field }
    method Reason (line 100) | func (e L7PolicyValidationError) Reason() string { return e.reason }
    method Cause (line 103) | func (e L7PolicyValidationError) Cause() error { return e.cause }
    method Key (line 106) | func (e L7PolicyValidationError) Key() bool { return e.key }
    method ErrorName (line 109) | func (e L7PolicyValidationError) ErrorName() string { return "L7Policy...
    method Error (line 112) | func (e L7PolicyValidationError) Error() string {

FILE: go/cilium/api/network_filter.pb.go
  constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type NetworkFilter (line 24) | type NetworkFilter struct
    method Reset (line 36) | func (x *NetworkFilter) Reset() {
    method String (line 43) | func (x *NetworkFilter) String() string {
    method ProtoMessage (line 47) | func (*NetworkFilter) ProtoMessage() {}
    method ProtoReflect (line 49) | func (x *NetworkFilter) ProtoReflect() protoreflect.Message {
    method Descriptor (line 62) | func (*NetworkFilter) Descriptor() ([]byte, []int) {
    method GetProxylib (line 66) | func (x *NetworkFilter) GetProxylib() string {
    method GetProxylibParams (line 73) | func (x *NetworkFilter) GetProxylibParams() map[string]string {
    method GetAccessLogPath (line 80) | func (x *NetworkFilter) GetAccessLogPath() string {
  constant file_cilium_api_network_filter_proto_rawDesc (line 89) | file_cilium_api_network_filter_proto_rawDesc = "" +
  function file_cilium_api_network_filter_proto_rawDescGZIP (line 105) | func file_cilium_api_network_filter_proto_rawDescGZIP() []byte {
  function init (line 126) | func init() { file_cilium_api_network_filter_proto_init() }
  function file_cilium_api_network_filter_proto_init (line 127) | func file_cilium_api_network_filter_proto_init() {

FILE: go/cilium/api/network_filter.pb.validate.go
  method Validate (line 41) | func (m *NetworkFilter) Validate() error {
  method ValidateAll (line 49) | func (m *NetworkFilter) ValidateAll() error {
  method validate (line 53) | func (m *NetworkFilter) validate(all bool) error {
  type NetworkFilterMultiError (line 76) | type NetworkFilterMultiError
    method Error (line 79) | func (m NetworkFilterMultiError) Error() string {
    method AllErrors (line 88) | func (m NetworkFilterMultiError) AllErrors() []error { return m }
  type NetworkFilterValidationError (line 92) | type NetworkFilterValidationError struct
    method Field (line 100) | func (e NetworkFilterValidationError) Field() string { return e.field }
    method Reason (line 103) | func (e NetworkFilterValidationError) Reason() string { return e.reason }
    method Cause (line 106) | func (e NetworkFilterValidationError) Cause() error { return e.cause }
    method Key (line 109) | func (e NetworkFilterValidationError) Key() bool { return e.key }
    method ErrorName (line 112) | func (e NetworkFilterValidationError) ErrorName() string { return "Net...
    method Error (line 115) | func (e NetworkFilterValidationError) Error() string {

FILE: go/cilium/api/npds.pb.go
  constant _ (line 26) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 28) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type HeaderMatch_MatchAction (line 32) | type HeaderMatch_MatchAction
    method Enum (line 54) | func (x HeaderMatch_MatchAction) Enum() *HeaderMatch_MatchAction {
    method String (line 60) | func (x HeaderMatch_MatchAction) String() string {
    method Descriptor (line 64) | func (HeaderMatch_MatchAction) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 68) | func (HeaderMatch_MatchAction) Type() protoreflect.EnumType {
    method Number (line 72) | func (x HeaderMatch_MatchAction) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 77) | func (HeaderMatch_MatchAction) EnumDescriptor() ([]byte, []int) {
  constant HeaderMatch_CONTINUE_ON_MATCH (line 35) | HeaderMatch_CONTINUE_ON_MATCH HeaderMatch_MatchAction = 0
  constant HeaderMatch_FAIL_ON_MATCH (line 36) | HeaderMatch_FAIL_ON_MATCH     HeaderMatch_MatchAction = 1
  constant HeaderMatch_DELETE_ON_MATCH (line 37) | HeaderMatch_DELETE_ON_MATCH   HeaderMatch_MatchAction = 2
  type HeaderMatch_MismatchAction (line 81) | type HeaderMatch_MismatchAction
    method Enum (line 109) | func (x HeaderMatch_MismatchAction) Enum() *HeaderMatch_MismatchAction {
    method String (line 115) | func (x HeaderMatch_MismatchAction) String() string {
    method Descriptor (line 119) | func (HeaderMatch_MismatchAction) Descriptor() protoreflect.EnumDescri...
    method Type (line 123) | func (HeaderMatch_MismatchAction) Type() protoreflect.EnumType {
    method Number (line 127) | func (x HeaderMatch_MismatchAction) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 132) | func (HeaderMatch_MismatchAction) EnumDescriptor() ([]byte, []int) {
  constant HeaderMatch_FAIL_ON_MISMATCH (line 84) | HeaderMatch_FAIL_ON_MISMATCH     HeaderMatch_MismatchAction = 0
  constant HeaderMatch_CONTINUE_ON_MISMATCH (line 85) | HeaderMatch_CONTINUE_ON_MISMATCH HeaderMatch_MismatchAction = 1
  constant HeaderMatch_ADD_ON_MISMATCH (line 86) | HeaderMatch_ADD_ON_MISMATCH      HeaderMatch_MismatchAction = 2
  constant HeaderMatch_DELETE_ON_MISMATCH (line 87) | HeaderMatch_DELETE_ON_MISMATCH   HeaderMatch_MismatchAction = 3
  constant HeaderMatch_REPLACE_ON_MISMATCH (line 88) | HeaderMatch_REPLACE_ON_MISMATCH  HeaderMatch_MismatchAction = 4
  type NetworkPolicy (line 138) | type NetworkPolicy struct
    method Reset (line 162) | func (x *NetworkPolicy) Reset() {
    method String (line 169) | func (x *NetworkPolicy) String() string {
    method ProtoMessage (line 173) | func (*NetworkPolicy) ProtoMessage() {}
    method ProtoReflect (line 175) | func (x *NetworkPolicy) ProtoReflect() protoreflect.Message {
    method Descriptor (line 188) | func (*NetworkPolicy) Descriptor() ([]byte, []int) {
    method GetEndpointIps (line 192) | func (x *NetworkPolicy) GetEndpointIps() []string {
    method GetEndpointId (line 199) | func (x *NetworkPolicy) GetEndpointId() uint64 {
    method GetIngressPerPortPolicies (line 206) | func (x *NetworkPolicy) GetIngressPerPortPolicies() []*PortNetworkPoli...
    method GetEgressPerPortPolicies (line 213) | func (x *NetworkPolicy) GetEgressPerPortPolicies() []*PortNetworkPolicy {
  type PortNetworkPolicy (line 223) | type PortNetworkPolicy struct
    method Reset (line 241) | func (x *PortNetworkPolicy) Reset() {
    method String (line 248) | func (x *PortNetworkPolicy) String() string {
    method ProtoMessage (line 252) | func (*PortNetworkPolicy) ProtoMessage() {}
    method ProtoReflect (line 254) | func (x *PortNetworkPolicy) ProtoReflect() protoreflect.Message {
    method Descriptor (line 267) | func (*PortNetworkPolicy) Descriptor() ([]byte, []int) {
    method GetPort (line 271) | func (x *PortNetworkPolicy) GetPort() uint32 {
    method GetEndPort (line 278) | func (x *PortNetworkPolicy) GetEndPort() uint32 {
    method GetProtocol (line 285) | func (x *PortNetworkPolicy) GetProtocol() v3.SocketAddress_Protocol {
    method GetRules (line 292) | func (x *PortNetworkPolicy) GetRules() []*PortNetworkPolicyRule {
  type TLSContext (line 299) | type TLSContext struct
    method Reset (line 329) | func (x *TLSContext) Reset() {
    method String (line 336) | func (x *TLSContext) String() string {
    method ProtoMessage (line 340) | func (*TLSContext) ProtoMessage() {}
    method ProtoReflect (line 342) | func (x *TLSContext) ProtoReflect() protoreflect.Message {
    method Descriptor (line 355) | func (*TLSContext) Descriptor() ([]byte, []int) {
    method GetTrustedCa (line 359) | func (x *TLSContext) GetTrustedCa() string {
    method GetCertificateChain (line 366) | func (x *TLSContext) GetCertificateChain() string {
    method GetPrivateKey (line 373) | func (x *TLSContext) GetPrivateKey() string {
    method GetServerNames (line 380) | func (x *TLSContext) GetServerNames() []string {
    method GetValidationContextSdsSecret (line 387) | func (x *TLSContext) GetValidationContextSdsSecret() string {
    method GetTlsSdsSecret (line 394) | func (x *TLSContext) GetTlsSdsSecret() string {
    method GetAlpnProtocols (line 401) | func (x *TLSContext) GetAlpnProtocols() []string {
  type PortNetworkPolicyRule (line 411) | type PortNetworkPolicyRule struct
    method Reset (line 474) | func (x *PortNetworkPolicyRule) Reset() {
    method String (line 481) | func (x *PortNetworkPolicyRule) String() string {
    method ProtoMessage (line 485) | func (*PortNetworkPolicyRule) ProtoMessage() {}
    method ProtoReflect (line 487) | func (x *PortNetworkPolicyRule) ProtoReflect() protoreflect.Message {
    method Descriptor (line 500) | func (*PortNetworkPolicyRule) Descriptor() ([]byte, []int) {
    method GetPrecedence (line 504) | func (x *PortNetworkPolicyRule) GetPrecedence() uint32 {
    method GetVerdict (line 511) | func (x *PortNetworkPolicyRule) GetVerdict() isPortNetworkPolicyRule_V...
    method GetPassPrecedence (line 518) | func (x *PortNetworkPolicyRule) GetPassPrecedence() uint32 {
    method GetDeny (line 527) | func (x *PortNetworkPolicyRule) GetDeny() bool {
    method GetProxyId (line 536) | func (x *PortNetworkPolicyRule) GetProxyId() uint32 {
    method GetName (line 543) | func (x *PortNetworkPolicyRule) GetName() string {
    method GetRemotePolicies (line 550) | func (x *PortNetworkPolicyRule) GetRemotePolicies() []uint32 {
    method GetDownstreamTlsContext (line 557) | func (x *PortNetworkPolicyRule) GetDownstreamTlsContext() *TLSContext {
    method GetUpstreamTlsContext (line 564) | func (x *PortNetworkPolicyRule) GetUpstreamTlsContext() *TLSContext {
    method GetServerNames (line 571) | func (x *PortNetworkPolicyRule) GetServerNames() []string {
    method GetL7Proto (line 578) | func (x *PortNetworkPolicyRule) GetL7Proto() string {
    method GetL7 (line 585) | func (x *PortNetworkPolicyRule) GetL7() isPortNetworkPolicyRule_L7 {
    method GetHttpRules (line 592) | func (x *PortNetworkPolicyRule) GetHttpRules() *HttpNetworkPolicyRules {
    method GetKafkaRules (line 601) | func (x *PortNetworkPolicyRule) GetKafkaRules() *KafkaNetworkPolicyRul...
    method GetL7Rules (line 610) | func (x *PortNetworkPolicyRule) GetL7Rules() *L7NetworkPolicyRules {
  type isPortNetworkPolicyRule_Verdict (line 619) | type isPortNetworkPolicyRule_Verdict interface
  type PortNetworkPolicyRule_PassPrecedence (line 623) | type PortNetworkPolicyRule_PassPrecedence struct
    method isPortNetworkPolicyRule_Verdict (line 634) | func (*PortNetworkPolicyRule_PassPrecedence) isPortNetworkPolicyRule_V...
  type PortNetworkPolicyRule_Deny (line 629) | type PortNetworkPolicyRule_Deny struct
    method isPortNetworkPolicyRule_Verdict (line 636) | func (*PortNetworkPolicyRule_Deny) isPortNetworkPolicyRule_Verdict() {}
  type isPortNetworkPolicyRule_L7 (line 638) | type isPortNetworkPolicyRule_L7 interface
  type PortNetworkPolicyRule_HttpRules (line 642) | type PortNetworkPolicyRule_HttpRules struct
    method isPortNetworkPolicyRule_L7 (line 663) | func (*PortNetworkPolicyRule_HttpRules) isPortNetworkPolicyRule_L7() {}
  type PortNetworkPolicyRule_KafkaRules (line 649) | type PortNetworkPolicyRule_KafkaRules struct
    method isPortNetworkPolicyRule_L7 (line 665) | func (*PortNetworkPolicyRule_KafkaRules) isPortNetworkPolicyRule_L7() {}
  type PortNetworkPolicyRule_L7Rules (line 656) | type PortNetworkPolicyRule_L7Rules struct
    method isPortNetworkPolicyRule_L7 (line 667) | func (*PortNetworkPolicyRule_L7Rules) isPortNetworkPolicyRule_L7() {}
  type HttpNetworkPolicyRules (line 670) | type HttpNetworkPolicyRules struct
    method Reset (line 680) | func (x *HttpNetworkPolicyRules) Reset() {
    method String (line 687) | func (x *HttpNetworkPolicyRules) String() string {
    method ProtoMessage (line 691) | func (*HttpNetworkPolicyRules) ProtoMessage() {}
    method ProtoReflect (line 693) | func (x *HttpNetworkPolicyRules) ProtoReflect() protoreflect.Message {
    method Descriptor (line 706) | func (*HttpNetworkPolicyRules) Descriptor() ([]byte, []int) {
    method GetHttpRules (line 710) | func (x *HttpNetworkPolicyRules) GetHttpRules() []*HttpNetworkPolicyRu...
  type HeaderMatch (line 717) | type HeaderMatch struct
    method Reset (line 730) | func (x *HeaderMatch) Reset() {
    method String (line 737) | func (x *HeaderMatch) String() string {
    method ProtoMessage (line 741) | func (*HeaderMatch) ProtoMessage() {}
    method ProtoReflect (line 743) | func (x *HeaderMatch) ProtoReflect() protoreflect.Message {
    method Descriptor (line 756) | func (*HeaderMatch) Descriptor() ([]byte, []int) {
    method GetName (line 760) | func (x *HeaderMatch) GetName() string {
    method GetValue (line 767) | func (x *HeaderMatch) GetValue() string {
    method GetMatchAction (line 774) | func (x *HeaderMatch) GetMatchAction() HeaderMatch_MatchAction {
    method GetMismatchAction (line 781) | func (x *HeaderMatch) GetMismatchAction() HeaderMatch_MismatchAction {
    method GetValueSdsSecret (line 788) | func (x *HeaderMatch) GetValueSdsSecret() string {
  type HttpNetworkPolicyRule (line 798) | type HttpNetworkPolicyRule struct
    method Reset (line 823) | func (x *HttpNetworkPolicyRule) Reset() {
    method String (line 830) | func (x *HttpNetworkPolicyRule) String() string {
    method ProtoMessage (line 834) | func (*HttpNetworkPolicyRule) ProtoMessage() {}
    method ProtoReflect (line 836) | func (x *HttpNetworkPolicyRule) ProtoReflect() protoreflect.Message {
    method Descriptor (line 849) | func (*HttpNetworkPolicyRule) Descriptor() ([]byte, []int) {
    method GetHeaders (line 853) | func (x *HttpNetworkPolicyRule) GetHeaders() []*v31.HeaderMatcher {
    method GetHeaderMatches (line 860) | func (x *HttpNetworkPolicyRule) GetHeaderMatches() []*HeaderMatch {
  type KafkaNetworkPolicyRules (line 868) | type KafkaNetworkPolicyRules struct
    method Reset (line 878) | func (x *KafkaNetworkPolicyRules) Reset() {
    method String (line 885) | func (x *KafkaNetworkPolicyRules) String() string {
    method ProtoMessage (line 889) | func (*KafkaNetworkPolicyRules) ProtoMessage() {}
    method ProtoReflect (line 891) | func (x *KafkaNetworkPolicyRules) ProtoReflect() protoreflect.Message {
    method Descriptor (line 904) | func (*KafkaNetworkPolicyRules) Descriptor() ([]byte, []int) {
    method GetKafkaRules (line 908) | func (x *KafkaNetworkPolicyRules) GetKafkaRules() []*KafkaNetworkPolic...
  type KafkaNetworkPolicyRule (line 918) | type KafkaNetworkPolicyRule struct
    method Reset (line 942) | func (x *KafkaNetworkPolicyRule) Reset() {
    method String (line 949) | func (x *KafkaNetworkPolicyRule) String() string {
    method ProtoMessage (line 953) | func (*KafkaNetworkPolicyRule) ProtoMessage() {}
    method ProtoReflect (line 955) | func (x *KafkaNetworkPolicyRule) ProtoReflect() protoreflect.Message {
    method Descriptor (line 968) | func (*KafkaNetworkPolicyRule) Descriptor() ([]byte, []int) {
    method GetApiVersion (line 972) | func (x *KafkaNetworkPolicyRule) GetApiVersion() int32 {
    method GetApiKeys (line 979) | func (x *KafkaNetworkPolicyRule) GetApiKeys() []int32 {
    method GetClientId (line 986) | func (x *KafkaNetworkPolicyRule) GetClientId() string {
    method GetTopic (line 993) | func (x *KafkaNetworkPolicyRule) GetTopic() string {
  type L7NetworkPolicyRules (line 1001) | type L7NetworkPolicyRules struct
    method Reset (line 1018) | func (x *L7NetworkPolicyRules) Reset() {
    method String (line 1025) | func (x *L7NetworkPolicyRules) String() string {
    method ProtoMessage (line 1029) | func (*L7NetworkPolicyRules) ProtoMessage() {}
    method ProtoReflect (line 1031) | func (x *L7NetworkPolicyRules) ProtoReflect() protoreflect.Message {
    method Descriptor (line 1044) | func (*L7NetworkPolicyRules) Descriptor() ([]byte, []int) {
    method GetL7AllowRules (line 1048) | func (x *L7NetworkPolicyRules) GetL7AllowRules() []*L7NetworkPolicyRule {
    method GetL7DenyRules (line 1055) | func (x *L7NetworkPolicyRules) GetL7DenyRules() []*L7NetworkPolicyRule {
  type L7NetworkPolicyRule (line 1065) | type L7NetworkPolicyRule struct
    method Reset (line 1081) | func (x *L7NetworkPolicyRule) Reset() {
    method String (line 1088) | func (x *L7NetworkPolicyRule) String() string {
    method ProtoMessage (line 1092) | func (*L7NetworkPolicyRule) ProtoMessage() {}
    method ProtoReflect (line 1094) | func (x *L7NetworkPolicyRule) ProtoReflect() protoreflect.Message {
    method Descriptor (line 1107) | func (*L7NetworkPolicyRule) Descriptor() ([]byte, []int) {
    method GetName (line 1111) | func (x *L7NetworkPolicyRule) GetName() string {
    method GetRule (line 1118) | func (x *L7NetworkPolicyRule) GetRule() map[string]string {
    method GetMetadataRule (line 1125) | func (x *L7NetworkPolicyRule) GetMetadataRule() []*v32.MetadataMatcher {
  type NetworkPoliciesConfigDump (line 1133) | type NetworkPoliciesConfigDump struct
    method Reset (line 1141) | func (x *NetworkPoliciesConfigDump) Reset() {
    method String (line 1148) | func (x *NetworkPoliciesConfigDump) String() string {
    method ProtoMessage (line 1152) | func (*NetworkPoliciesConfigDump) ProtoMessage() {}
    method ProtoReflect (line 1154) | func (x *NetworkPoliciesConfigDump) ProtoReflect() protoreflect.Message {
    method Descriptor (line 1167) | func (*NetworkPoliciesConfigDump) Descriptor() ([]byte, []int) {
    method GetNetworkpolicies (line 1171) | func (x *NetworkPoliciesConfigDump) GetNetworkpolicies() []*NetworkPol...
  constant file_cilium_api_npds_proto_rawDesc (line 1180) | file_cilium_api_npds_proto_rawDesc = "" +
  function file_cilium_api_npds_proto_rawDescGZIP (line 1280) | func file_cilium_api_npds_proto_rawDescGZIP() []byte {
  function init (line 1343) | func init() { file_cilium_api_npds_proto_init() }
  function file_cilium_api_npds_proto_init (line 1344) | func file_cilium_api_npds_proto_init() {

FILE: go/cilium/api/npds.pb.validate.go
  method Validate (line 45) | func (m *NetworkPolicy) Validate() error {
  method ValidateAll (line 53) | func (m *NetworkPolicy) ValidateAll() error {
  method validate (line 57) | func (m *NetworkPolicy) validate(all bool) error {
  type NetworkPolicyMultiError (line 171) | type NetworkPolicyMultiError
    method Error (line 174) | func (m NetworkPolicyMultiError) Error() string {
    method AllErrors (line 183) | func (m NetworkPolicyMultiError) AllErrors() []error { return m }
  type NetworkPolicyValidationError (line 187) | type NetworkPolicyValidationError struct
    method Field (line 195) | func (e NetworkPolicyValidationError) Field() string { return e.field }
    method Reason (line 198) | func (e NetworkPolicyValidationError) Reason() string { return e.reason }
    method Cause (line 201) | func (e NetworkPolicyValidationError) Cause() error { return e.cause }
    method Key (line 204) | func (e NetworkPolicyValidationError) Key() bool { return e.key }
    method ErrorName (line 207) | func (e NetworkPolicyValidationError) ErrorName() string { return "Net...
    method Error (line 210) | func (e NetworkPolicyValidationError) Error() string {
  method Validate (line 242) | func (m *PortNetworkPolicy) Validate() error {
  method ValidateAll (line 250) | func (m *PortNetworkPolicy) ValidateAll() error {
  method validate (line 254) | func (m *PortNetworkPolicy) validate(all bool) error {
  type PortNetworkPolicyMultiError (line 329) | type PortNetworkPolicyMultiError
    method Error (line 332) | func (m PortNetworkPolicyMultiError) Error() string {
    method AllErrors (line 341) | func (m PortNetworkPolicyMultiError) AllErrors() []error { return m }
  type PortNetworkPolicyValidationError (line 345) | type PortNetworkPolicyValidationError struct
    method Field (line 353) | func (e PortNetworkPolicyValidationError) Field() string { return e.fi...
    method Reason (line 356) | func (e PortNetworkPolicyValidationError) Reason() string { return e.r...
    method Cause (line 359) | func (e PortNetworkPolicyValidationError) Cause() error { return e.cau...
    method Key (line 362) | func (e PortNetworkPolicyValidationError) Key() bool { return e.key }
    method ErrorName (line 365) | func (e PortNetworkPolicyValidationError) ErrorName() string {
    method Error (line 370) | func (e PortNetworkPolicyValidationError) Error() string {
  method Validate (line 402) | func (m *TLSContext) Validate() error {
  method ValidateAll (line 410) | func (m *TLSContext) ValidateAll() error {
  method validate (line 414) | func (m *TLSContext) validate(all bool) error {
  type TLSContextMultiError (line 440) | type TLSContextMultiError
    method Error (line 443) | func (m TLSContextMultiError) Error() string {
    method AllErrors (line 452) | func (m TLSContextMultiError) AllErrors() []error { return m }
  type TLSContextValidationError (line 456) | type TLSContextValidationError struct
    method Field (line 464) | func (e TLSContextValidationError) Field() string { return e.field }
    method Reason (line 467) | func (e TLSContextValidationError) Reason() string { return e.reason }
    method Cause (line 470) | func (e TLSContextValidationError) Cause() error { return e.cause }
    method Key (line 473) | func (e TLSContextValidationError) Key() bool { return e.key }
    method ErrorName (line 476) | func (e TLSContextValidationError) ErrorName() string { return "TLSCon...
    method Error (line 479) | func (e TLSContextValidationError) Error() string {
  method Validate (line 511) | func (m *PortNetworkPolicyRule) Validate() error {
  method ValidateAll (line 519) | func (m *PortNetworkPolicyRule) ValidateAll() error {
  method validate (line 523) | func (m *PortNetworkPolicyRule) validate(all bool) error {
  type PortNetworkPolicyRuleMultiError (line 787) | type PortNetworkPolicyRuleMultiError
    method Error (line 790) | func (m PortNetworkPolicyRuleMultiError) Error() string {
    method AllErrors (line 799) | func (m PortNetworkPolicyRuleMultiError) AllErrors() []error { return m }
  type PortNetworkPolicyRuleValidationError (line 803) | type PortNetworkPolicyRuleValidationError struct
    method Field (line 811) | func (e PortNetworkPolicyRuleValidationError) Field() string { return ...
    method Reason (line 814) | func (e PortNetworkPolicyRuleValidationError) Reason() string { return...
    method Cause (line 817) | func (e PortNetworkPolicyRuleValidationError) Cause() error { return e...
    method Key (line 820) | func (e PortNetworkPolicyRuleValidationError) Key() bool { return e.key }
    method ErrorName (line 823) | func (e PortNetworkPolicyRuleValidationError) ErrorName() string {
    method Error (line 828) | func (e PortNetworkPolicyRuleValidationError) Error() string {
  method Validate (line 862) | func (m *HttpNetworkPolicyRules) Validate() error {
  method ValidateAll (line 870) | func (m *HttpNetworkPolicyRules) ValidateAll() error {
  method validate (line 874) | func (m *HttpNetworkPolicyRules) validate(all bool) error {
  type HttpNetworkPolicyRulesMultiError (line 936) | type HttpNetworkPolicyRulesMultiError
    method Error (line 939) | func (m HttpNetworkPolicyRulesMultiError) Error() string {
    method AllErrors (line 948) | func (m HttpNetworkPolicyRulesMultiError) AllErrors() []error { return...
  type HttpNetworkPolicyRulesValidationError (line 952) | type HttpNetworkPolicyRulesValidationError struct
    method Field (line 960) | func (e HttpNetworkPolicyRulesValidationError) Field() string { return...
    method Reason (line 963) | func (e HttpNetworkPolicyRulesValidationError) Reason() string { retur...
    method Cause (line 966) | func (e HttpNetworkPolicyRulesValidationError) Cause() error { return ...
    method Key (line 969) | func (e HttpNetworkPolicyRulesValidationError) Key() bool { return e.k...
    method ErrorName (line 972) | func (e HttpNetworkPolicyRulesValidationError) ErrorName() string {
    method Error (line 977) | func (e HttpNetworkPolicyRulesValidationError) Error() string {
  method Validate (line 1009) | func (m *HeaderMatch) Validate() error {
  method ValidateAll (line 1017) | func (m *HeaderMatch) ValidateAll() error {
  method validate (line 1021) | func (m *HeaderMatch) validate(all bool) error {
  type HeaderMatchMultiError (line 1056) | type HeaderMatchMultiError
    method Error (line 1059) | func (m HeaderMatchMultiError) Error() string {
    method AllErrors (line 1068) | func (m HeaderMatchMultiError) AllErrors() []error { return m }
  type HeaderMatchValidationError (line 1072) | type HeaderMatchValidationError struct
    method Field (line 1080) | func (e HeaderMatchValidationError) Field() string { return e.field }
    method Reason (line 1083) | func (e HeaderMatchValidationError) Reason() string { return e.reason }
    method Cause (line 1086) | func (e HeaderMatchValidationError) Cause() error { return e.cause }
    method Key (line 1089) | func (e HeaderMatchValidationError) Key() bool { return e.key }
    method ErrorName (line 1092) | func (e HeaderMatchValidationError) ErrorName() string { return "Heade...
    method Error (line 1095) | func (e HeaderMatchValidationError) Error() string {
  method Validate (line 1127) | func (m *HttpNetworkPolicyRule) Validate() error {
  method ValidateAll (line 1135) | func (m *HttpNetworkPolicyRule) ValidateAll() error {
  method validate (line 1139) | func (m *HttpNetworkPolicyRule) validate(all bool) error {
  type HttpNetworkPolicyRuleMultiError (line 1224) | type HttpNetworkPolicyRuleMultiError
    method Error (line 1227) | func (m HttpNetworkPolicyRuleMultiError) Error() string {
    method AllErrors (line 1236) | func (m HttpNetworkPolicyRuleMultiError) AllErrors() []error { return m }
  type HttpNetworkPolicyRuleValidationError (line 1240) | type HttpNetworkPolicyRuleValidationError struct
    method Field (line 1248) | func (e HttpNetworkPolicyRuleValidationError) Field() string { return ...
    method Reason (line 1251) | func (e HttpNetworkPolicyRuleValidationError) Reason() string { return...
    method Cause (line 1254) | func (e HttpNetworkPolicyRuleValidationError) Cause() error { return e...
    method Key (line 1257) | func (e HttpNetworkPolicyRuleValidationError) Key() bool { return e.key }
    method ErrorName (line 1260) | func (e HttpNetworkPolicyRuleValidationError) ErrorName() string {
    method Error (line 1265) | func (e HttpNetworkPolicyRuleValidationError) Error() string {
  method Validate (line 1297) | func (m *KafkaNetworkPolicyRules) Validate() error {
  method ValidateAll (line 1305) | func (m *KafkaNetworkPolicyRules) ValidateAll() error {
  method validate (line 1309) | func (m *KafkaNetworkPolicyRules) validate(all bool) error {
  type KafkaNetworkPolicyRulesMultiError (line 1371) | type KafkaNetworkPolicyRulesMultiError
    method Error (line 1374) | func (m KafkaNetworkPolicyRulesMultiError) Error() string {
    method AllErrors (line 1383) | func (m KafkaNetworkPolicyRulesMultiError) AllErrors() []error { retur...
  type KafkaNetworkPolicyRulesValidationError (line 1387) | type KafkaNetworkPolicyRulesValidationError struct
    method Field (line 1395) | func (e KafkaNetworkPolicyRulesValidationError) Field() string { retur...
    method Reason (line 1398) | func (e KafkaNetworkPolicyRulesValidationError) Reason() string { retu...
    method Cause (line 1401) | func (e KafkaNetworkPolicyRulesValidationError) Cause() error { return...
    method Key (line 1404) | func (e KafkaNetworkPolicyRulesValidationError) Key() bool { return e....
    method ErrorName (line 1407) | func (e KafkaNetworkPolicyRulesValidationError) ErrorName() string {
    method Error (line 1412) | func (e KafkaNetworkPolicyRulesValidationError) Error() string {
  method Validate (line 1444) | func (m *KafkaNetworkPolicyRule) Validate() error {
  method ValidateAll (line 1452) | func (m *KafkaNetworkPolicyRule) ValidateAll() error {
  method validate (line 1456) | func (m *KafkaNetworkPolicyRule) validate(all bool) error {
  type KafkaNetworkPolicyRuleMultiError (line 1508) | type KafkaNetworkPolicyRuleMultiError
    method Error (line 1511) | func (m KafkaNetworkPolicyRuleMultiError) Error() string {
    method AllErrors (line 1520) | func (m KafkaNetworkPolicyRuleMultiError) AllErrors() []error { return...
  type KafkaNetworkPolicyRuleValidationError (line 1524) | type KafkaNetworkPolicyRuleValidationError struct
    method Field (line 1532) | func (e KafkaNetworkPolicyRuleValidationError) Field() string { return...
    method Reason (line 1535) | func (e KafkaNetworkPolicyRuleValidationError) Reason() string { retur...
    method Cause (line 1538) | func (e KafkaNetworkPolicyRuleValidationError) Cause() error { return ...
    method Key (line 1541) | func (e KafkaNetworkPolicyRuleValidationError) Key() bool { return e.k...
    method ErrorName (line 1544) | func (e KafkaNetworkPolicyRuleValidationError) ErrorName() string {
    method Error (line 1549) | func (e KafkaNetworkPolicyRuleValidationError) Error() string {
  method Validate (line 1585) | func (m *L7NetworkPolicyRules) Validate() error {
  method ValidateAll (line 1593) | func (m *L7NetworkPolicyRules) ValidateAll() error {
  method validate (line 1597) | func (m *L7NetworkPolicyRules) validate(all bool) error {
  type L7NetworkPolicyRulesMultiError (line 1682) | type L7NetworkPolicyRulesMultiError
    method Error (line 1685) | func (m L7NetworkPolicyRulesMultiError) Error() string {
    method AllErrors (line 1694) | func (m L7NetworkPolicyRulesMultiError) AllErrors() []error { return m }
  type L7NetworkPolicyRulesValidationError (line 1698) | type L7NetworkPolicyRulesValidationError struct
    method Field (line 1706) | func (e L7NetworkPolicyRulesValidationError) Field() string { return e...
    method Reason (line 1709) | func (e L7NetworkPolicyRulesValidationError) Reason() string { return ...
    method Cause (line 1712) | func (e L7NetworkPolicyRulesValidationError) Cause() error { return e....
    method Key (line 1715) | func (e L7NetworkPolicyRulesValidationError) Key() bool { return e.key }
    method ErrorName (line 1718) | func (e L7NetworkPolicyRulesValidationError) ErrorName() string {
    method Error (line 1723) | func (e L7NetworkPolicyRulesValidationError) Error() string {
  method Validate (line 1755) | func (m *L7NetworkPolicyRule) Validate() error {
  method ValidateAll (line 1763) | func (m *L7NetworkPolicyRule) ValidateAll() error {
  method validate (line 1767) | func (m *L7NetworkPolicyRule) validate(all bool) error {
  type L7NetworkPolicyRuleMultiError (line 1822) | type L7NetworkPolicyRuleMultiError
    method Error (line 1825) | func (m L7NetworkPolicyRuleMultiError) Error() string {
    method AllErrors (line 1834) | func (m L7NetworkPolicyRuleMultiError) AllErrors() []error { return m }
  type L7NetworkPolicyRuleValidationError (line 1838) | type L7NetworkPolicyRuleValidationError struct
    method Field (line 1846) | func (e L7NetworkPolicyRuleValidationError) Field() string { return e....
    method Reason (line 1849) | func (e L7NetworkPolicyRuleValidationError) Reason() string { return e...
    method Cause (line 1852) | func (e L7NetworkPolicyRuleValidationError) Cause() error { return e.c...
    method Key (line 1855) | func (e L7NetworkPolicyRuleValidationError) Key() bool { return e.key }
    method ErrorName (line 1858) | func (e L7NetworkPolicyRuleValidationError) ErrorName() string {
    method Error (line 1863) | func (e L7NetworkPolicyRuleValidationError) Error() string {
  method Validate (line 1895) | func (m *NetworkPoliciesConfigDump) Validate() error {
  method ValidateAll (line 1903) | func (m *NetworkPoliciesConfigDump) ValidateAll() error {
  method validate (line 1907) | func (m *NetworkPoliciesConfigDump) validate(all bool) error {
  type NetworkPoliciesConfigDumpMultiError (line 1958) | type NetworkPoliciesConfigDumpMultiError
    method Error (line 1961) | func (m NetworkPoliciesConfigDumpMultiError) Error() string {
    method AllErrors (line 1970) | func (m NetworkPoliciesConfigDumpMultiError) AllErrors() []error { ret...
  type NetworkPoliciesConfigDumpValidationError (line 1974) | type NetworkPoliciesConfigDumpValidationError struct
    method Field (line 1982) | func (e NetworkPoliciesConfigDumpValidationError) Field() string { ret...
    method Reason (line 1985) | func (e NetworkPoliciesConfigDumpValidationError) Reason() string { re...
    method Cause (line 1988) | func (e NetworkPoliciesConfigDumpValidationError) Cause() error { retu...
    method Key (line 1991) | func (e NetworkPoliciesConfigDumpValidationError) Key() bool { return ...
    method ErrorName (line 1994) | func (e NetworkPoliciesConfigDumpValidationError) ErrorName() string {
    method Error (line 1999) | func (e NetworkPoliciesConfigDumpValidationError) Error() string {

FILE: go/cilium/api/npds_grpc.pb.go
  constant _ (line 20) | _ = grpc.SupportPackageIsVersion9
  constant NetworkPolicyDiscoveryService_StreamNetworkPolicies_FullMethodName (line 23) | NetworkPolicyDiscoveryService_StreamNetworkPolicies_FullMethodName = "/c...
  constant NetworkPolicyDiscoveryService_FetchNetworkPolicies_FullMethodName (line 24) | NetworkPolicyDiscoveryService_FetchNetworkPolicies_FullMethodName  = "/c...
  type NetworkPolicyDiscoveryServiceClient (line 32) | type NetworkPolicyDiscoveryServiceClient interface
  type networkPolicyDiscoveryServiceClient (line 37) | type networkPolicyDiscoveryServiceClient struct
    method StreamNetworkPolicies (line 45) | func (c *networkPolicyDiscoveryServiceClient) StreamNetworkPolicies(ct...
    method FetchNetworkPolicies (line 58) | func (c *networkPolicyDiscoveryServiceClient) FetchNetworkPolicies(ctx...
  function NewNetworkPolicyDiscoveryServiceClient (line 41) | func NewNetworkPolicyDiscoveryServiceClient(cc grpc.ClientConnInterface)...
  type NetworkPolicyDiscoveryServiceServer (line 73) | type NetworkPolicyDiscoveryServiceServer interface
  type UnimplementedNetworkPolicyDiscoveryServiceServer (line 84) | type UnimplementedNetworkPolicyDiscoveryServiceServer struct
    method StreamNetworkPolicies (line 86) | func (UnimplementedNetworkPolicyDiscoveryServiceServer) StreamNetworkP...
    method FetchNetworkPolicies (line 89) | func (UnimplementedNetworkPolicyDiscoveryServiceServer) FetchNetworkPo...
    method mustEmbedUnimplementedNetworkPolicyDiscoveryServiceServer (line 92) | func (UnimplementedNetworkPolicyDiscoveryServiceServer) mustEmbedUnimp...
    method testEmbeddedByValue (line 94) | func (UnimplementedNetworkPolicyDiscoveryServiceServer) testEmbeddedBy...
  type UnsafeNetworkPolicyDiscoveryServiceServer (line 99) | type UnsafeNetworkPolicyDiscoveryServiceServer interface
  function RegisterNetworkPolicyDiscoveryServiceServer (line 103) | func RegisterNetworkPolicyDiscoveryServiceServer(s grpc.ServiceRegistrar...
  function _NetworkPolicyDiscoveryService_StreamNetworkPolicies_Handler (line 114) | func _NetworkPolicyDiscoveryService_StreamNetworkPolicies_Handler(srv in...
  function _NetworkPolicyDiscoveryService_FetchNetworkPolicies_Handler (line 121) | func _NetworkPolicyDiscoveryService_FetchNetworkPolicies_Handler(srv int...

FILE: go/cilium/api/nphds.pb.go
  constant _ (line 23) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 25) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type NetworkPolicyHosts (line 31) | type NetworkPolicyHosts struct
    method Reset (line 42) | func (x *NetworkPolicyHosts) Reset() {
    method String (line 49) | func (x *NetworkPolicyHosts) String() string {
    method ProtoMessage (line 53) | func (*NetworkPolicyHosts) ProtoMessage() {}
    method ProtoReflect (line 55) | func (x *NetworkPolicyHosts) ProtoReflect() protoreflect.Message {
    method Descriptor (line 68) | func (*NetworkPolicyHosts) Descriptor() ([]byte, []int) {
    method GetPolicy (line 72) | func (x *NetworkPolicyHosts) GetPolicy() uint64 {
    method GetHostAddresses (line 79) | func (x *NetworkPolicyHosts) GetHostAddresses() []string {
  constant file_cilium_api_nphds_proto_rawDesc (line 88) | file_cilium_api_nphds_proto_rawDesc = "" +
  function file_cilium_api_nphds_proto_rawDescGZIP (line 104) | func file_cilium_api_nphds_proto_rawDescGZIP() []byte {
  function init (line 129) | func init() { file_cilium_api_nphds_proto_init() }
  function file_cilium_api_nphds_proto_init (line 130) | func file_cilium_api_nphds_proto_init() {

FILE: go/cilium/api/nphds.pb.validate.go
  method Validate (line 41) | func (m *NetworkPolicyHosts) Validate() error {
  method ValidateAll (line 49) | func (m *NetworkPolicyHosts) ValidateAll() error {
  method validate (line 53) | func (m *NetworkPolicyHosts) validate(all bool) error {
  type NetworkPolicyHostsMultiError (line 103) | type NetworkPolicyHostsMultiError
    method Error (line 106) | func (m NetworkPolicyHostsMultiError) Error() string {
    method AllErrors (line 115) | func (m NetworkPolicyHostsMultiError) AllErrors() []error { return m }
  type NetworkPolicyHostsValidationError (line 119) | type NetworkPolicyHostsValidationError struct
    method Field (line 127) | func (e NetworkPolicyHostsValidationError) Field() string { return e.f...
    method Reason (line 130) | func (e NetworkPolicyHostsValidationError) Reason() string { return e....
    method Cause (line 133) | func (e NetworkPolicyHostsValidationError) Cause() error { return e.ca...
    method Key (line 136) | func (e NetworkPolicyHostsValidationError) Key() bool { return e.key }
    method ErrorName (line 139) | func (e NetworkPolicyHostsValidationError) ErrorName() string {
    method Error (line 144) | func (e NetworkPolicyHostsValidationError) Error() string {

FILE: go/cilium/api/nphds_grpc.pb.go
  constant _ (line 20) | _ = grpc.SupportPackageIsVersion9
  constant NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_FullMethodName (line 23) | NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_FullMethodNa...
  constant NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_FullMethodName (line 24) | NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_FullMethodNam...
  type NetworkPolicyHostsDiscoveryServiceClient (line 32) | type NetworkPolicyHostsDiscoveryServiceClient interface
  type networkPolicyHostsDiscoveryServiceClient (line 37) | type networkPolicyHostsDiscoveryServiceClient struct
    method StreamNetworkPolicyHosts (line 45) | func (c *networkPolicyHostsDiscoveryServiceClient) StreamNetworkPolicy...
    method FetchNetworkPolicyHosts (line 58) | func (c *networkPolicyHostsDiscoveryServiceClient) FetchNetworkPolicyH...
  function NewNetworkPolicyHostsDiscoveryServiceClient (line 41) | func NewNetworkPolicyHostsDiscoveryServiceClient(cc grpc.ClientConnInter...
  type NetworkPolicyHostsDiscoveryServiceServer (line 73) | type NetworkPolicyHostsDiscoveryServiceServer interface
  type UnimplementedNetworkPolicyHostsDiscoveryServiceServer (line 84) | type UnimplementedNetworkPolicyHostsDiscoveryServiceServer struct
    method StreamNetworkPolicyHosts (line 86) | func (UnimplementedNetworkPolicyHostsDiscoveryServiceServer) StreamNet...
    method FetchNetworkPolicyHosts (line 89) | func (UnimplementedNetworkPolicyHostsDiscoveryServiceServer) FetchNetw...
    method mustEmbedUnimplementedNetworkPolicyHostsDiscoveryServiceServer (line 92) | func (UnimplementedNetworkPolicyHostsDiscoveryServiceServer) mustEmbed...
    method testEmbeddedByValue (line 94) | func (UnimplementedNetworkPolicyHostsDiscoveryServiceServer) testEmbed...
  type UnsafeNetworkPolicyHostsDiscoveryServiceServer (line 99) | type UnsafeNetworkPolicyHostsDiscoveryServiceServer interface
  function RegisterNetworkPolicyHostsDiscoveryServiceServer (line 103) | func RegisterNetworkPolicyHostsDiscoveryServiceServer(s grpc.ServiceRegi...
  function _NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_Handler (line 114) | func _NetworkPolicyHostsDiscoveryService_StreamNetworkPolicyHosts_Handle...
  function _NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_Handler (line 121) | func _NetworkPolicyHostsDiscoveryService_FetchNetworkPolicyHosts_Handler...

FILE: go/cilium/api/tls_wrapper.pb.go
  constant _ (line 19) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 21) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type UpstreamTlsWrapperContext (line 25) | type UpstreamTlsWrapperContext struct
    method Reset (line 31) | func (x *UpstreamTlsWrapperContext) Reset() {
    method String (line 38) | func (x *UpstreamTlsWrapperContext) String() string {
    method ProtoMessage (line 42) | func (*UpstreamTlsWrapperContext) ProtoMessage() {}
    method ProtoReflect (line 44) | func (x *UpstreamTlsWrapperContext) ProtoReflect() protoreflect.Message {
    method Descriptor (line 57) | func (*UpstreamTlsWrapperContext) Descriptor() ([]byte, []int) {
  type DownstreamTlsWrapperContext (line 61) | type DownstreamTlsWrapperContext struct
    method Reset (line 67) | func (x *DownstreamTlsWrapperContext) Reset() {
    method String (line 74) | func (x *DownstreamTlsWrapperContext) String() string {
    method ProtoMessage (line 78) | func (*DownstreamTlsWrapperContext) ProtoMessage() {}
    method ProtoReflect (line 80) | func (x *DownstreamTlsWrapperContext) ProtoReflect() protoreflect.Mess...
    method Descriptor (line 93) | func (*DownstreamTlsWrapperContext) Descriptor() ([]byte, []int) {
  constant file_cilium_api_tls_wrapper_proto_rawDesc (line 99) | file_cilium_api_tls_wrapper_proto_rawDesc = "" +
  function file_cilium_api_tls_wrapper_proto_rawDescGZIP (line 110) | func file_cilium_api_tls_wrapper_proto_rawDescGZIP() []byte {
  function init (line 130) | func init() { file_cilium_api_tls_wrapper_proto_init() }
  function file_cilium_api_tls_wrapper_proto_init (line 131) | func file_cilium_api_tls_wrapper_proto_init() {

FILE: go/cilium/api/tls_wrapper.pb.validate.go
  method Validate (line 41) | func (m *UpstreamTlsWrapperContext) Validate() error {
  method ValidateAll (line 49) | func (m *UpstreamTlsWrapperContext) ValidateAll() error {
  method validate (line 53) | func (m *UpstreamTlsWrapperContext) validate(all bool) error {
  type UpstreamTlsWrapperContextMultiError (line 70) | type UpstreamTlsWrapperContextMultiError
    method Error (line 73) | func (m UpstreamTlsWrapperContextMultiError) Error() string {
    method AllErrors (line 82) | func (m UpstreamTlsWrapperContextMultiError) AllErrors() []error { ret...
  type UpstreamTlsWrapperContextValidationError (line 86) | type UpstreamTlsWrapperContextValidationError struct
    method Field (line 94) | func (e UpstreamTlsWrapperContextValidationError) Field() string { ret...
    method Reason (line 97) | func (e UpstreamTlsWrapperContextValidationError) Reason() string { re...
    method Cause (line 100) | func (e UpstreamTlsWrapperContextValidationError) Cause() error { retu...
    method Key (line 103) | func (e UpstreamTlsWrapperContextValidationError) Key() bool { return ...
    method ErrorName (line 106) | func (e UpstreamTlsWrapperContextValidationError) ErrorName() string {
    method Error (line 111) | func (e UpstreamTlsWrapperContextValidationError) Error() string {
  method Validate (line 143) | func (m *DownstreamTlsWrapperContext) Validate() error {
  method ValidateAll (line 151) | func (m *DownstreamTlsWrapperContext) ValidateAll() error {
  method validate (line 155) | func (m *DownstreamTlsWrapperContext) validate(all bool) error {
  type DownstreamTlsWrapperContextMultiError (line 172) | type DownstreamTlsWrapperContextMultiError
    method Error (line 175) | func (m DownstreamTlsWrapperContextMultiError) Error() string {
    method AllErrors (line 184) | func (m DownstreamTlsWrapperContextMultiError) AllErrors() []error { r...
  type DownstreamTlsWrapperContextValidationError (line 189) | type DownstreamTlsWrapperContextValidationError struct
    method Field (line 197) | func (e DownstreamTlsWrapperContextValidationError) Field() string { r...
    method Reason (line 200) | func (e DownstreamTlsWrapperContextValidationError) Reason() string { ...
    method Cause (line 203) | func (e DownstreamTlsWrapperContextValidationError) Cause() error { re...
    method Key (line 206) | func (e DownstreamTlsWrapperContextValidationError) Key() bool { retur...
    method ErrorName (line 209) | func (e DownstreamTlsWrapperContextValidationError) ErrorName() string {
    method Error (line 214) | func (e DownstreamTlsWrapperContextValidationError) Error() string {

FILE: go/cilium/api/websocket.pb.go
  constant _ (line 21) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 23) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type WebSocketClient (line 26) | type WebSocketClient struct
    method Reset (line 52) | func (x *WebSocketClient) Reset() {
    method String (line 59) | func (x *WebSocketClient) String() string {
    method ProtoMessage (line 63) | func (*WebSocketClient) ProtoMessage() {}
    method ProtoReflect (line 65) | func (x *WebSocketClient) ProtoReflect() protoreflect.Message {
    method Descriptor (line 78) | func (*WebSocketClient) Descriptor() ([]byte, []int) {
    method GetAccessLogPath (line 82) | func (x *WebSocketClient) GetAccessLogPath() string {
    method GetHost (line 89) | func (x *WebSocketClient) GetHost() string {
    method GetPath (line 96) | func (x *WebSocketClient) GetPath() string {
    method GetKey (line 103) | func (x *WebSocketClient) GetKey() string {
    method GetVersion (line 110) | func (x *WebSocketClient) GetVersion() string {
    method GetOrigin (line 117) | func (x *WebSocketClient) GetOrigin() string {
    method GetHandshakeTimeout (line 124) | func (x *WebSocketClient) GetHandshakeTimeout() *durationpb.Duration {
    method GetPingInterval (line 131) | func (x *WebSocketClient) GetPingInterval() *durationpb.Duration {
    method GetPingWhenIdle (line 138) | func (x *WebSocketClient) GetPingWhenIdle() bool {
  type WebSocketServer (line 145) | type WebSocketServer struct
    method Reset (line 171) | func (x *WebSocketServer) Reset() {
    method String (line 178) | func (x *WebSocketServer) String() string {
    method ProtoMessage (line 182) | func (*WebSocketServer) ProtoMessage() {}
    method ProtoReflect (line 184) | func (x *WebSocketServer) ProtoReflect() protoreflect.Message {
    method Descriptor (line 197) | func (*WebSocketServer) Descriptor() ([]byte, []int) {
    method GetAccessLogPath (line 201) | func (x *WebSocketServer) GetAccessLogPath() string {
    method GetHost (line 208) | func (x *WebSocketServer) GetHost() string {
    method GetPath (line 215) | func (x *WebSocketServer) GetPath() string {
    method GetKey (line 222) | func (x *WebSocketServer) GetKey() string {
    method GetVersion (line 229) | func (x *WebSocketServer) GetVersion() string {
    method GetOrigin (line 236) | func (x *WebSocketServer) GetOrigin() string {
    method GetHandshakeTimeout (line 243) | func (x *WebSocketServer) GetHandshakeTimeout() *durationpb.Duration {
    method GetPingInterval (line 250) | func (x *WebSocketServer) GetPingInterval() *durationpb.Duration {
    method GetPingWhenIdle (line 257) | func (x *WebSocketServer) GetPingWhenIdle() bool {
  constant file_cilium_api_websocket_proto_rawDesc (line 266) | file_cilium_api_websocket_proto_rawDesc = "" +
  function file_cilium_api_websocket_proto_rawDescGZIP (line 295) | func file_cilium_api_websocket_proto_rawDescGZIP() []byte {
  function init (line 320) | func init() { file_cilium_api_websocket_proto_init() }
  function file_cilium_api_websocket_proto_init (line 321) | func file_cilium_api_websocket_proto_init() {

FILE: go/cilium/api/websocket.pb.validate.go
  method Validate (line 41) | func (m *WebSocketClient) Validate() error {
  method ValidateAll (line 49) | func (m *WebSocketClient) ValidateAll() error {
  method validate (line 53) | func (m *WebSocketClient) validate(all bool) error {
  type WebSocketClientMultiError (line 151) | type WebSocketClientMultiError
    method Error (line 154) | func (m WebSocketClientMultiError) Error() string {
    method AllErrors (line 163) | func (m WebSocketClientMultiError) AllErrors() []error { return m }
  type WebSocketClientValidationError (line 167) | type WebSocketClientValidationError struct
    method Field (line 175) | func (e WebSocketClientValidationError) Field() string { return e.field }
    method Reason (line 178) | func (e WebSocketClientValidationError) Reason() string { return e.rea...
    method Cause (line 181) | func (e WebSocketClientValidationError) Cause() error { return e.cause }
    method Key (line 184) | func (e WebSocketClientValidationError) Key() bool { return e.key }
    method ErrorName (line 187) | func (e WebSocketClientValidationError) ErrorName() string { return "W...
    method Error (line 190) | func (e WebSocketClientValidationError) Error() string {
  method Validate (line 222) | func (m *WebSocketServer) Validate() error {
  method ValidateAll (line 230) | func (m *WebSocketServer) ValidateAll() error {
  method validate (line 234) | func (m *WebSocketServer) validate(all bool) error {
  type WebSocketServerMultiError (line 323) | type WebSocketServerMultiError
    method Error (line 326) | func (m WebSocketServerMultiError) Error() string {
    method AllErrors (line 335) | func (m WebSocketServerMultiError) AllErrors() []error { return m }
  type WebSocketServerValidationError (line 339) | type WebSocketServerValidationError struct
    method Field (line 347) | func (e WebSocketServerValidationError) Field() string { return e.field }
    method Reason (line 350) | func (e WebSocketServerValidationError) Reason() string { return e.rea...
    method Cause (line 353) | func (e WebSocketServerValidationError) Cause() error { return e.cause }
    method Key (line 356) | func (e WebSocketServerValidationError) Key() bool { return e.key }
    method ErrorName (line 359) | func (e WebSocketServerValidationError) ErrorName() string { return "W...
    method Error (line 362) | func (e WebSocketServerValidationError) Error() string {

FILE: linux/bpf.h
  type bpf_insn (line 64) | struct bpf_insn {
  type bpf_lpm_trie_key (line 73) | struct bpf_lpm_trie_key {
  type bpf_cgroup_storage_key (line 78) | struct bpf_cgroup_storage_key {
  type bpf_cmd (line 84) | enum bpf_cmd {
  type bpf_map_type (line 108) | enum bpf_map_type {
  type bpf_prog_type (line 132) | enum bpf_prog_type {
  type bpf_attach_type (line 157) | enum bpf_attach_type {
  type bpf_stack_build_id_status (line 266) | enum bpf_stack_build_id_status {
  type bpf_stack_build_id (line 276) | struct bpf_stack_build_id {
  type bpf_func_id (line 2235) | enum bpf_func_id {
  type bpf_adj_room_mode (line 2286) | enum bpf_adj_room_mode {
  type bpf_hdr_start_off (line 2291) | enum bpf_hdr_start_off {
  type bpf_lwt_encap_mode (line 2297) | enum bpf_lwt_encap_mode {
  type __sk_buff (line 2305) | struct __sk_buff {
  type bpf_tunnel_key (line 2338) | struct bpf_tunnel_key {
  type bpf_xfrm_state (line 2353) | struct bpf_xfrm_state {
  type bpf_ret_code (line 2371) | enum bpf_ret_code {
  type bpf_sock (line 2380) | struct bpf_sock {
  type xdp_action (line 2405) | enum xdp_action {
  type xdp_md (line 2416) | struct xdp_md {
  type sk_action (line 2425) | enum sk_action {
  type sk_msg_md (line 2433) | struct sk_msg_md {
  type sk_reuseport_md (line 2446) | struct sk_reuseport_md {
  type bpf_prog_info (line 2472) | struct bpf_prog_info {
  type bpf_map_info (line 2495) | struct bpf_map_info {
  type bpf_btf_info (line 2512) | struct bpf_btf_info {
  type bpf_sock_addr (line 2522) | struct bpf_sock_addr {
  type bpf_sock_ops (line 2550) | struct bpf_sock_ops {
  type bpf_perf_event_value (line 2681) | struct bpf_perf_event_value {
  type bpf_cgroup_dev_ctx (line 2694) | struct bpf_cgroup_dev_ctx {
  type bpf_raw_tracepoint_args (line 2701) | struct bpf_raw_tracepoint_args {
  type bpf_fib_lookup (line 2723) | struct bpf_fib_lookup {
  type bpf_task_fd_type (line 2772) | enum bpf_task_fd_type {

FILE: pkg/policy/api/kafka/kafka.go
  type PortRule (line 17) | type PortRule struct
    method Sanitize (line 234) | func (kr *PortRule) Sanitize() error {
    method GetAPIVersion (line 273) | func (kr *PortRule) GetAPIVersion() int32 {
    method GetAPIKeys (line 285) | func (kr *PortRule) GetAPIKeys() []int32 {
    method Exists (line 310) | func (k *PortRule) Exists(rules []PortRule) bool {
  constant ProduceKey (line 94) | ProduceKey              = 0
  constant FetchKey (line 95) | FetchKey                = 1
  constant OffsetsKey (line 96) | OffsetsKey              = 2
  constant MetadataKey (line 97) | MetadataKey             = 3
  constant LeaderAndIsr (line 98) | LeaderAndIsr            = 4
  constant StopReplica (line 99) | StopReplica             = 5
  constant UpdateMetadata (line 100) | UpdateMetadata          = 6
  constant OffsetCommitKey (line 101) | OffsetCommitKey         = 8
  constant OffsetFetchKey (line 102) | OffsetFetchKey          = 9
  constant FindCoordinatorKey (line 103) | FindCoordinatorKey      = 10
  constant JoinGroupKey (line 104) | JoinGroupKey            = 11
  constant CreateTopicsKey (line 105) | CreateTopicsKey         = 19
  constant DeleteTopicsKey (line 106) | DeleteTopicsKey         = 20
  constant DeleteRecordsKey (line 107) | DeleteRecordsKey        = 21
  constant OffsetForLeaderEpochKey (line 108) | OffsetForLeaderEpochKey = 23
  constant AddPartitionsToTxnKey (line 109) | AddPartitionsToTxnKey   = 24
  constant WriteTxnMarkersKey (line 110) | WriteTxnMarkersKey      = 27
  constant TxnOffsetCommitKey (line 111) | TxnOffsetCommitKey      = 28
  constant AlterReplicaLogDirsKey (line 112) | AlterReplicaLogDirsKey  = 34
  constant DescribeLogDirsKey (line 113) | DescribeLogDirsKey      = 35
  constant CreatePartitionsKey (line 114) | CreatePartitionsKey     = 37
  constant HeartbeatKey (line 120) | HeartbeatKey   = 12
  constant LeaveGroupKey (line 121) | LeaveGroupKey  = 13
  constant SyncgroupKey (line 122) | SyncgroupKey   = 14
  constant APIVersionsKey (line 123) | APIVersionsKey = 18
  constant ProduceRole (line 128) | ProduceRole = "produce"
  constant ConsumeRole (line 129) | ConsumeRole = "consume"
  function ApiKeyToString (line 212) | func ApiKeyToString(apiKey int16) string {
  constant MaxTopicLen (line 224) | MaxTopicLen = 255

FILE: pkg/policy/api/kafka/zz_generated.deepequal.go
  method DeepEqual (line 13) | func (in *PortRule) DeepEqual(other *PortRule) bool {

FILE: proxylib/accesslog/client.go
  type Client (line 18) | type Client struct
    method connect (line 25) | func (cl *Client) connect() *net.UnixConn {
    method Log (line 63) | func (cl *Client) Log(pblog *cilium.LogEntry) {
    method Path (line 83) | func (c *Client) Path() string {
    method Close (line 95) | func (cl *Client) Close() {
  function NewClient (line 87) | func NewClient(accessLogPath string) proxylib.AccessLogger {

FILE: proxylib/cassandra/cassandraparser.go
  type CassandraRule (line 42) | type CassandraRule struct
    method Matches (line 52) | func (rule *CassandraRule) Matches(data interface{}) bool {
  constant cassHdrLen (line 47) | cassHdrLen = 9
  constant cassMaxLen (line 48) | cassMaxLen = 268435456
  constant unknownPreparedQueryPath (line 50) | unknownPreparedQueryPath = "/unknown-prepared-query"
  function CassandraRuleParser (line 97) | func CassandraRuleParser(rule *cilium.PortNetworkPolicyRule) []L7Network...
  type CassandraParserFactory (line 136) | type CassandraParserFactory struct
    method Create (line 161) | func (pf *CassandraParserFactory) Create(connection *Connection) inter...
  function init (line 140) | func init() {
  type CassandraParser (line 146) | type CassandraParser struct
    method OnData (line 170) | func (p *CassandraParser) OnData(reply, endStream bool, dataArray [][]...
  function createUnpreparedMsg (line 328) | func createUnpreparedMsg(version byte, streamID []byte, preparedID strin...
  constant invalidAction (line 373) | invalidAction = 0
  constant actionWithTable (line 374) | actionWithTable = 1
  constant actionNoTable (line 375) | actionNoTable = 2
  function parseQuery (line 426) | func parseQuery(p *CassandraParser, query string) (string, string) {
  function cassandraParseRequest (line 529) | func cassandraParseRequest(p *CassandraParser, data []byte) (OpError, []...
  function readPastBatchValues (line 651) | func readPastBatchValues(data []byte, initialOffset int) int {
  function cassandraParseReply (line 666) | func cassandraParseReply(p *CassandraParser, data []byte) {

FILE: proxylib/cassandra/cassandraparser_test.go
  type CassandraSuite (line 17) | type CassandraSuite struct
    method checkAccessLogs (line 37) | func (s *CassandraSuite) checkAccessLogs(tb testing.TB, expPasses, exp...
    method TestCassandraBatchRequestPolicyDenied (line 328) | func (s *CassandraSuite) TestCassandraBatchRequestPolicyDenied(c *test...
  function setUpCassandraSuite (line 23) | func setUpCassandraSuite(tb testing.TB) *CassandraSuite {
  function hexData (line 45) | func hexData(tb testing.TB, dataHex ...string) [][]byte {
  function TestCassandraOnDataNoHeader (line 55) | func TestCassandraOnDataNoHeader(t *testing.T) {
  function TestCassandraOnDataOptionsReq (line 63) | func TestCassandraOnDataOptionsReq(t *testing.T) {
  function TestCassandraOnDataPartialReq (line 95) | func TestCassandraOnDataPartialReq(t *testing.T) {
  function TestCassandraOnDataQueryReq (line 124) | func TestCassandraOnDataQueryReq(t *testing.T) {
  function TestCassandraOnDataSplitQueryReq (line 154) | func TestCassandraOnDataSplitQueryReq(t *testing.T) {
  function TestCassandraOnDataMultiReq (line 184) | func TestCassandraOnDataMultiReq(t *testing.T) {
  function TestSimpleCassandraPolicy (line 218) | func TestSimpleCassandraPolicy(t *testing.T) {
  function createUnauthMsg (line 256) | func createUnauthMsg(streamID byte) []byte {
  function TestCassandraBatchRequestPolicy (line 266) | func TestCassandraBatchRequestPolicy(t *testing.T) {
  function TestCassandraBatchRequestPreparedStatement (line 391) | func TestCassandraBatchRequestPreparedStatement(t *testing.T) {
  function TestCassandraBatchRequestPreparedStatementDenied (line 461) | func TestCassandraBatchRequestPreparedStatementDenied(t *testing.T) {
  function TestCassandraExecutePreparedStatement (line 532) | func TestCassandraExecutePreparedStatement(t *testing.T) {
  function TestCassandraExecutePreparedStatementUnknownID (line 591) | func TestCassandraExecutePreparedStatementUnknownID(t *testing.T) {
  function TestCassandraPreparedResultReply (line 618) | func TestCassandraPreparedResultReply(t *testing.T) {
  function TestCassandraAdditionalQueries (line 657) | func TestCassandraAdditionalQueries(t *testing.T) {
  function TestCassandraUseQuery (line 728) | func TestCassandraUseQuery(t *testing.T) {

FILE: proxylib/kafka/kafkalib/error.go
  constant ErrUnknown (line 9) | ErrUnknown                                 = -1
  constant ErrNone (line 10) | ErrNone                                    = 0
  constant ErrOffsetOutOfRange (line 11) | ErrOffsetOutOfRange                        = 1
  constant ErrInvalidMessage (line 12) | ErrInvalidMessage                          = 2
  constant ErrUnknownTopicOrPartition (line 13) | ErrUnknownTopicOrPartition                 = 3
  constant ErrInvalidMessageSize (line 14) | ErrInvalidMessageSize                      = 4
  constant ErrLeaderNotAvailable (line 15) | ErrLeaderNotAvailable                      = 5
  constant ErrNotLeaderForPartition (line 16) | ErrNotLeaderForPartition                   = 6
  constant ErrRequestTimeout (line 17) | ErrRequestTimeout                          = 7
  constant ErrBrokerNotAvailable (line 18) | ErrBrokerNotAvailable                      = 8
  constant ErrReplicaNotAvailable (line 19) | ErrReplicaNotAvailable                     = 9
  constant ErrMessageSizeTooLarge (line 20) | ErrMessageSizeTooLarge                     = 10
  constant ErrScaleControllerEpoch (line 21) | ErrScaleControllerEpoch                    = 11
  constant ErrOffsetMetadataTooLarge (line 22) | ErrOffsetMetadataTooLarge                  = 12
  constant ErrNetwork (line 23) | ErrNetwork                                 = 13
  constant ErrOffsetLoadInProgress (line 24) | ErrOffsetLoadInProgress                    = 14
  constant ErrNoCoordinator (line 25) | ErrNoCoordinator                           = 15
  constant ErrNotCoordinator (line 26) | ErrNotCoordinator                          = 16
  constant ErrInvalidTopic (line 27) | ErrInvalidTopic                            = 17
  constant ErrRecordListTooLarge (line 28) | ErrRecordListTooLarge                      = 18
  constant ErrNotEnoughReplicas (line 29) | ErrNotEnoughReplicas                       = 19
  constant ErrNotEnoughReplicasAfterAppend (line 30) | ErrNotEnoughReplicasAfterAppend            = 20
  constant ErrInvalidRequiredAcks (line 31) | ErrInvalidRequiredAcks                     = 21
  constant ErrIllegalGeneration (line 32) | ErrIllegalGeneration                       = 22
  constant ErrInconsistentPartitionAssignmentStrategy (line 33) | ErrInconsistentPartitionAssignmentStrategy = 23
  constant ErrUnknownParititonAssignmentStrategy (line 34) | ErrUnknownParititonAssignmentStrategy      = 24
  constant ErrUnknownConsumerID (line 35) | ErrUnknownConsumerID                       = 25
  constant ErrInvalidSessionTimeout (line 36) | ErrInvalidSessionTimeout                   = 26
  constant ErrRebalanceInProgress (line 37) | ErrRebalanceInProgress                     = 27
  constant ErrInvalidCommitOffsetSize (line 38) | ErrInvalidCommitOffsetSize                 = 28
  constant ErrTopicAuthorizationFailed (line 39) | ErrTopicAuthorizationFailed                = 29
  constant ErrGroupAuthorizationFailed (line 40) | ErrGroupAuthorizationFailed                = 30
  constant ErrClusterAuthorizationFailed (line 41) | ErrClusterAuthorizationFailed              = 31
  constant ErrInvalidTimeStamp (line 42) | ErrInvalidTimeStamp                        = 32

FILE: proxylib/kafka/kafkalib/policy.go
  type Rule (line 12) | type Rule struct
    method CheckAPIKeyRole (line 67) | func (r *Rule) CheckAPIKeyRole(kind int16) bool {
    method CheckAPIVersion (line 79) | func (r *Rule) CheckAPIVersion(apiVersion int16) bool {
    method CheckClientID (line 84) | func (r *Rule) CheckClientID(clientID string) bool {
    method Matches (line 118) | func (r Rule) Matches(data interface{}) bool {
  function NewRule (line 52) | func NewRule(apiVersion int32, apiKeys []int32, clientID, topic string) ...
  function isTopicAPIKey (line 90) | func isTopicAPIKey(kind int16) bool {

FILE: proxylib/kafka/kafkalib/policy_test.go
  type kafkaTestSuite (line 16) | type kafkaTestSuite struct
  function setUpKafkaTestSuite (line 20) | func setUpKafkaTestSuite(tb testing.TB) *kafkaTestSuite {
  method MatchesRule (line 36) | func (req *RequestMessage) MatchesRule(rules []Rule) bool {
  function TestProduceRequest (line 45) | func TestProduceRequest(c *testing.T) {
  function TestUnknownRequest (line 118) | func TestUnknownRequest(t *testing.T) {

FILE: proxylib/kafka/kafkalib/request.go
  type RequestMessage (line 18) | type RequestMessage struct
    method GetAPIKey (line 35) | func (req *RequestMessage) GetAPIKey() int16 {
    method GetRaw (line 40) | func (req *RequestMessage) GetRaw() []byte {
    method GetVersion (line 45) | func (req *RequestMessage) GetVersion() int16 {
    method GetCorrelationID (line 50) | func (req *RequestMessage) GetCorrelationID() CorrelationID {
    method SetCorrelationID (line 59) | func (req *RequestMessage) SetCorrelationID(id CorrelationID) {
    method extractVersion (line 65) | func (req *RequestMessage) extractVersion() int16 {
    method extractClientID (line 69) | func (req *RequestMessage) extractClientID() string {
    method String (line 82) | func (req *RequestMessage) String() string {
    method GetTopics (line 93) | func (req *RequestMessage) GetTopics() []string {
    method setTopics (line 104) | func (req *RequestMessage) setTopics() {
    method CreateResponse (line 174) | func (req *RequestMessage) CreateResponse(err error) (*ResponseMessage...
    method CreateAuthErrorResponse (line 201) | func (req *RequestMessage) CreateAuthErrorResponse() (*ResponseMessage...
  type CorrelationID (line 32) | type CorrelationID
  function produceTopics (line 126) | func produceTopics(req *proto.ProduceReq) []string {
  function fetchTopics (line 134) | func fetchTopics(req *proto.FetchReq) []string {
  function offsetTopics (line 142) | func offsetTopics(req *proto.OffsetReq) []string {
  function metadataTopics (line 150) | func metadataTopics(req *proto.MetadataReq) []string {
  function offsetCommitTopics (line 155) | func offsetCommitTopics(req *proto.OffsetCommitReq) []string {
  function offsetFetchTopics (line 163) | func offsetFetchTopics(req *proto.OffsetFetchReq) []string {
  function ReadRequest (line 207) | func ReadRequest(reader io.Reader) (*RequestMessage, error) {

FILE: proxylib/kafka/kafkalib/response.go
  type ResponseMessage (line 16) | type ResponseMessage struct
    method GetCorrelationID (line 22) | func (res *ResponseMessage) GetCorrelationID() CorrelationID {
    method SetCorrelationID (line 31) | func (res *ResponseMessage) SetCorrelationID(id CorrelationID) {
    method GetRaw (line 38) | func (res *ResponseMessage) GetRaw() []byte {
    method String (line 43) | func (res *ResponseMessage) String() string {
  function ReadResponse (line 53) | func ReadResponse(reader io.Reader) (*ResponseMessage, error) {
  function createProduceResponse (line 70) | func createProduceResponse(req *proto.ProduceReq, err error) (*ResponseM...
  function createFetchResponse (line 105) | func createFetchResponse(req *proto.FetchReq, err error) (*ResponseMessa...
  function createOffsetResponse (line 141) | func createOffsetResponse(req *proto.OffsetReq, err error) (*ResponseMes...
  function createMetadataResponse (line 177) | func createMetadataResponse(req *proto.MetadataReq, err error) (*Respons...
  function createConsumerMetadataResponse (line 211) | func createConsumerMetadataResponse(req *proto.ConsumerMetadataReq, err ...
  function createOffsetCommitResponse (line 232) | func createOffsetCommitResponse(req *proto.OffsetCommitReq, err error) (...
  function createOffsetFetchResponse (line 267) | func createOffsetFetchResponse(req *proto.OffsetFetchReq, err error) (*R...

FILE: proxylib/kafka/parser.go
  constant parserName (line 17) | parserName = "kafka"
  function KafkaRuleParser (line 22) | func KafkaRuleParser(rule *cilium.PortNetworkPolicyRule) []L7NetworkPoli...
  type KafkaParserFactory (line 36) | type KafkaParserFactory struct
    method Create (line 50) | func (pf *KafkaParserFactory) Create(connection *Connection) interface...
  function init (line 40) | func init() {
  type KafkaParser (line 46) | type KafkaParser struct
    method OnData (line 55) | func (p *KafkaParser) OnData(reply bool, reader *Reader) (OpType, int) {

FILE: proxylib/kafka/parser_test.go
  type KafkaSuite (line 18) | type KafkaSuite struct
    method checkAccessLogs (line 38) | func (s *KafkaSuite) checkAccessLogs(tb testing.TB, expPasses, expDrop...
  function setUpKafkaSuite (line 24) | func setUpKafkaSuite(tb testing.TB) *KafkaSuite {
  function hexData (line 46) | func hexData(tb testing.TB, dataHex ...string) [][]byte {
  function TestKafkaOnDataNoHeader (line 56) | func TestKafkaOnDataNoHeader(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderMinimalPolicy (line 100) | func TestKafkaOnDataSimpleHeaderMinimalPolicy(t *testing.T) {
  function TestKafkaOnDataInvalidMessage (line 117) | func TestKafkaOnDataInvalidMessage(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderSimplePolicy (line 134) | func TestKafkaOnDataSimpleHeaderSimplePolicy(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithPolicyDrop (line 155) | func TestKafkaOnDataSimpleHeaderWithPolicyDrop(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithPolicyAllow (line 193) | func TestKafkaOnDataSimpleHeaderWithPolicyAllow(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithClientIDAllow (line 224) | func TestKafkaOnDataSimpleHeaderWithClientIDAllow(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithClientID (line 256) | func TestKafkaOnDataSimpleHeaderWithClientID(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithApiKeys (line 283) | func TestKafkaOnDataSimpleHeaderWithApiKeys(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithApiKeysMismatch (line 311) | func TestKafkaOnDataSimpleHeaderWithApiKeysMismatch(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithApiVersion (line 349) | func TestKafkaOnDataSimpleHeaderWithApiVersion(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithApiVersionMismatch (line 376) | func TestKafkaOnDataSimpleHeaderWithApiVersionMismatch(t *testing.T) {
  function TestKafkaOnDataSimpleHeaderWithClientIDDeny (line 413) | func TestKafkaOnDataSimpleHeaderWithClientIDDeny(t *testing.T) {
  function TestKafkaOnDataResponse (line 455) | func TestKafkaOnDataResponse(t *testing.T) {

FILE: proxylib/libcilium.h
  type _GoString_ (line 14) | typedef struct { const char *p; ptrdiff_t n; } _GoString_;
  type GoInt8 (line 40) | typedef signed char GoInt8;
  type GoUint8 (line 41) | typedef unsigned char GoUint8;
  type GoInt16 (line 42) | typedef short GoInt16;
  type GoUint16 (line 43) | typedef unsigned short GoUint16;
  type GoInt32 (line 44) | typedef int GoInt32;
  type GoUint32 (line 45) | typedef unsigned int GoUint32;
  type GoInt64 (line 46) | typedef long long GoInt64;
  type GoUint64 (line 47) | typedef unsigned long long GoUint64;
  type GoInt64 (line 48) | typedef GoInt64 GoInt;
  type GoUint64 (line 49) | typedef GoUint64 GoUint;
  type GoUintptr (line 50) | typedef size_t GoUintptr;
  type GoFloat32 (line 51) | typedef float GoFloat32;
  type GoFloat64 (line 52) | typedef double GoFloat64;
  type _Fcomplex (line 56) | typedef _Fcomplex GoComplex64;
  type _Dcomplex (line 57) | typedef _Dcomplex GoComplex128;
  type std (line 60) | typedef std::complex<float> GoComplex64;
  type std (line 61) | typedef std::complex<double> GoComplex128;
  type GoComplex64 (line 64) | typedef float _Complex GoComplex64;
  type GoComplex128 (line 65) | typedef double _Complex GoComplex128;
  type _GoString_ (line 75) | typedef _GoString_ GoString;
  type GoInterface (line 79) | typedef struct { void *t; void *v; } GoInterface;
  type GoSlice (line 80) | typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;

FILE: proxylib/libcilium/helpers_test.go
  function numConnections (line 18) | func numConnections() int {
  function checkConnectionCount (line 24) | func checkConnectionCount(t *testing.T, expConns int) {
  function checkConnections (line 32) | func checkConnections(t *testing.T, res, expected FilterResult, expConns...
  function CheckOnNewConnection (line 40) | func CheckOnNewConnection(t *testing.T, instanceId uint64, proto string,...
  function CheckClose (line 53) | func CheckClose(t *testing.T, connectionId uint64, replyBufAddr *byte, n...
  type ExpFilterOp (line 72) | type ExpFilterOp struct
  function checkOps (line 77) | func checkOps(ops [][2]int64, exp []ExpFilterOp) bool {
  function checkBuf (line 90) | func checkBuf(t *testing.T, buf InjectBuf, expected string) {
  function checkOnData (line 101) | func checkOnData(t *testing.T, res, expected FilterResult, ops [][2]int6...
  function CheckOnData (line 111) | func CheckOnData(t *testing.T, connectionId uint64, reply, endStream boo...

FILE: proxylib/libcilium/proxylib.go
  function strcpy (line 31) | func strcpy(str string) string {
  function OnNewConnection (line 35) | func OnNewConnection(instanceId uint64, proto string, connectionId uint6...
  function OnData (line 54) | func OnData(connectionId uint64, reply, endStream bool, data *[][]byte, ...
  function Close (line 66) | func Close(connectionId uint64) {
  function OpenModule (line 72) | func OpenModule(params [][2]string, debug bool) uint64 {
  function CloseModule (line 100) | func CloseModule(id uint64) {

FILE: proxylib/libcilium/proxylib_memcached_test.go
  function TestMemcache (line 106) | func TestMemcache(t *testing.T) {
  type testCase (line 149) | type testCase struct

FILE: proxylib/libcilium/proxylib_test.go
  constant debug (line 19) | debug = false
  function TestOpenModule (line 21) | func TestOpenModule(t *testing.T) {
  function TestOnNewConnection (line 68) | func TestOnNewConnection(t *testing.T) {
  function checkAccessLogs (line 108) | func checkAccessLogs(t *testing.T, logServer *test.AccessLogServer, expP...
  function TestOnDataNoPolicy (line 140) | func TestOnDataNoPolicy(t *testing.T) {
  type PanicParserFactory (line 177) | type PanicParserFactory struct
    method Create (line 185) | func (p *PanicParserFactory) Create(connection *proxylib.Connection) i...
  type PanicParser (line 181) | type PanicParser struct
    method OnData (line 191) | func (p *PanicParser) OnData(reply, endStream bool, data [][]byte) (pr...
  function TestOnDataPanic (line 198) | func TestOnDataPanic(t *testing.T) {
  function insertPolicyText (line 225) | func insertPolicyText(t *testing.T, mod uint64, version string, policies...
  function insertPolicyTextRaw (line 229) | func insertPolicyTextRaw(t *testing.T, mod uint64, version string, polic...
  function TestUnsupportedL7Drops (line 239) | func TestUnsupportedL7Drops(t *testing.T) {
  function TestUnsupportedL7DropsGeneric (line 288) | func TestUnsupportedL7DropsGeneric(t *testing.T) {
  function TestEnvoyL7DropsGeneric (line 341) | func TestEnvoyL7DropsGeneric(t *testing.T) {
  function TestTwoRulesOnSamePortFirstNoL7 (line 394) | func TestTwoRulesOnSamePortFirstNoL7(t *testing.T) {
  function TestTwoRulesOnSamePortFirstNoL7Generic (line 428) | func TestTwoRulesOnSamePortFirstNoL7Generic(t *testing.T) {
  function TestTwoRulesOnSamePortMismatchingL7 (line 471) | func TestTwoRulesOnSamePortMismatchingL7(t *testing.T) {
  function TestSimplePolicy (line 532) | func TestSimplePolicy(t *testing.T) {
  function TestAllowAllPolicy (line 591) | func TestAllowAllPolicy(t *testing.T) {
  function TestDenyAllPolicy (line 638) | func TestDenyAllPolicy(t *testing.T) {
  function TestDenyPolicy (line 687) | func TestDenyPolicy(t *testing.T) {
  function TestAllowEmptyPolicy (line 738) | func TestAllowEmptyPolicy(t *testing.T) {
  function TestAllowAllPolicyL3Egress (line 787) | func TestAllowAllPolicyL3Egress(t *testing.T) {

FILE: proxylib/memcached/binary/parser.go
  type ParserFactory (line 19) | type ParserFactory struct
    method Create (line 22) | func (p *ParserFactory) Create(connection *proxylib.Connection) interf...
  type Parser (line 34) | type Parser struct
    method OnData (line 47) | func (p *Parser) OnData(reply, endStream bool, dataBuffers [][]byte) (...
    method injectDeniedMessage (line 135) | func (p *Parser) injectDeniedMessage(magic byte) {
    method injectFromQueue (line 145) | func (p *Parser) injectFromQueue() bool {
    method getOpcodeAndKey (line 163) | func (p *Parser) getOpcodeAndKey(data []byte, extrasLength byte, keyLe...
  constant headerSize (line 44) | headerSize = 24
  type queuedInject (line 130) | type queuedInject struct
  constant RequestMagic (line 158) | RequestMagic = 0x80
  constant ResponseMagic (line 160) | ResponseMagic = 0x81
  function getMemcacheKey (line 175) | func getMemcacheKey(packet []byte, extrasLength byte, keyLength uint16) ...

FILE: proxylib/memcached/binary/parser_test.go
  function TestMemcacheGetKey (line 12) | func TestMemcacheGetKey(c *testing.T) {

FILE: proxylib/memcached/meta/meta.go
  type MemcacheMeta (line 9) | type MemcacheMeta struct
    method IsBinary (line 18) | func (m *MemcacheMeta) IsBinary() bool {

FILE: proxylib/memcached/parser.go
  type Rule (line 24) | type Rule struct
    method Matches (line 36) | func (rule *Rule) Matches(data interface{}) bool {
    method matchCommand (line 91) | func (rule *Rule) matchCommand(cmd string) bool {
    method matchOpcode (line 96) | func (rule *Rule) matchOpcode(code byte) bool {
  function L7RuleParser (line 103) | func L7RuleParser(rule *cilium.PortNetworkPolicyRule) []proxylib.L7Netwo...
  type ParserFactory (line 142) | type ParserFactory struct
    method Create (line 145) | func (p *ParserFactory) Create(connection *proxylib.Connection) interf...
  constant parserName (line 158) | parserName = "memcache"
  function init (line 161) | func init() {
  type Parser (line 168) | type Parser struct
    method OnData (line 176) | func (p *Parser) OnData(reply, endStream bool, dataBuffers [][]byte) (...
  type memcacheCommandSet (line 194) | type memcacheCommandSet struct

FILE: proxylib/memcached/text/parser.go
  type ParserFactory (line 21) | type ParserFactory struct
    method Create (line 24) | func (p *ParserFactory) Create(connection *proxylib.Connection) interf...
  type Parser (line 36) | type Parser struct
    method OnData (line 62) | func (p *Parser) OnData(reply, endStream bool, dataBuffers [][]byte) (...
    method untilEnd (line 256) | func (p *Parser) untilEnd(data []byte) (proxylib.OpType, int) {
    method isCommandRetrieval (line 265) | func (p *Parser) isCommandRetrieval(cmd []byte) bool {
    method isCommandStorage (line 270) | func (p *Parser) isCommandStorage(cmd []byte) bool {
    method isCommandDelete (line 279) | func (p *Parser) isCommandDelete(cmd []byte) bool {
    method isCommandIncrDecr (line 283) | func (p *Parser) isCommandIncrDecr(cmd []byte) bool {
    method isErrorReply (line 288) | func (p *Parser) isErrorReply(firstToken []byte) bool {
    method injectFromQueue (line 295) | func (p *Parser) injectFromQueue() int {
    method injectDeniedMessage (line 312) | func (p *Parser) injectDeniedMessage() {
  type replyIntent (line 45) | type replyIntent struct
  constant casWithNoreplyFields (line 54) | casWithNoreplyFields     = 7
  constant storageWithNoreplyFields (line 55) | storageWithNoreplyFields = 6
  constant deleteWithNoreplyFields (line 56) | deleteWithNoreplyFields  = 3
  constant incrWithNoreplyFields (line 57) | incrWithNoreplyFields    = 4
  constant touchWithNoreplyFields (line 58) | touchWithNoreplyFields   = 4
  constant payloadEnd (line 254) | payloadEnd = "\r\nEND\r\n"

FILE: proxylib/npds/backoff.go
  type exponentialBackoff (line 16) | type exponentialBackoff struct
    method Reset (line 50) | func (b *exponentialBackoff) Reset() {
    method Wait (line 55) | func (b *exponentialBackoff) Wait(ctx context.Context) error {
    method duration (line 81) | func (b *exponentialBackoff) duration(attempt int) time.Duration {
  function calculateDuration (line 37) | func calculateDuration(min, max time.Duration, factor float64, failures ...

FILE: proxylib/npds/client.go
  constant DialDelay (line 25) | DialDelay    = 100 * time.Millisecond
  constant BackOffLimit (line 26) | BackOffLimit = 100
  constant NPDSTypeURL (line 27) | NPDSTypeURL  = "type.googleapis.com/cilium.NetworkPolicy"
  type Client (line 30) | type Client struct
    method Close (line 40) | func (c *Client) Close() {
    method Path (line 55) | func (c *Client) Path() string {
    method Run (line 120) | func (c *Client) Run(connected func()) (err error) {
  function NewClient (line 59) | func NewClient(path, nodeId string, updater proxylib.PolicyUpdater) prox...

FILE: proxylib/proxylib.go
  function init (line 20) | func init() {
  function OnNewConnection (line 29) | func OnNewConnection(instanceId uint64, proto string, connectionId uint6...
  function OnData (line 55) | func OnData(connectionId uint64, reply, endStream bool, data *[][]byte, ...
  function Close (line 62) | func Close(connectionId uint64) {
  function OpenModule (line 73) | func OpenModule(params [][2]string, debug bool) uint64 {
  function CloseModule (line 78) | func CloseModule(id uint64) {
  function main (line 83) | func main() {}

FILE: proxylib/proxylib/connection.go
  type InjectBuf (line 33) | type InjectBuf
  type Connection (line 37) | type Connection struct
    method OnData (line 108) | func (connection *Connection) OnData(reply, endStream bool, data *[][]...
    method Matches (line 207) | func (connection *Connection) Matches(l7 interface{}) bool {
    method getInjectBuf (line 217) | func (connection *Connection) getInjectBuf(reply bool) InjectBuf {
    method Inject (line 225) | func (connection *Connection) Inject(reply bool, data []byte) int {
    method IsInjectBufFull (line 241) | func (connection *Connection) IsInjectBufFull(reply bool) bool {
    method Log (line 246) | func (conn *Connection) Log(entryType cilium.EntryType, l7 cilium.IsLo...
  function NewConnection (line 55) | func NewConnection(instance *Instance, proto string, connectionId uint64...
  function advanceInput (line 94) | func advanceInput(input [][]byte, bytes int) [][]byte {

FILE: proxylib/proxylib/input_test.go
  function TestAdvanceInput (line 12) | func TestAdvanceInput(t *testing.T) {

FILE: proxylib/proxylib/instance.go
  type PolicyClient (line 18) | type PolicyClient interface
  type AccessLogger (line 23) | type AccessLogger interface
  type PolicyUpdater (line 29) | type PolicyUpdater interface
  type Instance (line 33) | type Instance struct
    method getPolicyMap (line 137) | func (ins *Instance) getPolicyMap() PolicyMap {
    method setPolicyMap (line 141) | func (ins *Instance) setPolicyMap(newMap PolicyMap) {
    method PolicyMatches (line 145) | func (ins *Instance) PolicyMatches(endpointPolicyName string, ingress ...
    method PolicyUpdate (line 156) | func (ins *Instance) PolicyUpdate(resp *envoy_service_discovery.Discov...
    method Log (line 219) | func (ins *Instance) Log(pblog *cilium.LogEntry) {
  function NewInstance (line 52) | func NewInstance(nodeID string, accessLogger AccessLogger) *Instance {
  function OpenInstance (line 72) | func OpenInstance(nodeID string, xdsPath string, newPolicyClient func(pa...
  function FindInstance (line 106) | func FindInstance(id uint64) *Instance {
  function CloseInstance (line 113) | func CloseInstance(id uint64) uint64 {

FILE: proxylib/proxylib/parserfactory.go
  type Parser (line 11) | type Parser interface
  type ReaderParser (line 49) | type ReaderParser interface
  type ParserFactory (line 86) | type ParserFactory interface
  function RegisterParserFactory (line 95) | func RegisterParserFactory(name string, parserFactory ParserFactory) {
  function GetParserFactory (line 100) | func GetParserFactory(name string) ParserFactory {

FILE: proxylib/proxylib/policymap.go
  type L7NetworkPolicyRule (line 18) | type L7NetworkPolicyRule interface
  type L7RuleParser (line 25) | type L7RuleParser
  function RegisterL7RuleParser (line 32) | func RegisterL7RuleParser(l7PolicyTypeName string, parserFunc L7RulePars...
  function ParseError (line 39) | func ParseError(reason string, config interface{}) {
  type PortNetworkPolicyRule (line 43) | type PortNetworkPolicyRule struct
    method Matches (line 92) | func (p *PortNetworkPolicyRule) Matches(remoteId uint32, l7 interface{...
  function newPortNetworkPolicyRule (line 49) | func newPortNetworkPolicyRule(config *cilium.PortNetworkPolicyRule) (Por...
  type PortNetworkPolicyRules (line 129) | type PortNetworkPolicyRules struct
    method Matches (line 159) | func (p *PortNetworkPolicyRules) Matches(remoteId uint32, l7 interface...
  function newPortNetworkPolicyRules (line 133) | func newPortNetworkPolicyRules(config []*cilium.PortNetworkPolicyRule, p...
  type PortNetworkPolicies (line 188) | type PortNetworkPolicies struct
    method Matches (line 223) | func (p *PortNetworkPolicies) Matches(port, remoteId uint32, l7 interf...
  function newPortNetworkPolicies (line 192) | func newPortNetworkPolicies(config []*cilium.PortNetworkPolicy, dir stri...
  type PolicyInstance (line 256) | type PolicyInstance struct
    method Matches (line 271) | func (p *PolicyInstance) Matches(ingress bool, port, remoteId uint32, ...
  function newPolicyInstance (line 262) | func newPolicyInstance(config *cilium.NetworkPolicy) *PolicyInstance {
  type PolicyMap (line 282) | type PolicyMap
  function newPolicyMap (line 284) | func newPolicyMap() PolicyMap {

FILE: proxylib/proxylib/reader.go
  type Reader (line 10) | type Reader struct
    method Reset (line 23) | func (r *Reader) Reset() int {
    method Length (line 29) | func (r *Reader) Length() int {
    method PeekFull (line 37) | func (r *Reader) PeekFull(p []byte) (n int, err error) {
    method Read (line 60) | func (r *Reader) Read(p []byte) (n int, err error) {
    method AdvanceInput (line 81) | func (r *Reader) AdvanceInput(bytes int) {
  function NewReader (line 16) | func NewReader(input [][]byte, endStream bool) Reader {

FILE: proxylib/proxylib/test_util.go
  method CheckInsertPolicyText (line 24) | func (ins *Instance) CheckInsertPolicyText(tb testing.TB, version string...
  method InsertPolicyText (line 29) | func (ins *Instance) InsertPolicyText(version string, policies []string,...
  method CheckNewConnectionOK (line 76) | func (ins *Instance) CheckNewConnectionOK(tb testing.TB, proto string, i...
  method CheckNewConnection (line 83) | func (ins *Instance) CheckNewConnection(proto string, ingress bool, srcI...
  method CheckOnDataOK (line 92) | func (conn *Connection) CheckOnDataOK(tb testing.TB, reply, endStream bo...
  method CheckOnData (line 96) | func (conn *Connection) CheckOnData(tb testing.TB, reply, endStream bool...

FILE: proxylib/proxylib/types.go
  type OpType (line 9) | type OpType
    method String (line 31) | func (op OpType) String() string {
  constant MORE (line 12) | MORE OpType = iota
  constant PASS (line 13) | PASS
  constant DROP (line 14) | DROP
  constant INJECT (line 15) | INJECT
  constant ERROR (line 16) | ERROR
  constant NOP (line 19) | NOP OpType = 256
  type OpError (line 23) | type OpError
    method String (line 49) | func (opErr OpError) String() string {
  constant ERROR_INVALID_OP_LENGTH (line 26) | ERROR_INVALID_OP_LENGTH OpError = iota + 1
  constant ERROR_INVALID_FRAME_TYPE (line 27) | ERROR_INVALID_FRAME_TYPE
  constant ERROR_INVALID_FRAME_LENGTH (line 28) | ERROR_INVALID_FRAME_LENGTH
  type FilterResult (line 62) | type FilterResult
    method Error (line 76) | func (r FilterResult) Error() string {
  constant OK (line 65) | OK FilterResult = iota
  constant POLICY_DROP (line 66) | POLICY_DROP
  constant PARSER_ERROR (line 67) | PARSER_ERROR
  constant UNKNOWN_PARSER (line 68) | UNKNOWN_PARSER
  constant UNKNOWN_CONNECTION (line 69) | UNKNOWN_CONNECTION
  constant INVALID_ADDRESS (line 70) | INVALID_ADDRESS
  constant INVALID_INSTANCE (line 71) | INVALID_INSTANCE
  constant UNKNOWN_ERROR (line 72) | UNKNOWN_ERROR

FILE: proxylib/r2d2/r2d2parser.go
  type r2d2Rule (line 40) | type r2d2Rule struct
    method Matches (line 50) | func (rule *r2d2Rule) Matches(data interface{}) bool {
  type r2d2RequestData (line 45) | type r2d2RequestData struct
  function ruleParser (line 78) | func ruleParser(rule *cilium.PortNetworkPolicyRule) []proxylib.L7Network...
  type factory (line 120) | type factory struct
    method Create (line 132) | func (f *factory) Create(connection *proxylib.Connection) interface{} {
  function init (line 122) | func init() {
  type parser (line 128) | type parser struct
    method OnData (line 138) | func (p *parser) OnData(reply, endStream bool, dataArray [][]byte) (pr...

FILE: proxylib/r2d2/r2d2parser_test.go
  type R2d2Suite (line 16) | type R2d2Suite struct
    method TestR2d2OnDataAllowDenyRegex (line 121) | func (s *R2d2Suite) TestR2d2OnDataAllowDenyRegex(t *testing.T) {
  function setUpR2d2Suite (line 22) | func setUpR2d2Suite(tb testing.TB) *R2d2Suite {
  function TestR2d2OnDataIncomplete (line 35) | func TestR2d2OnDataIncomplete(t *testing.T) {
  function TestR2d2OnDataBasicPass (line 42) | func TestR2d2OnDataBasicPass(t *testing.T) {
  function TestR2d2OnDataMultipleReq (line 69) | func TestR2d2OnDataMultipleReq(t *testing.T) {
  function TestR2d2OnDataAllowDenyCmd (line 91) | func TestR2d2OnDataAllowDenyCmd(t *testing.T) {

FILE: proxylib/test/accesslog_server.go
  type AccessLogServer (line 23) | type AccessLogServer struct
    method Close (line 33) | func (s *AccessLogServer) Close() {
    method isClosing (line 46) | func (s *AccessLogServer) isClosing() bool {
    method Clear (line 56) | func (s *AccessLogServer) Clear() (passed, drops int) {
    method accessLogger (line 140) | func (s *AccessLogServer) accessLogger(conn *net.UnixConn) {
  function StartAccessLogServer (line 75) | func StartAccessLogServer(accessLogName string, bufSize int) *AccessLogS...
  function isEOF (line 134) | func isEOF(err error) bool {

FILE: proxylib/test/tmpdir.go
  function init (line 14) | func init() {

FILE: proxylib/testparsers/blockparser.go
  type BlockParserFactory (line 22) | type BlockParserFactory struct
    method Create (line 40) | func (p *BlockParserFactory) Create(connection *Connection) interface{} {
  constant blockParserName (line 27) | blockParserName = "test.blockparser"
  function init (line 30) | func init() {
  type BlockParser (line 35) | type BlockParser struct
    method OnData (line 103) | func (p *BlockParser) OnData(reply, endStream bool, data [][]byte) (Op...
  function getBlock (line 45) | func getBlock(data [][]byte) ([]byte, int, int, error) {

FILE: proxylib/testparsers/headerparser.go
  type HeaderRule (line 26) | type HeaderRule struct
    method Matches (line 33) | func (rule *HeaderRule) Matches(data interface{}) bool {
  function L7HeaderRuleParser (line 59) | func L7HeaderRuleParser(rule *cilium.PortNetworkPolicyRule) []L7NetworkP...
  type HeaderParserFactory (line 87) | type HeaderParserFactory struct
    method Create (line 105) | func (p *HeaderParserFactory) Create(connection *Connection) interface...
  constant parserName (line 92) | parserName = "test.headerparser"
  function init (line 95) | func init() {
  type HeaderParser (line 101) | type HeaderParser struct
    method OnData (line 111) | func (p *HeaderParser) OnData(reply, endStream bool, data [][]byte) (O...

FILE: proxylib/testparsers/lineparser.go
  type LineParserFactory (line 18) | type LineParserFactory struct
    method Create (line 32) | func (p *LineParserFactory) Create(connection *Connection) interface{} {
  function init (line 22) | func init() {
  type LineParser (line 27) | type LineParser struct
    method OnData (line 57) | func (p *LineParser) OnData(reply, endStream bool, data [][]byte) (OpT...
  function getLine (line 37) | func getLine(data [][]byte) ([]byte, bool) {

FILE: proxylib/testparsers/passer.go
  type PasserParserFactory (line 12) | type PasserParserFactory struct
    method Create (line 21) | func (p *PasserParserFactory) Create(connection *Connection) interface...
  function init (line 14) | func init() {
  type PasserParser (line 19) | type PasserParser struct
    method OnData (line 32) | func (p *PasserParser) OnData(reply, endStream bool, data [][]byte) (O...

FILE: proxylib/types.h
  type FilterOpType (line 22) | typedef enum {
  type FilterOpError (line 30) | typedef enum {
  type FilterOp (line 36) | typedef struct {
  type FilterResult (line 41) | typedef enum {

FILE: starter/main.cc
  function trimWhitespace (line 36) | std::string_view trimWhitespace(std::string_view input) {
  function loadArgumentValueFromFile (line 46) | std::string loadArgumentValueFromFile(const char* value_path) {
  function resolveArgumentValue (line 62) | std::string resolveArgumentValue(std::string_view arg_value) {
  function main (line 85) | int main(int argc, char** argv) {

FILE: starter/privileged_service_protocol.cc
  type Envoy (line 20) | namespace Envoy {
    type Cilium (line 21) | namespace Cilium {
      type PrivilegedService (line 22) | namespace PrivilegedService {
        function getCapabilities (line 93) | uint64_t getCapabilities(cap_flag_t kind) {
        function dumpCapabilities (line 118) | size_t dumpCapabilities(cap_flag_t kind, char* buf, size_t buf_siz...
        function initIov (line 157) | static inline struct msghdr initIov(struct iovec iov[2], const voi...
        type iovec (line 176) | struct iovec
        type msghdr (line 177) | struct msghdr
        type cmsghdr (line 179) | struct cmsghdr
        type cmsghdr (line 182) | struct cmsghdr
        type iovec (line 209) | struct iovec
        type msghdr (line 210) | struct msghdr
        type cmsghdr (line 212) | struct cmsghdr
        type cmsghdr (line 224) | struct cmsghdr

FILE: starter/privileged_service_protocol.h
  type cap_flag_t (line 35) | typedef enum {                                             // NOLINT(mod...
  function namespace (line 42) | namespace Envoy {
  function class (line 133) | class Protocol {

FILE: starter/privileged_service_server.cc
  type Envoy (line 21) | namespace Envoy {
    type Cilium (line 22) | namespace Cilium {
      type PrivilegedService (line 23) | namespace PrivilegedService {

FILE: starter/privileged_service_server.h
  function namespace (line 11) | namespace Envoy {

FILE: tests/accesslog_server.cc
  type Envoy (line 16) | namespace Envoy {

FILE: tests/accesslog_server.h
  function namespace (line 15) | namespace Envoy {

FILE: tests/accesslog_test.cc
  type Envoy (line 16) | namespace Envoy {
    type Cilium (line 17) | namespace Cilium {
      class CiliumTest (line 19) | class CiliumTest : public testing::Test {
      function TEST_F (line 24) | TEST_F(CiliumTest, AccessLog) {

FILE: tests/bpf_metadata.cc
  type Envoy (line 39) | namespace Envoy {
    function createHostMap (line 54) | std::shared_ptr<const Cilium::PolicyHostMap>
    function createPolicyMap (line 77) | std::shared_ptr<const Cilium::NetworkPolicyMap>
    function initTestMaps (line 128) | void initTestMaps(Server::Configuration::ListenerFactoryContext& conte...
    type Cilium (line 137) | namespace Cilium {
      type BpfMetadata (line 138) | namespace BpfMetadata {
        function getTestConfig (line 141) | ::cilium::BpfMetadata getTestConfig(const ::cilium::TestBpfMetadat...
    type Server (line 202) | namespace Server {
      type Configuration (line 203) | namespace Configuration {
        class TestBpfMetadataConfigFactory (line 205) | class TestBpfMetadataConfigFactory : public NamedListenerFilterCon...
          method createListenerFilterFactoryFromProto (line 208) | Network::ListenerFilterFactoryCb createListenerFilterFactoryFrom...
          method createEmptyConfigProto (line 227) | ProtobufTypes::MessagePtr createEmptyConfigProto() override {
          method name (line 231) | std::string name() const override { return "test_bpf_metadata"; }

FILE: tests/bpf_metadata.h
  function namespace (line 18) | namespace Envoy {

FILE: tests/bpf_metadata_config_test.cc
  type Envoy (line 48) | namespace Envoy {
    type Cilium (line 49) | namespace Cilium {
      class MetadataConfigTest (line 55) | class MetadataConfigTest : public testing::Test {
        method MetadataConfigTest (line 57) | MetadataConfigTest() : api_(Api::createApiForTest()) {
        method SetUp (line 134) | void SetUp() override {
        method initialize (line 192) | void initialize(const ::cilium::BpfMetadata& config, std::string e...
        method TearDown (line 210) | void TearDown() override {}
      function TEST_F (line 227) | TEST_F(MetadataConfigTest, NpdsConfigSupported) {
      function TEST_F (line 235) | TEST_F(MetadataConfigTest, EmptyConfig) {
      function TEST_F (line 241) | TEST_F(MetadataConfigTest, InvalidL7lbConfig) {
      function TEST_F (line 250) | TEST_F(MetadataConfigTest, InvalidIngressIpv4Address) {
      function TEST_F (line 259) | TEST_F(MetadataConfigTest, InvalidIngressIpv6Address) {
      function TEST_F (line 268) | TEST_F(MetadataConfigTest, EastWestL7LbConfig) {
      function TEST_F (line 278) | TEST_F(MetadataConfigTest, NorthSouthL7LbConfig) {
      function TEST_F (line 288) | TEST_F(MetadataConfigTest, NorthSouthL7LbMetadata) {
      function TEST_F (line 329) | TEST_F(MetadataConfigTest, NorthSouthL7LbIngressEnforcedMetadata) {
      function TEST_F (line 382) | TEST_F(MetadataConfigTest, NorthSouthL7LbPodAndIngressEnforcedMetada...
      function TEST_F (line 470) | TEST_F(MetadataConfigTest, NorthSouthL7LbIngressEnforcedCIDRMetadata) {
      function TEST_F (line 524) | TEST_F(MetadataConfigTest, ExternalUseOriginalSourceL7LbMetadata) {
      function TEST_F (line 539) | TEST_F(MetadataConfigTest, EastWestL7LbMetadata) {
      function TEST_F (line 581) | TEST_F(MetadataConfigTest, EastWestL7LbMetadataNoOriginalSource) {
      function TEST_F (line 619) | TEST_F(MetadataConfigTest, ProxyLibNotConfigured) {
      function TEST_F (line 632) | TEST_F(MetadataConfigTest, ProxyLibConfigured) {
      function TEST_F (line 653) | TEST_F(MetadataConfigTest, RestoreLocalAddress) {

FILE: tests/bpf_metadata_integration_test.cc
  type Envoy (line 30) | namespace Envoy {
    class BpfMetadataIntegrationTest (line 69) | class BpfMetadataIntegrationTest : public BaseIntegrationTest,
      method BpfMetadataIntegrationTest (line 72) | BpfMetadataIntegrationTest()
      method setGrpcServiceHelper (line 87) | void setGrpcServiceHelper(envoy::config::core::v3::GrpcService& grpc...
      method setUpGrpcLds (line 93) | void setUpGrpcLds() {
      method addBpfMetadataListenerFilter (line 106) | void addBpfMetadataListenerFilter(envoy::config::listener::v3::Liste...
      method initialize (line 121) | void initialize() override {
      method createUpstreams (line 152) | void createUpstreams() override {
      method FakeUpstream (line 158) | FakeUpstream& getAdsFakeUpstream() const { return *fake_upstreams_[1...
      method createAdsStream (line 160) | void createAdsStream() {
      method sendCdsResponse (line 169) | void sendCdsResponse(const std::string& version) {
      method sendLdsResponse (line 177) | void sendLdsResponse(const std::vector<envoy::config::listener::v3::...
      method sendLdsResponse (line 189) | void sendLdsResponse(const std::vector<std::string>& listener_configs,
      method sendNpdsResponse (line 200) | void sendNpdsResponse(const std::string& version) {
      method sendNphdsResponse (line 214) | void sendNphdsResponse(const std::string& version) {
      method resetConnections (line 228) | void resetConnections() {
    function TEST_P (line 247) | TEST_P(BpfMetadataIntegrationTest, BpfMetadataWithNpdsAndNpdhsViaAds) {

FILE: tests/cilium_http_integration.cc
  type Envoy (line 24) | namespace Envoy {

FILE: tests/cilium_http_integration.h
  function createEnvoy (line 31) | void createEnvoy() override;
  function virtual (line 38) | virtual std::string testPolicyFmt() PURE;

FILE: tests/cilium_http_integration_test.cc
  type Envoy (line 38) | namespace Envoy {
    class CiliumIntegrationTest (line 293) | class CiliumIntegrationTest : public CiliumHttpIntegrationTest {
      method CiliumIntegrationTest (line 295) | CiliumIntegrationTest()
      method CiliumIntegrationTest (line 299) | CiliumIntegrationTest(const std::string& config) : CiliumHttpIntegra...
      method testPolicyFmt (line 301) | std::string testPolicyFmt() override {
      method testSecrets (line 305) | std::vector<std::pair<std::string, std::string>> testSecrets() overr...
      method initialize (line 311) | void initialize() override {
      method denied (line 319) | void denied(Http::TestRequestHeaderMapImpl&& headers) {
      method deniedL3 (line 348) | void deniedL3(Http::TestRequestHeaderMapImpl&&) {
      method IntegrationCodecClientPtr (line 358) | IntegrationCodecClientPtr makeL3DeniedHttpConnection() {
      method accepted (line 365) | void accepted(Http::TestRequestHeaderMapImpl&& headers) {
    class HostMapTest (line 401) | class HostMapTest : public CiliumHttpIntegrationTest {
      method HostMapTest (line 403) | HostMapTest()
      method testPolicyFmt (line 408) | std::string testPolicyFmt() override { return "version_info: \"0\""; }
      method invalidHostMap (line 410) | void invalidHostMap(const std::string& config, const char* exmsg) {
    function TEST_P (line 435) | TEST_P(HostMapTest, HostMapValid) {
    function TEST_P (line 486) | TEST_P(HostMapTest, HostMapInvalidNonCIDRBits) {
    function TEST_P (line 506) | TEST_P(HostMapTest, HostMapInvalidPrefixLengths) {
    function TEST_P (line 527) | TEST_P(HostMapTest, HostMapInvalidPrefixLengths2) {
    function TEST_P (line 548) | TEST_P(HostMapTest, HostMapInvalidPrefixLengths3) {
    function TEST_P (line 569) | TEST_P(HostMapTest, HostMapDuplicateEntry) {
    function TEST_P (line 591) | TEST_P(HostMapTest, HostMapDuplicateEntry2) {
    function TEST_P (line 619) | TEST_P(HostMapTest, HostMapInvalidAddress) {
    function TEST_P (line 641) | TEST_P(HostMapTest, HostMapInvalidAddress2) {
    function TEST_P (line 663) | TEST_P(HostMapTest, HostMapInvalidDefaults) {
    function TEST_P (line 683) | TEST_P(CiliumIntegrationTest, DeniedPathPrefix) {
    function TEST_P (line 693) | TEST_P(CiliumIntegrationTest, AllowedPathPrefix) {
    function TEST_P (line 708) | TEST_P(CiliumIntegrationTest, AllowedPathPrefixWrongHeader) {
    function TEST_P (line 729) | TEST_P(CiliumIntegrationTest, MultipleRequests) {
    function TEST_P (line 765) | TEST_P(CiliumIntegrationTest, AllowedPathRegex) {
    function TEST_P (line 775) | TEST_P(CiliumIntegrationTest, AllowedPathRegexDeleteHeader) {
    function TEST_P (line 790) | TEST_P(CiliumIntegrationTest, AllowedHostRegexDeleteHeader) {
    function TEST_P (line 806) | TEST_P(CiliumIntegrationTest, DeniedPath) {
    function TEST_P (line 816) | TEST_P(CiliumIntegrationTest, AllowedHostString) {
    function TEST_P (line 829) | TEST_P(CiliumIntegrationTest, AllowedReplaced) {
    function TEST_P (line 844) | TEST_P(CiliumIntegrationTest, Denied42) {
    function TEST_P (line 862) | TEST_P(CiliumIntegrationTest, AllowedReplacedAndDeleted) {
    function TEST_P (line 881) | TEST_P(CiliumIntegrationTest, AllowedHostRegex) {
    function TEST_P (line 891) | TEST_P(CiliumIntegrationTest, DeniedMethod) {
    function TEST_P (line 901) | TEST_P(CiliumIntegrationTest, AcceptedMethod) {
    function TEST_P (line 911) | TEST_P(CiliumIntegrationTest, L3DeniedPath) {
    class CiliumIntegrationPortTest (line 921) | class CiliumIntegrationPortTest : public CiliumIntegrationTest {
      method CiliumIntegrationPortTest (line 923) | CiliumIntegrationPortTest() = default;
      method testPolicyFmt (line 925) | std::string testPolicyFmt() override {
    function TEST_P (line 968) | TEST_P(CiliumIntegrationPortTest, DuplicatePortAllowedPath) {
    function TEST_P (line 972) | TEST_P(CiliumIntegrationPortTest, DuplicatePortAllowedPath2) {
    class CiliumIntegrationPortRangeTest (line 976) | class CiliumIntegrationPortRangeTest : public CiliumIntegrationTest {
      method CiliumIntegrationPortRangeTest (line 978) | CiliumIntegrationPortRangeTest() = default;
      method testPolicyFmt (line 980) | std::string testPolicyFmt() override {
    function TEST_P (line 999) | TEST_P(CiliumIntegrationPortRangeTest, InvalidRange) {
    class CiliumIntegrationEgressTest (line 1009) | class CiliumIntegrationEgressTest : public CiliumIntegrationTest {
      method CiliumIntegrationEgressTest (line 1011) | CiliumIntegrationEgressTest()
    function TEST_P (line 1030) | TEST_P(CiliumIntegrationEgressTest, DeniedPathPrefix) {
    function TEST_P (line 1034) | TEST_P(CiliumIntegrationEgressTest, AllowedPathPrefix) {
    function TEST_P (line 1038) | TEST_P(CiliumIntegrationEgressTest, AllowedPathRegex) {
    function TEST_P (line 1042) | TEST_P(CiliumIntegrationEgressTest, DeniedPath) {
    function TEST_P (line 1046) | TEST_P(CiliumIntegrationEgressTest, AllowedHostString) {
    function TEST_P (line 1050) | TEST_P(CiliumIntegrationEgressTest, AllowedHostRegex) {
    function TEST_P (line 1054) | TEST_P(CiliumIntegrationEgressTest, DeniedMethod) {
    function TEST_P (line 1058) | TEST_P(CiliumIntegrationEgressTest, AcceptedMethod) {
    function TEST_P (line 1062) | TEST_P(CiliumIntegrationEgressTest, L3DeniedPath) {
    class CiliumIntegrationEgressL34Test (line 1080) | class CiliumIntegrationEgressL34Test : public CiliumIntegrationEgressT...
      method CiliumIntegrationEgressL34Test (line 1082) | CiliumIntegrationEgressL34Test() = default;
      method testPolicyFmt (line 1084) | std::string testPolicyFmt() override {
    function TEST_P (line 1092) | TEST_P(CiliumIntegrationEgressL34Test, DeniedPathPrefix) {
    function TEST_P (line 1096) | TEST_P(CiliumIntegrationEgressL34Test, DeniedPathPrefix2) {
    class SDSIntegrationTest (line 1147) | class SDSIntegrationTest : public CiliumIntegrationTest {
      method SDSIntegrationTest (line 1149) | SDSIntegrationTest() {
      method testPolicyFmt2 (line 1169) | std::string testPolicyFmt2() {
      method testPolicyFmt (line 1173) | std::string testPolicyFmt() override {
      method testSecrets (line 1177) | std::vector<std::pair<std::string, std::string>> testSecrets() overr...
    function TEST_P (line 1185) | TEST_P(SDSIntegrationTest, TestDeniedL3) {
    function TEST_P (line 1202) | TEST_P(SDSIntegrationTest, TestDeniedL3SpoofedXFF) {
    function TEST_P (line 1223) | TEST_P(SDSIntegrationTest, TestMissingSDSSecretOnUpdate) {

FILE: tests/cilium_http_upstream_integration_test.cc
  type Envoy (line 27) | namespace Envoy {
    class CiliumIntegrationTest (line 320) | class CiliumIntegrationTest : public CiliumHttpIntegrationTest {
      method CiliumIntegrationTest (line 322) | CiliumIntegrationTest()
      method CiliumIntegrationTest (line 336) | CiliumIntegrationTest(const std::string& config) : CiliumHttpIntegra...
      method testPolicyFmt (line 338) | std::string testPolicyFmt() override {
      method testSecrets (line 342) | std::vector<std::pair<std::string, std::string>> testSecrets() overr...
      method initialize (line 348) | void initialize() override {
      method denied (line 356) | void denied(Http::TestRequestHeaderMapImpl&& headers) {
      method accepted (line 385) | void accepted(Http::TestRequestHeaderMapImpl&& headers) {
    function TEST_P (line 421) | TEST_P(CiliumIntegrationTest, DeniedPathPrefix) {
    function TEST_P (line 431) | TEST_P(CiliumIntegrationTest, AllowedPathPrefix) {
    function TEST_P (line 446) | TEST_P(CiliumIntegrationTest, AllowedPathPrefixWrongHeader) {
    function TEST_P (line 467) | TEST_P(CiliumIntegrationTest, MultipleRequests) {
    function TEST_P (line 503) | TEST_P(CiliumIntegrationTest, AllowedPathRegex) {
    function TEST_P (line 513) | TEST_P(CiliumIntegrationTest, AllowedPathRegexDeleteHeader) {
    function TEST_P (line 528) | TEST_P(CiliumIntegrationTest, AllowedHostRegexDeleteHeader) {
    function TEST_P (line 544) | TEST_P(CiliumIntegrationTest, DeniedPath) {
    function TEST_P (line 554) | TEST_P(CiliumIntegrationTest, AllowedHostString) {
    function TEST_P (line 567) | TEST_P(CiliumIntegrationTest, AllowedReplaced) {
    function TEST_P (line 582) | TEST_P(CiliumIntegrationTest, Denied42) {
    function TEST_P (line 600) | TEST_P(CiliumIntegrationTest, AllowedReplacedAndDeleted) {
    function TEST_P (line 619) | TEST_P(CiliumIntegrationTest, AllowedHostRegex) {
    function TEST_P (line 629) | TEST_P(CiliumIntegrationTest, DeniedMethod) {
    function TEST_P (line 639) | TEST_P(CiliumIntegrationTest, AcceptedMethod) {
    function TEST_P (line 649) | TEST_P(CiliumIntegrationTest, L3DeniedPath) {
    class CiliumIntegrationEgressTest (line 659) | class CiliumIntegrationEgressTest : public CiliumIntegrationTest {
      method CiliumIntegrationEgressTest (line 661) | CiliumIntegrationEgressTest()
    function TEST_P (line 680) | TEST_P(CiliumIntegrationEgressTest, DeniedPathPrefix) {
    function TEST_P (line 684) | TEST_P(CiliumIntegrationEgressTest, AllowedPathPrefix) {
    function TEST_P (line 688) | TEST_P(CiliumIntegrationEgressTest, AllowedPathRegex) {
    function TEST_P (line 692) | TEST_P(CiliumIntegrationEgressTest, DeniedPath) {
    function TEST_P (line 696) | TEST_P(CiliumIntegrationEgressTest, AllowedHostString) {
    function TEST_P (line 700) | TEST_P(CiliumIntegrationEgressTest, AllowedHostRegex) {
    function TEST_P (line 704) | TEST_P(CiliumIntegrationEgressTest, DeniedMethod) {
    function TEST_P (line 708) | TEST_P(CiliumIntegrationEgressTest, AcceptedMethod) {
    function TEST_P (line 712) | TEST_P(CiliumIntegrationEgressTest, L3DeniedPath) {
    class CiliumIntegrationEgressL34Test (line 729) | class CiliumIntegrationEgressL34Test : public CiliumIntegrationEgressT...
      method CiliumIntegrationEgressL34Test (line 731) | CiliumIntegrationEgressL34Test() = default;
      method testPolicyFmt (line 733) | std::string testPolicyFmt() override {
    function TEST_P (line 741) | TEST_P(CiliumIntegrationEgressL34Test, DeniedPathPrefix) {
    function TEST_P (line 745) | TEST_P(CiliumIntegrationEgressL34Test, DeniedPathPrefix2) {
    class SDSIntegrationTest (line 796) | class SDSIntegrationTest : public CiliumIntegrationTest {
      method SDSIntegrationTest (line 798) | SDSIntegrationTest() {
      method testPolicyFmt2 (line 818) | std::string testPolicyFmt2() {
      method testPolicyFmt (line 822) | std::string testPolicyFmt() override {
      method testSecrets (line 826) | std::vector<std::pair<std::string, std::string>> testSecrets() overr...
    function TEST_P (line 834) | TEST_P(SDSIntegrationTest, TestDeniedL3) {
    function TEST_P (line 849) | TEST_P(SDSIntegrationTest, TestDeniedL3SpoofedXFF) {
    function TEST_P (line 867) | TEST_P(SDSIntegrationTest, TestMissingSDSSecretOnUpdate) {

FILE: tests/cilium_network_policy_test.cc
  type Envoy (line 39) | namespace Envoy {
    type Cilium (line 40) | namespace Cilium {
      class CiliumNetworkPolicyTest (line 73) | class CiliumNetworkPolicyTest : public ::testing::Test {
        method CiliumNetworkPolicyTest (line 75) | CiliumNetworkPolicyTest() {
        method SetUp (line 82) | void SetUp() override {
        method TearDown (line 98) | void TearDown() override {
        method updateFromYaml (line 103) | std::string updateFromYaml(const std::string& config) {
        method validate (line 118) | testing::AssertionResult validate(const std::string& pod_ip, const...
        method allowed (line 129) | testing::AssertionResult allowed(bool ingress, const std::string& ...
        method ingressAllowed (line 141) | testing::AssertionResult ingressAllowed(const std::string& pod_ip,...
        method egressAllowed (line 146) | testing::AssertionResult egressAllowed(const std::string& pod_ip, ...
        method tlsAllowed (line 152) | testing::AssertionResult tlsAllowed(bool ingress, const std::strin...
        method tlsIngressAllowed (line 221) | testing::AssertionResult tlsIngressAllowed(const std::string& pod_...
        method tlsEgressAllowed (line 227) | testing::AssertionResult tlsEgressAllowed(const std::string& pod_i...
        method updatesRejectedStatName (line 233) | std::string updatesRejectedStatName() {
      function TEST_F (line 244) | TEST_F(CiliumNetworkPolicyTest, UpdatesRejectedStatName) {
      function TEST_F (line 248) | TEST_F(CiliumNetworkPolicyTest, EmptyPolicyUpdate) {
      function TEST_F (line 253) | TEST_F(CiliumNetworkPolicyTest, SimplePolicyUpdate) {
      function TEST_F (line 261) | TEST_F(CiliumNetworkPolicyTest, OverlappingPortRange) {
      function TEST_F (line 406) | TEST_F(CiliumNetworkPolicyTest, OverlappingPortRanges) {
      function TEST_F (line 516) | TEST_F(CiliumNetworkPolicyTest, DuplicatePorts) {
      function TEST_F (line 553) | TEST_F(CiliumNetworkPolicyTest, DuplicatePortRange) {
      function TEST_F (line 597) | TEST_F(CiliumNetworkPolicyTest, InvalidPortRange) {
      function TEST_F (line 624) | TEST_F(CiliumNetworkPolicyTest, InvalidWildcardPortRange) {
      function TEST_F (line 652) | TEST_F(CiliumNetworkPolicyTest, ZeroPortRange) {
      function TEST_F (line 700) | TEST_F(CiliumNetworkPolicyTest, HttpPolicyUpdate) {
      function TEST_F (line 1067) | TEST_F(CiliumNetworkPolicyTest, Precedence) {
      function TEST_F (line 2128) | TEST_F(CiliumNetworkPolicyTest, HttpOverlappingPortRanges) {
      function TEST_F (line 2367) | TEST_F(CiliumNetworkPolicyTest, TcpPolicyUpdate) {
      function TEST_F (line 2441) | TEST_F(CiliumNetworkPolicyTest, PortRanges) {
      function TEST_F (line 2609) | TEST_F(CiliumNetworkPolicyTest, HttpPolicyUpdateToMissingSDS) {
      function TEST_F (line 2682) | TEST_F(CiliumNetworkPolicyTest, TlsPolicyUpdate) {
      function TEST_F (line 3105) | TEST_F(CiliumNetworkPolicyTest, EmptyRulesAllow) {
      function TEST_F (line 3144) | TEST_F(CiliumNetworkPolicyTest, SNIPatternMatching) {
      function TEST_F (line 3279) | TEST_F(CiliumNetworkPolicyTest, OrderedRules) {

FILE: tests/cilium_tcp_integration.cc
  type Envoy (line 22) | namespace Envoy {

FILE: tests/cilium_tcp_integration.h
  function namespace (line 11) | namespace Envoy {

FILE: tests/cilium_tcp_integration_test.cc
  type Envoy (line 20) | namespace Envoy {
    class CiliumTcpProxyIntegrationTest (line 78) | class CiliumTcpProxyIntegrationTest : public CiliumTcpIntegrationTest {
      method CiliumTcpProxyIntegrationTest (line 80) | CiliumTcpProxyIntegrationTest()
    function TEST_P (line 91) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamWritesFirs...
    function TEST_P (line 112) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamDisconnect) {
    function TEST_P (line 131) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyDownstreamDisconne...
    function TEST_P (line 149) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyLargeWrite) {
    function TEST_P (line 182) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyDownstreamFlush) {
    function TEST_P (line 222) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamFlush) {
    function TEST_P (line 256) | TEST_P(CiliumTcpProxyIntegrationTest, CiliumTcpProxyUpstreamFlushEnvoy...
    class CiliumGoLinetesterIntegrationTest (line 361) | class CiliumGoLinetesterIntegrationTest : public CiliumTcpIntegrationT...
      method CiliumGoLinetesterIntegrationTest (line 363) | CiliumGoLinetesterIntegrationTest()
      method testPolicyFmt (line 368) | std::string testPolicyFmt() override {
    function noMatch (line 377) | static FakeRawConnection::ValidatorFunction noMatch(const char* data_t...
    function TEST_P (line 384) | TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserUpstreamWr...
    function TEST_P (line 405) | TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserPartialLin...
    function TEST_P (line 429) | TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInject) {
    function TEST_P (line 453) | TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInjectPart...
    function TEST_P (line 479) | TEST_P(CiliumGoLinetesterIntegrationTest, CiliumGoLineParserInjectPart...
    class CiliumGoBlocktesterIntegrationTest (line 591) | class CiliumGoBlocktesterIntegrationTest : public CiliumTcpIntegration...
      method CiliumGoBlocktesterIntegrationTest (line 593) | CiliumGoBlocktesterIntegrationTest()
      method testPolicyFmt (line 598) | std::string testPolicyFmt() override {
    function TEST_P (line 607) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserUpstream...
    function TEST_P (line 628) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserPartialB...
    function TEST_P (line 650) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInject) {
    function TEST_P (line 676) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectPa...
    function TEST_P (line 702) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectPa...
    function TEST_P (line 738) | TEST_P(CiliumGoBlocktesterIntegrationTest, CiliumGoBlockParserInjectBu...

FILE: tests/cilium_tls_http_integration_test.cc
  type Envoy (line 30) | namespace Envoy {
    type Cilium (line 31) | namespace Cilium {
      class CiliumHttpTLSIntegrationTest (line 230) | class CiliumHttpTLSIntegrationTest : public CiliumHttpIntegrationTest {
        method CiliumHttpTLSIntegrationTest (line 232) | CiliumHttpTLSIntegrationTest(const std::string& config) : CiliumHt...
        method initialize (line 235) | void initialize() override {
        method createUpstreams (line 250) | void createUpstreams() override {
        method createUpstreamSslContext (line 264) | Network::DownstreamTransportSocketFactoryPtr createUpstreamSslCont...
        method testPolicyFmt (line 289) | std::string testPolicyFmt() override {
        method testSecrets (line 293) | std::vector<std::pair<std::string, std::string>> testSecrets() ove...
        method denied (line 300) | void denied(Http::TestRequestHeaderMapImpl&& headers) {
        method failed (line 310) | void failed(Http::TestRequestHeaderMapImpl&& headers) {
        method accepted (line 320) | void accepted(Http::TestRequestHeaderMapImpl&& headers) {
        method acceptedWithSslGaugeCheck (line 331) | void acceptedWithSslGaugeCheck(Http::TestRequestHeaderMapImpl&& he...
      class CiliumTLSHttpIntegrationTest (line 355) | class CiliumTLSHttpIntegrationTest : public CiliumHttpTLSIntegration...
        method CiliumTLSHttpIntegrationTest (line 357) | CiliumTLSHttpIntegrationTest()
      function TEST_P (line 366) | TEST_P(CiliumTLSHttpIntegrationTest, DeniedPathPrefix) {
      function TEST_P (line 370) | TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathPrefix) {
      function TEST_P (line 374) | TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathPrefixTracksSslActiv...
      function TEST_P (line 379) | TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathPrefixStrippedHeader) {
      function TEST_P (line 386) | TEST_P(CiliumTLSHttpIntegrationTest, AllowedPathRegex) {
      function TEST_P (line 390) | TEST_P(CiliumTLSHttpIntegrationTest, DeniedPath) {
      function TEST_P (line 394) | TEST_P(CiliumTLSHttpIntegrationTest, DeniedMethod) {
      function TEST_P (line 398) | TEST_P(CiliumTLSHttpIntegrationTest, AcceptedMethod) {
      function TEST_P (line 402) | TEST_P(CiliumTLSHttpIntegrationTest, L3DeniedPath) {

FILE: tests/cilium_tls_integration.cc
  type Envoy (line 24) | namespace Envoy {
    type Cilium (line 25) | namespace Cilium {
      function createClientSslTransportSocketFactory (line 27) | Network::UpstreamTransportSocketFactoryPtr

FILE: tests/cilium_tls_integration.h
  function namespace (line 7) | namespace Envoy {

FILE: tests/cilium_tls_tcp_integration_test.cc
  type Envoy (line 42) | namespace Envoy {
    type Cilium (line 43) | namespace Cilium {
      class CiliumTLSIntegrationTest (line 105) | class CiliumTLSIntegrationTest : public CiliumTcpIntegrationTest {
        method CiliumTLSIntegrationTest (line 107) | CiliumTLSIntegrationTest(const std::string& config) : CiliumTcpInt...
        method initialize (line 115) | void initialize() override {
        method AssertionResult (line 121) | AssertionResult
        method createUpstreams (line 148) | void createUpstreams() override {
        method createUpstreamSslContext (line 155) | Network::DownstreamTransportSocketFactoryPtr createUpstreamSslCont...
        method setupConnections (line 160) | void setupConnections() {
        method sendAndReceiveTlsData (line 205) | void sendAndReceiveTlsData(const std::string& data_to_send_upstream,
        method teardownConnections (line 246) | void teardownConnections() {
      class CiliumTLSProxyIntegrationTest (line 292) | class CiliumTLSProxyIntegrationTest : public CiliumTLSIntegrationTest {
        method CiliumTLSProxyIntegrationTest (line 294) | CiliumTLSProxyIntegrationTest()
        method testPolicyFmt (line 299) | std::string testPolicyFmt() override {
      function TEST_P (line 309) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamWritesFi...
      function TEST_P (line 333) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamDisconne...
      function TEST_P (line 355) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTcpProxyDownstreamDiscon...
      function TEST_P (line 376) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyLargeWrite) {
      function TEST_P (line 413) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyDownstreamFlush) {
      function TEST_P (line 459) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamFlush) {
      function TEST_P (line 499) | TEST_P(CiliumTLSProxyIntegrationTest, CiliumTLSProxyUpstreamFlushEnv...
      class CiliumDownstreamTLSIntegrationTest (line 611) | class CiliumDownstreamTLSIntegrationTest : public CiliumTLSIntegrati...
        method CiliumDownstreamTLSIntegrationTest (line 613) | CiliumDownstreamTLSIntegrationTest()
        method testPolicyFmt (line 619) | std::string testPolicyFmt() override {
      function TEST_P (line 628) | TEST_P(CiliumDownstreamTLSIntegrationTest, SendTlsToTlsListener) {
      function TEST_P (line 633) | TEST_P(CiliumDownstreamTLSIntegrationTest, LargeBidirectionalTlsWrit...
      function TEST_P (line 640) | TEST_P(CiliumDownstreamTLSIntegrationTest, DownstreamHalfClose) {
      function TEST_P (line 672) | TEST_P(CiliumDownstreamTLSIntegrationTest, UpstreamHalfClose) {

FILE: tests/cilium_websocket_codec_integration_test.cc
  type Envoy (line 17) | namespace Envoy {
    class CiliumWebSocketIntegrationTest (line 88) | class CiliumWebSocketIntegrationTest : public CiliumTcpIntegrationTest {
      method CiliumWebSocketIntegrationTest (line 90) | CiliumWebSocketIntegrationTest()
      method testPolicyFmt (line 95) | std::string testPolicyFmt() override {
    function TEST_P (line 120) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamWritesFi...
    function TEST_P (line 145) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamDisconne...
    function TEST_P (line 169) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketDownstreamDiscon...
    function TEST_P (line 193) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketLargeWrite) {
    function TEST_P (line 236) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketDownstreamFlush) {
    function TEST_P (line 279) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamFlush) {
    function TEST_P (line 319) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamFlushEnv...

FILE: tests/cilium_websocket_decap_integration_test.cc
  type Envoy (line 24) | namespace Envoy {
    class CiliumWebSocketIntegrationTest (line 81) | class CiliumWebSocketIntegrationTest : public CiliumHttpIntegrationTest {
      method CiliumWebSocketIntegrationTest (line 83) | CiliumWebSocketIntegrationTest()
      method testPolicyFmt (line 98) | std::string testPolicyFmt() override {
      method denied (line 117) | void denied(Http::TestRequestHeaderMapImpl&& headers) {
    function TEST_P (line 131) | TEST_P(CiliumWebSocketIntegrationTest, DeniedNonWebSocket) {
    function TEST_P (line 136) | TEST_P(CiliumWebSocketIntegrationTest, AcceptedWebSocket) {

FILE: tests/cilium_websocket_encap_integration_test.cc
  type Envoy (line 23) | namespace Envoy {
    class CiliumWebSocketIntegrationTest (line 93) | class CiliumWebSocketIntegrationTest : public CiliumTcpIntegrationTest {
      method CiliumWebSocketIntegrationTest (line 95) | CiliumWebSocketIntegrationTest()
      method unmaskData (line 99) | size_t unmaskData(void* void_frame, size_t len, uint8_t opcode = OPC...
    function normalizeXRequestId (line 161) | size_t normalizeXRequestId(std::string& headers) {
    function TEST_P (line 178) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketHandshakeNonHTTP...
    function TEST_P (line 210) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketHandshakeInvalid...
    function TEST_P (line 238) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketHandshakeSuccess) {
    function TEST_P (line 278) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketHandshakeNoData) {
    function TEST_P (line 308) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketDownstreamDiscon...
    function TEST_P (line 359) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketLargeWrite) {
    function TEST_P (line 419) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketDownstreamFlush) {
    function TEST_P (line 474) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamFlush) {
    function TEST_P (line 521) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamFlushEnv...

FILE: tests/cilium_websocket_policy_integration_test.cc
  type Envoy (line 21) | namespace Envoy {
    class CiliumWebSocketIntegrationTest (line 172) | class CiliumWebSocketIntegrationTest : public CiliumTcpIntegrationTest {
      method CiliumWebSocketIntegrationTest (line 174) | CiliumWebSocketIntegrationTest()
      method initialize (line 177) | void initialize() override {
      type ReservedInternalListenerPorts (line 182) | struct ReservedInternalListenerPorts {
        method ReservedInternalListenerPorts (line 183) | ReservedInternalListenerPorts(uint32_t first_port, uint32_t second...
        method release (line 188) | void release() {
      method ReservedInternalListenerPorts (line 199) | static ReservedInternalListenerPorts
        method ReservedInternalListenerPorts (line 183) | ReservedInternalListenerPorts(uint32_t first_port, uint32_t second...
        method release (line 188) | void release() {
      method makeConfig (line 221) | static std::string makeConfig(Network::Address::IpVersion version,
      method testPolicyFmt (line 228) | std::string testPolicyFmt() override {
      method CiliumWebSocketIntegrationTest (line 248) | explicit CiliumWebSocketIntegrationTest(ReservedInternalListenerPort...
    function TEST_P (line 260) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamWritesFi...
    function TEST_P (line 289) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketUpstreamDisconne...
    function TEST_P (line 311) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketDownstreamDiscon...
    function TEST_P (line 333) | TEST_P(CiliumWebSocketIntegrationTest, CiliumWebSocketLargeWrite) {

FILE: tests/health_check_sink_server.cc
  type Envoy (line 17) | namespace Envoy {

FILE: tests/health_check_sink_server.h
  function namespace (line 17) | namespace Envoy {

FILE: tests/health_check_sink_test.cc
  type Envoy (line 22) | namespace Envoy {
    type Cilium (line 23) | namespace Cilium {
      function TEST (line 25) | TEST(HealthCheckEventPipeSinkFactory, createEmptyHealthCheckEventSin...
      function TEST (line 35) | TEST(HealthCheckEventPipeSinkFactory, createHealthCheckEventSink) {
      function TEST (line 50) | TEST(HealthCheckEventPipeSink, logTest) {

FILE: tests/uds_server.cc
  type Envoy (line 20) | namespace Envoy {
    type sockaddr_un (line 94) | struct sockaddr_un

FILE: tests/uds_server.h
  function namespace (line 13) | namespace Envoy {

FILE: tools/gen_compilation_database.py
  function generate_compilation_database (line 12) | def generate_compilation_database(args):
  function is_header (line 49) | def is_header(filename):
  function is_compile_target (line 56) | def is_compile_target(target, args):
  function modify_compile_command (line 79) | def modify_compile_command(target, args):
  function fix_compilation_database (line 110) | def fix_compilation_database(args, db):

FILE: tools/stack_decode.py
  function decode_stacktrace_log (line 28) | def decode_stacktrace_log(object_file, input_source, address_offset=0):
  function run_addr2line (line 79) | def run_addr2line(obj_file, addr_to_resolve):
  function trim_proc_cwd (line 87) | def trim_proc_cwd(file_and_line_number):
  function run_pmap (line 95) | def run_pmap(pid):
  function find_address_offset (line 102) | def find_address_offset(pid):
  function ignore_decoding_errors (line 117) | def ignore_decoding_errors(io_wrapper):

FILE: vendor/cel.dev/expr/checked.pb.go
  constant _ (line 21) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 23) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type Type_PrimitiveType (line 26) | type Type_PrimitiveType
    method Enum (line 60) | func (x Type_PrimitiveType) Enum() *Type_PrimitiveType {
    method String (line 66) | func (x Type_PrimitiveType) String() string {
    method Descriptor (line 70) | func (Type_PrimitiveType) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 74) | func (Type_PrimitiveType) Type() protoreflect.EnumType {
    method Number (line 78) | func (x Type_PrimitiveType) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 83) | func (Type_PrimitiveType) EnumDescriptor() ([]byte, []int) {
  constant Type_PRIMITIVE_TYPE_UNSPECIFIED (line 29) | Type_PRIMITIVE_TYPE_UNSPECIFIED Type_PrimitiveType = 0
  constant Type_BOOL (line 30) | Type_BOOL                       Type_PrimitiveType = 1
  constant Type_INT64 (line 31) | Type_INT64                      Type_PrimitiveType = 2
  constant Type_UINT64 (line 32) | Type_UINT64                     Type_PrimitiveType = 3
  constant Type_DOUBLE (line 33) | Type_DOUBLE                     Type_PrimitiveType = 4
  constant Type_STRING (line 34) | Type_STRING                     Type_PrimitiveType = 5
  constant Type_BYTES (line 35) | Type_BYTES                      Type_PrimitiveType = 6
  type Type_WellKnownType (line 87) | type Type_WellKnownType
    method Enum (line 112) | func (x Type_WellKnownType) Enum() *Type_WellKnownType {
    method String (line 118) | func (x Type_WellKnownType) String() string {
    method Descriptor (line 122) | func (Type_WellKnownType) Descriptor() protoreflect.EnumDescriptor {
    method Type (line 126) | func (Type_WellKnownType) Type() protoreflect.EnumType {
    method Number (line 130) | func (x Type_WellKnownType) Number() protoreflect.EnumNumber {
    method EnumDescriptor (line 135) | func (Type_WellKnownType) EnumDescriptor() ([]byte, []int) {
  constant Type_WELL_KNOWN_TYPE_UNSPECIFIED (line 90) | Type_WELL_KNOWN_TYPE_UNSPECIFIED Type_WellKnownType = 0
  constant Type_ANY (line 91) | Type_ANY                         Type_WellKnownType = 1
  constant Type_TIMESTAMP (line 92) | Type_TIMESTAMP                   Type_WellKnownType = 2
  constant Type_DURATION (line 93) | Type_DURATION                    Type_WellKnownType = 3
  type CheckedExpr (line 139) | type CheckedExpr struct
    method Reset (line 150) | func (x *CheckedExpr) Reset() {
    method String (line 157) | func (x *CheckedExpr) String() string {
    method ProtoMessage (line 161) | func (*CheckedExpr) ProtoMessage() {}
    method ProtoReflect (line 163) | func (x *CheckedExpr) ProtoReflect() protoreflect.Message {
    method Descriptor (line 176) | func (*CheckedExpr) Descriptor() ([]byte, []int) {
    method GetReferenceMap (line 180) | func (x *CheckedExpr) GetReferenceMap() map[int64]*Reference {
    method GetTypeMap (line 187) | func (x *CheckedExpr) GetTypeMap() map[int64]*Type {
    method GetSourceInfo (line 194) | func (x *CheckedExpr) GetSourceInfo() *SourceInfo {
    method GetExprVersion (line 201) | func (x *CheckedExpr) GetExprVersion() string {
    method GetExpr (line 208) | func (x *CheckedExpr) GetExpr() *Expr {
  type Type (line 215) | type Type struct
    method Reset (line 237) | func (x *Type) Reset() {
    method String (line 244) | func (x *Type) String() string {
    method ProtoMessage (line 248) | func (*Type) ProtoMessage() {}
    method ProtoReflect (line 250) | func (x *Type) ProtoReflect() protoreflect.Message {
    method Descriptor (line 263) | func (*Type) Descriptor() ([]byte, []int) {
    method GetTypeKind (line 267) | func (x *Type) GetTypeKind() isType_TypeKind {
    method GetDyn (line 274) | func (x *Type) GetDyn() *emptypb.Empty {
    method GetNull (line 283) | func (x *Type) GetNull() structpb.NullValue {
    method GetPrimitive (line 292) | func (x *Type) GetPrimitive() Type_PrimitiveType {
    method GetWrapper (line 301) | func (x *Type) GetWrapper() Type_PrimitiveType {
    method GetWellKnown (line 310) | func (x *Type) GetWellKnown() Type_WellKnownType {
    method GetListType (line 319) | func (x *Type) GetListType() *Type_ListType {
    method GetMapType (line 328) | func (x *Type) GetMapType() *Type_MapType {
    method GetFunction (line 337) | func (x *Type) GetFunction() *Type_FunctionType {
    method GetMessageType (line 346) | func (x *Type) GetMessageType() string {
    method GetTypeParam (line 355) | func (x *Type) GetTypeParam() string {
    method GetType (line 364) | func (x *Type) GetType() *Type {
    method GetError (line 373) | func (x *Type) GetError() *emptypb.Empty {
    method GetAbstractType (line 382) | func (x *Type) GetAbstractType() *Type_AbstractType {
  type isType_TypeKind (line 391) | type isType_TypeKind interface
  type Type_Dyn (line 395) | type Type_Dyn struct
    method isType_TypeKind (line 447) | func (*Type_Dyn) isType_TypeKind() {}
  type Type_Null (line 399) | type Type_Null struct
    method isType_TypeKind (line 449) | func (*Type_Null) isType_TypeKind() {}
  type Type_Primitive (line 403) | type Type_Primitive struct
    method isType_TypeKind (line 451) | func (*Type_Primitive) isType_TypeKind() {}
  type Type_Wrapper (line 407) | type Type_Wrapper struct
    method isType_TypeKind (line 453) | func (*Type_Wrapper) isType_TypeKind() {}
  type Type_WellKnown (line 411) | type Type_WellKnown struct
    method isType_TypeKind (line 455) | func (*Type_WellKnown) isType_TypeKind() {}
  type Type_ListType_ (line 415) | type Type_ListType_ struct
    method isType_TypeKind (line 457) | func (*Type_ListType_) isType_TypeKind() {}
  type Type_MapType_ (line 419) | type Type_MapType_ struct
    method isType_TypeKind (line 459) | func (*Type_MapType_) isType_TypeKind() {}
  type Type_Function (line 423) | type Type_Function struct
    method isType_TypeKind (line 461) | func (*Type_Function) isType_TypeKind() {}
  type Type_MessageType (line 427) | type Type_MessageType struct
    method isType_TypeKind (line 463) | func (*Type_MessageType) isType_TypeKind() {}
  type Type_TypeParam (line 431) | type Type_TypeParam struct
    method isType_TypeKind (line 465) | func (*Type_TypeParam) isType_TypeKind() {}
  type Type_Type (line 435) | type Type_Type struct
    method isType_TypeKind (line 467) | func (*Type_Type) isType_TypeKind() {}
  type Type_Error (line 439) | type Type_Error struct
    method isType_TypeKind (line 469) | func (*Type_Error) isType_TypeKind() {}
  type Type_AbstractType_ (line 443) | type Type_AbstractType_ struct
    method isType_TypeKind (line 471) | func (*Type_AbstractType_) isType_TypeKind() {}
  type Decl (line 473) | type Decl struct
    method Reset (line 485) | func (x *Decl) Reset() {
    method String (line 492) | func (x *Decl) String() string {
    method ProtoMessage (line 496) | func (*Decl) ProtoMessage() {}
    method ProtoReflect (line 498) | func (x *Decl) ProtoReflect() protoreflect.Message {
    method Descriptor (line 511) | func (*Decl) Descriptor() ([]byte, []int) {
    method GetName (line 515) | func (x *Decl) GetName() string {
    method GetDeclKind (line 522) | func (x *Decl) GetDeclKind() isDecl_DeclKind {
    method GetIdent (line 529) | func (x *Decl) GetIdent() *Decl_IdentDecl {
    method GetFunction (line 538) | func (x *Decl) GetFunction() *Decl_FunctionDecl {
  type isDecl_DeclKind (line 547) | type isDecl_DeclKind interface
  type Decl_Ident (line 551) | type Decl_Ident struct
    method isDecl_DeclKind (line 559) | func (*Decl_Ident) isDecl_DeclKind() {}
  type Decl_Function (line 555) | type Decl_Function struct
    method isDecl_DeclKind (line 561) | func (*Decl_Function) isDecl_DeclKind() {}
  type Reference (line 563) | type Reference struct
    method Reset (line 572) | func (x *Reference) Reset() {
    method String (line 579) | func (x *Reference) String() string {
    method ProtoMessage (line 583) | func (*Reference) ProtoMessage() {}
    method ProtoReflect (line 585) | func (x *Reference) ProtoReflect() protoreflect.Message {
    method Descriptor (line 598) | func (*Reference) Descriptor() ([]byte, []int) {
    method GetName (line 602) | func (x *Reference) GetName() string {
    method GetOverloadId (line 609) | func (x *Reference) GetOverloadId() []string {
    method GetValue (line 616) | func (x *Reference) GetValue() *Constant {
  type Type_ListType (line 623) | type Type_ListType struct
    method Reset (line 630) | func (x *Type_ListType) Reset() {
    method String (line 637) | func (x *Type_ListType) String() string {
    method ProtoMessage (line 641) | func (*Type_ListType) ProtoMessage() {}
    method ProtoReflect (line 643) | func (x *Type_ListType) ProtoReflect() protoreflect.Message {
    method Descriptor (line 656) | func (*Type_ListType) Descriptor() ([]byte, []int) {
    method GetElemType (line 660) | func (x *Type_ListType) GetElemType() *Type {
  type Type_MapType (line 667) | type Type_MapType struct
    method Reset (line 675) | func (x *Type_MapType) Reset() {
    method String (line 682) | func (x *Type_MapType) String() string {
    method ProtoMessage (line 686) | func (*Type_MapType) ProtoMessage() {}
    method ProtoReflect (line 688) | func (x *Type_MapType) ProtoReflect() protoreflect.Message {
    method Descriptor (line 701) | func (*Type_MapType) Descriptor() ([]byte, []int) {
    method GetKeyType (line 705) | func (x *Type_MapType) GetKeyType() *Type {
    method GetValueType (line 712) | func (x *Type_MapType) GetValueType() *Type {
  type Type_FunctionType (line 719) | type Type_FunctionType struct
    method Reset (line 727) | func (x *Type_FunctionType) Reset() {
    method String (line 734) | func (x *Type_FunctionType) String() string {
    method ProtoMessage (line 738) | func (*Type_FunctionType) ProtoMessage() {}
    method ProtoReflect (line 740) | func (x *Type_FunctionType) ProtoReflect() protoreflect.Message {
    method Descriptor (line 753) | func (*Type_FunctionType) Descriptor() ([]byte, []int) {
    method GetResultType (line 757) | func (x *Type_FunctionType) GetResultType() *Type {
    method GetArgTypes (line 764) | func (x *Type_FunctionType) GetArgTypes() []*Type {
  type Type_AbstractType (line 771) | type Type_AbstractType struct
    method Reset (line 779) | func (x *Type_AbstractType) Reset() {
    method String (line 786) | func (x *Type_AbstractType) String() string {
    method ProtoMessage (line 790) | func (*Type_AbstractType) ProtoMessage() {}
    method ProtoReflect (line 792) | func (x *Type_AbstractType) ProtoReflect() protoreflect.Message {
    method Descriptor (line 805) | func (*Type_AbstractType) Descriptor() ([]byte, []int) {
    method GetName (line 809) | func (x *Type_AbstractType) GetName() string {
    method GetParameterTypes (line 816) | func (x *Type_AbstractType) GetParameterTypes() []*Type {
  type Decl_IdentDecl (line 823) | type Decl_IdentDecl struct
    method Reset (line 832) | func (x *Decl_IdentDecl) Reset() {
    method String (line 839) | func (x *Decl_IdentDecl) String() string {
    method ProtoMessage (line 843) | func (*Decl_IdentDecl) ProtoMessage() {}
    method ProtoReflect (line 845) | func (x *Decl_IdentDecl) ProtoReflect() protoreflect.Message {
    method Descriptor (line 858) | func (*Decl_IdentDecl) Descriptor() ([]byte, []int) {
    method GetType (line 862) | func (x *Decl_IdentDecl) GetType() *Type {
    method GetValue (line 869) | func (x *Decl_IdentDecl) GetValue() *Constant {
    method GetDoc (line 876) | func (x *Decl_IdentDecl) GetDoc() string {
  type Decl_FunctionDecl (line 883) | type Decl_FunctionDecl struct
    method Reset (line 891) | func (x *Decl_FunctionDecl) Reset() {
    method String (line 898) | func (x *Decl_FunctionDecl) String() string {
    method ProtoMessage (line 902) | func (*Decl_FunctionDecl) ProtoMessage() {}
    method ProtoReflect (line 904) | func (x *Decl_FunctionDecl) ProtoReflect() protoreflect.Message {
    method Descriptor (line 917) | func (*Decl_FunctionDecl) Descriptor() ([]byte, []int) {
    method GetOverloads (line 921) | func (x *Decl_FunctionDecl) GetOverloads() []*Decl_FunctionDecl_Overlo...
    method GetDoc (line 928) | func (x *Decl_FunctionDecl) GetDoc() string {
  type Decl_FunctionDecl_Overload (line 935) | type Decl_FunctionDecl_Overload struct
    method Reset (line 947) | func (x *Decl_FunctionDecl_Overload) Reset() {
    method String (line 954) | func (x *Decl_FunctionDecl_Overload) String() string {
    method ProtoMessage (line 958) | func (*Decl_FunctionDecl_Overload) ProtoMessage() {}
    method ProtoReflect (line 960) | func (x *Decl_FunctionDecl_Overload) ProtoReflect() protoreflect.Messa...
    method Descriptor (line 973) | func (*Decl_FunctionDecl_Overload) Descriptor() ([]byte, []int) {
    method GetOverloadId (line 977) | func (x *Decl_FunctionDecl_Overload) GetOverloadId() string {
    method GetParams (line 984) | func (x *Decl_FunctionDecl_Overload) GetParams() []*Type {
    method GetTypeParams (line 991) | func (x *Decl_FunctionDecl_Overload) GetTypeParams() []string {
    method GetResultType (line 998) | func (x *Decl_FunctionDecl_Overload) GetResultType() *Type {
    method GetIsInstanceFunction (line 1005) | func (x *Decl_FunctionDecl_Overload) GetIsInstanceFunction() bool {
    method GetDoc (line 1012) | func (x *Decl_FunctionDecl_Overload) GetDoc() string {
  constant file_cel_expr_checked_proto_rawDesc (line 1021) | file_cel_expr_checked_proto_rawDesc = "" +
  function file_cel_expr_checked_proto_rawDescGZIP (line 1118) | func file_cel_expr_checked_proto_rawDescGZIP() []byte {
  function init (line 1188) | func init() { file_cel_expr_checked_proto_init() }
  function file_cel_expr_checked_proto_init (line 1189) | func file_cel_expr_checked_proto_init() {

FILE: vendor/cel.dev/expr/eval.pb.go
  constant _ (line 20) | _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
  constant _ (line 22) | _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
  type EvalState (line 25) | type EvalState struct
    method Reset (line 33) | func (x *EvalState) Reset() {
    method String (line 40) | func (x *EvalState) String() string {
    method ProtoMessage (line 44) | func (*EvalState) ProtoMessage() {}
    method ProtoReflect (line 46) | func (x *EvalState) ProtoReflect() protoreflect.Message {
    method Descriptor (line 59) | func (*EvalState) Descriptor() ([]byte, []int) {
    method GetValues (line 63) | func (x *EvalState) GetValues() []*ExprValue {
    method GetResults (line 70) | func (x *EvalState) GetResults() []*EvalState_Result {
  type ExprValue (line 77) | type ExprValue struct
    method Reset (line 89) | func (x *ExprValue) Reset() {
    method String (line 96) | func (x *ExprValue) String() string {
    method ProtoMessage (line 100) | func (*ExprValue) ProtoMessage() {}
    method ProtoReflect (line 102) | func (x *ExprValue) ProtoReflect() protoreflect.Message {
    method Descriptor (line 115) | func (*ExprValue) Descriptor() ([]byte, []int) {
    method GetKind (line 119) | func (x *ExprValue) GetKind() isExprValue_Kind {
    method GetValue (line 126) | func (x *ExprValue) GetValue() *Value {
    method GetError (line 135) | func (x *ExprValue) GetError() *ErrorSet {
    method GetUnknown (line 144) | func (x *ExprValue) GetUnknown() *UnknownSet {
  type isExprValue_Kind (line 153) | type isExprValue_Kind interface
  type ExprValue_Value (line 157) | type ExprValue_Value struct
    method isExprValue_Kind (line 169) | func (*ExprValue_Value) isExprValue_Kind() {}
  type ExprValue_Error (line 161) | type ExprValue_Error struct
    method isExprValue_Kind (line 171) | func (*ExprValue_Error) isExprValue_Kind() {}
  type ExprValue_Unknown (line 165) | type ExprValue_Unknown struct
    method isExprValue_Kind (line 173) | func (*ExprValue_Unknown) isExprValue_Kind() {}
  type ErrorSet (line 175) | type ErrorSet struct
    method Reset (line 182) | func (x *ErrorSet) Reset() {
    method String (line 189) | func (x *ErrorSet) String() string {
    method ProtoMessage (line 193) | func (*ErrorSet) ProtoMessage() {}
    method ProtoReflect (line 195) | func (x *ErrorSet) ProtoReflect() protoreflect.Message {
    method Descriptor (line 208) | func (*ErrorSet) Descriptor() ([]byte, []int) {
    method GetErrors (line 212) | func (x *ErrorSet) GetErrors() []*Status {
  type Status (line 219) | type Status struct
    method Reset (line 228) | func (x *Status) Reset() {
    method String (line 235) | func (x *Status) String() string {
    method ProtoMessage (line 239) | func (*Status) ProtoMessage() {}
    method ProtoReflect (line 241) | func (x *Status) ProtoReflect() protoreflect.Message {
    method Descriptor (line 254) | func (*Status) Descriptor() ([]byte, []int) {
    method GetCode (line 258) | func (x *Status) GetCode() int32 {
    method GetMessage (line 265) | func (x *Status) GetMessage() string {
    method GetDetails (line 272) | func (x *Status) GetDetails() []*anypb.Any {
  type UnknownSet (line 279) | type UnknownSet struct
    method Reset (line 286) | func (x *UnknownSet) Reset() {
    method String (line 293) | func (x *UnknownSet) String() string {
    method ProtoMessage (line 297) | func (*UnknownSet) ProtoMessage() {}
    method ProtoReflect (line 299) | func (x *UnknownSet) ProtoReflect() protoreflect.Message {
    method Descriptor (line 312) | func (*UnknownSet) Descriptor() ([]byte, []int) {
    method GetExprs (line 316) | func (x *UnknownSet) GetExprs() []i
Copy disabled (too large) Download .json
Condensed preview — 1507 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (25,388K chars).
[
  {
    "path": ".bazelrc",
    "chars": 1809,
    "preview": "# =====================================================================\n# Envoy specific Bazel build/test options.\n# ==="
  },
  {
    "path": ".bazelversion",
    "chars": 6,
    "preview": "7.7.1\n"
  },
  {
    "path": ".clang-format",
    "chars": 310,
    "preview": "---\nLanguage:        Cpp\nAccessModifierOffset: -2\nColumnLimit: 100\nDerivePointerAlignment: false\nPointerAlignment: Left\n"
  },
  {
    "path": ".clang-tidy",
    "chars": 3998,
    "preview": "Checks: >\n  -clang-analyzer-core.NonNullParamChecker,\n  -clang-analyzer-optin.cplusplus.UninitializedObject,\n  abseil-du"
  },
  {
    "path": ".clangd",
    "chars": 1225,
    "preview": "# https://clangd.llvm.org/config\nIndex:\n  StandardLibrary: Yes\nDiagnostics:\n  UnusedIncludes: Strict\n  MissingIncludes: "
  },
  {
    "path": ".github/CODEOWNERS",
    "chars": 16,
    "preview": "* @cilium/envoy\n"
  },
  {
    "path": ".github/renovate.json5",
    "chars": 5886,
    "preview": "{\n  $schema: 'https://docs.renovatebot.com/renovate-schema.json',\n  extends: [\n    'config:recommended',\n    ':gitSignOf"
  },
  {
    "path": ".github/workflows/build-envoy-image-ci.yaml",
    "chars": 7738,
    "preview": "name: CI Build & Push\non:\n  pull_request_target:\n    types: [opened, synchronize, reopened]\n\npermissions:\n  # To be able"
  },
  {
    "path": ".github/workflows/build-envoy-images-release-base.yaml",
    "chars": 11044,
    "preview": "name: Refresh test & build cache & build latest\non:\n  workflow_call:\n    inputs:\n      release_debug:\n        descriptio"
  },
  {
    "path": ".github/workflows/build-envoy-images-release-debug.yaml",
    "chars": 307,
    "preview": "name: Refresh test & build cache & build latest wth debug symbols\non:\n  workflow_dispatch:\n\npermissions:\n  id-token: wri"
  },
  {
    "path": ".github/workflows/build-envoy-images-release.yaml",
    "chars": 298,
    "preview": "name: Refresh test & build cache & build latest\non:\n  push:\n    branches:\n      - main\n\npermissions:\n  contents: read\n  "
  },
  {
    "path": ".github/workflows/ci-check-format.yaml",
    "chars": 4185,
    "preview": "name: CI check format\non:\n  pull_request: {}\n\n# By specifying the access of one of the scopes, all of those that are not"
  },
  {
    "path": ".github/workflows/ci-tests.yaml",
    "chars": 3174,
    "preview": "name: CI run integration tests\non:\n  pull_request: {}\n\n# By specifying the access of one of the scopes, all of those tha"
  },
  {
    "path": ".github/workflows/cilium-gateway-api.yaml",
    "chars": 9743,
    "preview": "name: Cilium Gateway API Tests\non:\n  workflow_call:\n    inputs:\n      repository:\n        description: 'Github Repositor"
  },
  {
    "path": ".github/workflows/cilium-integration-tests.yaml",
    "chars": 5180,
    "preview": "name: Cilium Integration Tests\non:\n  workflow_call:\n    inputs:\n      repository:\n        description: 'Github Repositor"
  },
  {
    "path": ".github/workflows/codeql.yml",
    "chars": 5067,
    "preview": "name: CodeQL\n\non: \n  workflow_dispatch:\n  schedule:\n    # Run at the end of every day from Monday to Friday\n    - cron: "
  },
  {
    "path": ".github/workflows/renovate-config-validator.yaml",
    "chars": 966,
    "preview": "name: Validate Renovate configuration\n\non:\n  pull_request:\n    paths:\n      - '.github/renovate.json5'\n\npermissions:\n  c"
  },
  {
    "path": ".github/workflows/wait-for-image/action.yaml",
    "chars": 805,
    "preview": "name: Wait for images\ndescription: Wait for images\ninputs:\n  SHA:\n    description: 'inputs.sha'\n    required: true\n    d"
  },
  {
    "path": ".gitignore",
    "chars": 794,
    "preview": "# Dot files, disallow by default, and enable explicitly\n\\.*\n!\\.bazelrc\n!\\.bazelversion\n!\\.clangd\n!\\.clang-format\n!\\.clan"
  },
  {
    "path": "BUILD",
    "chars": 1244,
    "preview": "load(\n    \"@envoy//bazel:envoy_build_system.bzl\",\n    \"envoy_cc_binary\",\n    \"envoy_package\",\n)\n\nlicenses([\"notice\"])  #"
  },
  {
    "path": "CODEOWNERS",
    "chars": 16,
    "preview": "* @cilium/envoy\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3162,
    "preview": "# Contributing to cilium/proxy\n\nThe `cilium/proxy` repository is a minimal fork of the **Envoy Proxy** project. Its prim"
  },
  {
    "path": "Dockerfile",
    "chars": 6375,
    "preview": "# \n# BUILDER_BASE is a multi-platform image with all the build tools\n#\nARG BUILDER_BASE=quay.io/cilium/cilium-envoy-buil"
  },
  {
    "path": "Dockerfile.builder",
    "chars": 3571,
    "preview": "#\n# Builder dependencies. This takes a long time to build from scratch!\n# Also note that if build fails due to C++ inter"
  },
  {
    "path": "Dockerfile.tests",
    "chars": 5934,
    "preview": "# \n# BUILDER_BASE is a multi-platform image with all the build tools\n#\nARG BUILDER_BASE=quay.io/cilium/cilium-envoy-buil"
  },
  {
    "path": "ENVOY_VERSION",
    "chars": 13,
    "preview": "envoy-1.37.2\n"
  },
  {
    "path": "LICENSE",
    "chars": 11350,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "Makefile",
    "chars": 7460,
    "preview": "# Copyright 2017-2021 Authors of Cilium\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
  },
  {
    "path": "Makefile.api",
    "chars": 2076,
    "preview": "# Copyright 2018 Authors of Cilium\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use"
  },
  {
    "path": "Makefile.defs",
    "chars": 318,
    "preview": "ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))\ninclude $(ROOT_DIR)/Makefile.quiet\n\nPREFIX?=/usr\nB"
  },
  {
    "path": "Makefile.dev",
    "chars": 5985,
    "preview": "# Copyright 2017-2021 Authors of Cilium\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
  },
  {
    "path": "Makefile.docker",
    "chars": 8888,
    "preview": "# Copyright 2017-2021 Authors of Cilium\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may no"
  },
  {
    "path": "Makefile.quiet",
    "chars": 560,
    "preview": "ifeq ($(V),0)\n\tQUIET=@\n\tECHO_CC=echo \"  CC    $(notdir $(shell pwd))/$@\"\n\tECHO_GEN=echo \"  GEN   $(notdir $(shell pwd))/"
  },
  {
    "path": "README.md",
    "chars": 10411,
    "preview": "# Cilium Proxy\n\n[Envoy proxy](https://github.com/envoyproxy/envoy) for Cilium with\nminimal Envoy extensions and Cilium p"
  },
  {
    "path": "UPGRADE_ENVOY.md",
    "chars": 2994,
    "preview": "# Envoy Upgrade\n\nOccasionally, we need to bump Envoy minor release version to support new\nupstream features, or for any "
  },
  {
    "path": "Vagrantfile",
    "chars": 2254,
    "preview": "# -*- mode: ruby -*-\n# vi: set ft=ruby :\n\n$VM_MEMORY = (ENV['VM_MEMORY'] || 4096)\n$VM_CPUS = (ENV['VM_CPUS'] || 4)\n# Req"
  },
  {
    "path": "WORKSPACE",
    "chars": 4566,
    "preview": "workspace(name = \"cilium\")\n\nENVOY_PROJECT = \"envoyproxy\"\n\nENVOY_REPO = \"envoy\"\n\n# Envoy GIT commit SHA of release\n#\n# We"
  },
  {
    "path": "bazel/BUILD",
    "chars": 279,
    "preview": "platform(\n    name = \"linux_aarch64\",\n    constraint_values = [\n        \"@platforms//cpu:aarch64\",\n        \"@platforms//"
  },
  {
    "path": "bazel/get_workspace_status",
    "chars": 1529,
    "preview": "#!/bin/bash\n\n# This file was imported from https://github.com/bazelbuild/bazel at d6fec93.\n\n# This script will be run ba"
  },
  {
    "path": "bazel/local_llvm.bzl",
    "chars": 1239,
    "preview": "\"\"\"Repository rule to provide llvm_toolchain_llvm when using a local LLVM toolchain.\n\nWhen BAZEL_LLVM_PATH is set (local"
  },
  {
    "path": "bazel/platform_mappings",
    "chars": 276,
    "preview": "platforms:\n  //bazel:linux_aarch64\n    --cpu=aarch64\n    --crosstool_top=//bazel/toolchains:toolchain\n\n  //bazel:linux_x"
  },
  {
    "path": "bazel/setup_clang.sh",
    "chars": 1089,
    "preview": "#!/bin/bash\n\nBAZELRC_FILE=\"${BAZELRC_FILE:-$(bazel info workspace)/clang.bazelrc}\"\n\nLLVM_PREFIX=$1\n\nif [[ ! -e \"${LLVM_P"
  },
  {
    "path": "bazel/toolchains/BUILD",
    "chars": 7318,
    "preview": "load(\"@rules_cc//cc:defs.bzl\", \"cc_toolchain\", \"cc_toolchain_suite\")\nload(\":cc_toolchain_config.bzl\", \"cc_toolchain_conf"
  },
  {
    "path": "bazel/toolchains/cc_toolchain_config.bzl",
    "chars": 46373,
    "preview": "# Copied from https://github.com/envoyproxy/envoy-build-tools\n# Originally generatd by https://github.com/bazelbuild/baz"
  },
  {
    "path": "cilium/BUILD",
    "chars": 11219,
    "preview": "load(\n    \"@envoy//bazel:envoy_build_system.bzl\",\n    \"envoy_cc_library\",\n    \"envoy_package\",\n)\n\nlicenses([\"notice\"])  "
  },
  {
    "path": "cilium/accesslog.cc",
    "chars": 10140,
    "preview": "#include \"accesslog.h\"\n\n#include <chrono>\n#include <cstdint>\n#include <map>\n#include <memory>\n#include <string>\n\n#includ"
  },
  {
    "path": "cilium/accesslog.h",
    "chars": 2844,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <map>\n#include <memory>\n#include <string>\n\n#include \"envoy/common/time.h\"\n#inc"
  },
  {
    "path": "cilium/api/BUILD",
    "chars": 1462,
    "preview": "load(\n    \"@envoy//bazel:envoy_build_system.bzl\",\n    \"envoy_package\",\n    \"envoy_proto_library\",\n)\nload(\n    \"@envoy_ap"
  },
  {
    "path": "cilium/api/accesslog.proto",
    "chars": 2981,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nmessage KeyVal"
  },
  {
    "path": "cilium/api/bpf_metadata.proto",
    "chars": 4330,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nimport \"envoy/"
  },
  {
    "path": "cilium/api/health_check_sink.proto",
    "chars": 413,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nimport \"valida"
  },
  {
    "path": "cilium/api/l7policy.proto",
    "chars": 349,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nmessage L7Poli"
  },
  {
    "path": "cilium/api/network_filter.proto",
    "chars": 404,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nmessage Networ"
  },
  {
    "path": "cilium/api/npds.proto",
    "chars": 13913,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nimport \"envoy/"
  },
  {
    "path": "cilium/api/nphds.proto",
    "chars": 1451,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nimport \"envoy/"
  },
  {
    "path": "cilium/api/tls_wrapper.proto",
    "chars": 259,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\n// Empty confi"
  },
  {
    "path": "cilium/api/websocket.proto",
    "chars": 1976,
    "preview": "syntax = \"proto3\";\n\noption go_package = \"github.com/cilium/proxy/go/cilium/api;cilium\";\n\npackage cilium;\n\nimport \"google"
  },
  {
    "path": "cilium/bpf.cc",
    "chars": 4845,
    "preview": "#include \"cilium/bpf.h\"\n\n#include <unistd.h>\n\n#include <cerrno>\n#include <cstdint>\n#include <fstream>\n#include <sstream>"
  },
  {
    "path": "cilium/bpf.h",
    "chars": 2415,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <string>\n\n#include \"source/common/common/logger.h\"\n\n#include \"absl/base/thread"
  },
  {
    "path": "cilium/bpf_metadata.cc",
    "chars": 28404,
    "preview": "#include \"cilium/bpf_metadata.h\"\n\n#include <fmt/format.h>\n#include <netinet/in.h>\n#include <netinet/tcp.h>\n\n#include <ch"
  },
  {
    "path": "cilium/bpf_metadata.h",
    "chars": 9342,
    "preview": "#pragma once\n\n#include <chrono>\n#include <cstddef>\n#include <memory>\n#include <string>\n#include <utility>\n#include <vect"
  },
  {
    "path": "cilium/conntrack.cc",
    "chars": 5292,
    "preview": "#include \"conntrack.h\"\n\n#include <netinet/in.h>\n\n#include <cerrno> // IWYU pragma: keep\n#include <cstdint>\n#include <cst"
  },
  {
    "path": "cilium/conntrack.h",
    "chars": 1026,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#include \"envoy/network/address.h\"\n#include \"envoy"
  },
  {
    "path": "cilium/filter_state_cilium_destination.cc",
    "chars": 324,
    "preview": "#include \"cilium/filter_state_cilium_destination.h\"\n\n#include <string>\n\n#include \"source/common/common/macros.h\"\n\nnamesp"
  },
  {
    "path": "cilium/filter_state_cilium_destination.h",
    "chars": 882,
    "preview": "#pragma once\n\n#include <string>\n#include <utility>\n\n#include \"envoy/network/address.h\"\n#include \"envoy/stream_info/filte"
  },
  {
    "path": "cilium/filter_state_cilium_policy.cc",
    "chars": 7305,
    "preview": "#include \"cilium/filter_state_cilium_policy.h\"\n\n#include <cstdint>\n#include <string>\n\n#include \"envoy/http/header_map.h\""
  },
  {
    "path": "cilium/filter_state_cilium_policy.h",
    "chars": 4106,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <utility>\n\n#include \"envoy/common/pure.h\"\n"
  },
  {
    "path": "cilium/grpc_subscription.cc",
    "chars": 7535,
    "preview": "#include \"cilium/grpc_subscription.h\"\n\n#include <fmt/format.h>\n\n#include <chrono>\n#include <memory>\n#include <string>\n#i"
  },
  {
    "path": "cilium/grpc_subscription.h",
    "chars": 1834,
    "preview": "#pragma once\n\n#include <chrono>\n#include <memory>\n\n#include \"envoy/common/random_generator.h\"\n#include \"envoy/config/cor"
  },
  {
    "path": "cilium/health_check_sink.cc",
    "chars": 2442,
    "preview": "#include \"cilium/health_check_sink.h\"\n\n#include <map>\n#include <memory>\n#include <string>\n\n#include \"envoy/common/time.h"
  },
  {
    "path": "cilium/health_check_sink.h",
    "chars": 1834,
    "preview": "#pragma once\n\n#include <map>\n#include <memory>\n#include <string>\n\n#include \"envoy/common/time.h\"\n#include \"envoy/data/co"
  },
  {
    "path": "cilium/host_map.cc",
    "chars": 10134,
    "preview": "#include \"cilium/host_map.h\"\n\n#include <arpa/inet.h>\n#include <fmt/format.h>\n#include <sys/socket.h>\n\n#include <cstdint>"
  },
  {
    "path": "cilium/host_map.h",
    "chars": 9025,
    "preview": "#pragma once\n\n#include <arpa/inet.h>\n#include <fmt/format.h>\n#include <netinet/in.h>\n#include <sys/socket.h>\n\n#include <"
  },
  {
    "path": "cilium/ipcache.cc",
    "chars": 5598,
    "preview": "#include \"ipcache.h\"\n\n#include <cerrno> // IWYU pragma: keep\n#include <chrono>\n#include <cstring>\n#include <memory>\n#inc"
  },
  {
    "path": "cilium/ipcache.h",
    "chars": 3501,
    "preview": "#pragma once\n\n#include <netinet/in.h>\n\n#include <chrono>\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#includ"
  },
  {
    "path": "cilium/l7policy.cc",
    "chars": 15648,
    "preview": "#include \"cilium/l7policy.h\"\n\n#include <fmt/format.h>\n\n#include <cstddef>\n#include <cstdint>\n#include <memory>\n#include "
  },
  {
    "path": "cilium/l7policy.h",
    "chars": 3793,
    "preview": "#pragma once\n\n#include <memory>\n#include <string>\n\n#include \"envoy/buffer/buffer.h\"\n#include \"envoy/common/optref.h\"\n#in"
  },
  {
    "path": "cilium/network_filter.cc",
    "chars": 14621,
    "preview": "#include \"cilium/network_filter.h\"\n\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \""
  },
  {
    "path": "cilium/network_filter.h",
    "chars": 2972,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#include \"envoy/buffer/buffer.h\"\n#include \"envoy/c"
  },
  {
    "path": "cilium/network_policy.cc",
    "chars": 90773,
    "preview": "#include \"cilium/network_policy.h\"\n\n#include <fmt/base.h>\n#include <fmt/format.h>\n#include <fmt/ranges.h>\n#include <open"
  },
  {
    "path": "cilium/network_policy.h",
    "chars": 20724,
    "preview": "#pragma once\n\n#include <fmt/format.h>\n\n#include <atomic>\n#include <cstdint>\n#include <functional>\n#include <memory>\n#inc"
  },
  {
    "path": "cilium/policy_id.h",
    "chars": 317,
    "preview": "#pragma once\n\n#include <cstdint>\n\nnamespace Envoy {\nnamespace Cilium {\n\nenum ID : uint64_t {\n  UNKNOWN = 0,\n  WORLD = 2,"
  },
  {
    "path": "cilium/privileged_service_client.cc",
    "chars": 8031,
    "preview": "#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include \"cilium/privileged_ser"
  },
  {
    "path": "cilium/privileged_service_client.h",
    "chars": 5747,
    "preview": "#pragma once\n\n#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include <sys/soc"
  },
  {
    "path": "cilium/proxylib.cc",
    "chars": 13216,
    "preview": "#include \"cilium/proxylib.h\"\n\n#include <dlfcn.h>\n#include <fmt/format.h>\n\n#include <cstdint>\n#include <memory>\n#include "
  },
  {
    "path": "cilium/proxylib.h",
    "chars": 5669,
    "preview": "#pragma once\n\n#include <google/protobuf/map.h>\n\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#include \"envoy/"
  },
  {
    "path": "cilium/secret_watcher.cc",
    "chars": 9823,
    "preview": "#include \"cilium/secret_watcher.h\"\n\n#include <fmt/format.h>\n\n#include <atomic>\n#include <string>\n#include <utility>\n\n#in"
  },
  {
    "path": "cilium/secret_watcher.h",
    "chars": 3656,
    "preview": "#pragma once\n\n#include <atomic>\n#include <functional>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"e"
  },
  {
    "path": "cilium/socket_option_cilium_mark.cc",
    "chars": 2065,
    "preview": "#include \"cilium/socket_option_cilium_mark.h\"\n\n#include <cerrno>\n#include <cstdint>\n\n#include \"envoy/config/core/v3/sock"
  },
  {
    "path": "cilium/socket_option_cilium_mark.h",
    "chars": 1313,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <vector>\n\n#include \"envoy/config/core/v3/socket_option.pb.h\"\n#include \"envoy/n"
  },
  {
    "path": "cilium/socket_option_ip_transparent.cc",
    "chars": 2616,
    "preview": "#include \"cilium/socket_option_ip_transparent.h\"\n\n#include <netinet/in.h>\n\n#include <cerrno>\n#include <cstdint>\n\n#includ"
  },
  {
    "path": "cilium/socket_option_ip_transparent.h",
    "chars": 1242,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <vector>\n\n#include \"envoy/config/core/v3/socket_option.pb.h\"\n#include \"envoy/n"
  },
  {
    "path": "cilium/socket_option_source_address.cc",
    "chars": 7205,
    "preview": "#include \"cilium/socket_option_source_address.h\"\n\n#include <sys/socket.h>\n\n#include <cstdint>\n#include <memory>\n#include"
  },
  {
    "path": "cilium/socket_option_source_address.h",
    "chars": 2605,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <vector>\n\n#include \"envoy/config/core/v3/socket_option.pb.h\""
  },
  {
    "path": "cilium/tls_wrapper.cc",
    "chars": 11448,
    "preview": "#include \"cilium/tls_wrapper.h\"\n\n#include <chrono>\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <util"
  },
  {
    "path": "cilium/tls_wrapper.h",
    "chars": 1845,
    "preview": "#pragma once\n\n#include <string>\n#include <vector>\n\n#include \"envoy/network/transport_socket.h\"\n#include \"envoy/registry/"
  },
  {
    "path": "cilium/uds_client.cc",
    "chars": 2651,
    "preview": "#include \"cilium/uds_client.h\"\n\n#include <fmt/format.h>\n#include <sys/socket.h>\n#include <sys/types.h>\n#include <unistd."
  },
  {
    "path": "cilium/uds_client.h",
    "chars": 1086,
    "preview": "#pragma once\n\n#include <memory>\n#include <string>\n\n#include \"envoy/common/time.h\"\n\n#include \"source/common/common/logger"
  },
  {
    "path": "cilium/websocket.cc",
    "chars": 10333,
    "preview": "#include \"cilium/websocket.h\"\n\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#include \"envoy/buffer/buffer.h\"\n"
  },
  {
    "path": "cilium/websocket.h",
    "chars": 2986,
    "preview": "#pragma once\n\n#include \"envoy/buffer/buffer.h\"\n#include \"envoy/event/schedulable_cb.h\"\n#include \"envoy/http/header_map.h"
  },
  {
    "path": "cilium/websocket_codec.cc",
    "chars": 35186,
    "preview": "#include \"cilium/websocket_codec.h\"\n\n#include <endian.h>\n#include <fmt/format.h>\n#include <http_parser.h>\n#include <sys/"
  },
  {
    "path": "cilium/websocket_codec.h",
    "chars": 4130,
    "preview": "#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <memory>\n#include <string>\n\n#include \"envoy/buffer/buffer.h"
  },
  {
    "path": "cilium/websocket_config.cc",
    "chars": 5426,
    "preview": "#include \"cilium/websocket_config.h\"\n\n#include <openssl/digest.h>\n#include <openssl/sha.h>\n\n#include <chrono>\n#include <"
  },
  {
    "path": "cilium/websocket_config.h",
    "chars": 3098,
    "preview": "#pragma once\n\n#include <chrono>\n#include <cstdint>\n#include <memory>\n#include <string>\n#include <vector>\n\n#include \"envo"
  },
  {
    "path": "cilium/websocket_protocol.h",
    "chars": 2262,
    "preview": "#pragma once\n\n// NOLINT(namespace-envoy)\n\n// Some sensible limits to protect against excess resource use\n#define WEBSOCK"
  },
  {
    "path": "envoy.bazelrc",
    "chars": 20523,
    "preview": "#############################################################################\n# startup\n################################"
  },
  {
    "path": "envoy_binary_test.sh",
    "chars": 177,
    "preview": "#!/bin/bash\n#\n\nset -e\n\n# Just test that the binary was produced and can be executed.\n# envoy --help will give a success "
  },
  {
    "path": "envoy_build_config/BUILD",
    "chars": 33,
    "preview": "licenses([\"notice\"])  # Apache 2\n"
  },
  {
    "path": "envoy_build_config/WORKSPACE",
    "chars": 39,
    "preview": "workspace(name = \"envoy_build_config\")\n"
  },
  {
    "path": "envoy_build_config/extensions_build_config.bzl",
    "chars": 39427,
    "preview": "# See bazel/README.md for details on how this system works.\nEXTENSIONS = {\n    #\n    # Access loggers\n    #\n    \"envoy.a"
  },
  {
    "path": "go/README.md",
    "chars": 91,
    "preview": "# protoc-generated Go sources\n\nGo files herein are autogenerated with protoc, do not edit.\n"
  },
  {
    "path": "go/cilium/api/accesslog.go",
    "chars": 770,
    "preview": "// Copyright 2020 Authors of Cilium\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not"
  },
  {
    "path": "go/cilium/api/accesslog.pb.go",
    "chars": 22335,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/accesslog.pb.validate.go",
    "chars": 20915,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/accesslog.proto\n\npackage cilium\n\nimport (\n\t"
  },
  {
    "path": "go/cilium/api/bpf_metadata.pb.go",
    "chars": 13299,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/bpf_metadata.pb.validate.go",
    "chars": 7417,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/bpf_metadata.proto\n\npackage cilium\n\nimport "
  },
  {
    "path": "go/cilium/api/health_check_sink.pb.go",
    "chars": 4530,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/health_check_sink.pb.validate.go",
    "chars": 3810,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/health_check_sink.proto\n\npackage cilium\n\nim"
  },
  {
    "path": "go/cilium/api/l7policy.pb.go",
    "chars": 4323,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/l7policy.pb.validate.go",
    "chars": 3248,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/l7policy.proto\n\npackage cilium\n\nimport (\n\t\""
  },
  {
    "path": "go/cilium/api/network_filter.pb.go",
    "chars": 5281,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/network_filter.pb.validate.go",
    "chars": 3420,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/network_filter.proto\n\npackage cilium\n\nimpor"
  },
  {
    "path": "go/cilium/api/npds.pb.go",
    "chars": 50513,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/npds.pb.validate.go",
    "chars": 56258,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/npds.proto\n\npackage cilium\n\nimport (\n\t\"byte"
  },
  {
    "path": "go/cilium/api/npds_grpc.pb.go",
    "chars": 7741,
    "preview": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.6.1\n// - protoc           "
  },
  {
    "path": "go/cilium/api/nphds.pb.go",
    "chars": 6149,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/nphds.pb.validate.go",
    "chars": 4258,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/nphds.proto\n\npackage cilium\n\nimport (\n\t\"byt"
  },
  {
    "path": "go/cilium/api/nphds_grpc.pb.go",
    "chars": 8128,
    "preview": "// Code generated by protoc-gen-go-grpc. DO NOT EDIT.\n// versions:\n// - protoc-gen-go-grpc v1.6.1\n// - protoc           "
  },
  {
    "path": "go/cilium/api/tls_wrapper.pb.go",
    "chars": 5137,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/tls_wrapper.pb.validate.go",
    "chars": 6674,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/tls_wrapper.proto\n\npackage cilium\n\nimport ("
  },
  {
    "path": "go/cilium/api/websocket.pb.go",
    "chars": 11418,
    "preview": "// Code generated by protoc-gen-go. DO NOT EDIT.\n// versions:\n// \tprotoc-gen-go v1.36.11\n// \tprotoc        v6.33.2\n// so"
  },
  {
    "path": "go/cilium/api/websocket.pb.validate.go",
    "chars": 10276,
    "preview": "// Code generated by protoc-gen-validate. DO NOT EDIT.\n// source: cilium/api/websocket.proto\n\npackage cilium\n\nimport (\n\t"
  },
  {
    "path": "go.mod",
    "chars": 1498,
    "preview": "module github.com/cilium/proxy\n\ngo 1.25.0\n\ntoolchain go1.26.3\n\nrequire (\n\tgithub.com/cilium/kafka v0.0.0-20180809090225-"
  },
  {
    "path": "go.sum",
    "chars": 7218,
    "preview": "cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4=\ncel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ"
  },
  {
    "path": "linux/bpf.h",
    "chars": 107439,
    "preview": "/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */\n/* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com\n"
  },
  {
    "path": "linux/bpf_common.h",
    "chars": 1230,
    "preview": "#ifndef __LINUX_BPF_COMMON_H__\n#define __LINUX_BPF_COMMON_H__\n\n/* Instruction classes */\n#define BPF_CLASS(code) ((code)"
  },
  {
    "path": "linux/type_mapper.h",
    "chars": 511,
    "preview": "#ifndef __LINUX_TYPE_MAPPER_H__\n#define __LINUX_TYPE_MAPPER_H__\n\n#include <stdint.h>\n\n#define __u64 uint64_t\n#define __u"
  },
  {
    "path": "patches/0001-network-Add-callback-for-upstream-authorization.patch",
    "chars": 16466,
    "preview": "From 27e683eb4e7acd3fae4a9bdf746ba8d2ba2c9f95 Mon Sep 17 00:00:00 2001\nFrom: Jarno Rajahalme <jarno@isovalent.com>\nDate:"
  },
  {
    "path": "patches/0002-listener-add-socket-options.patch",
    "chars": 4683,
    "preview": "From 99208ff3152522cef2125815450e4bda12fab9ee Mon Sep 17 00:00:00 2001\nFrom: Jarno Rajahalme <jarno@isovalent.com>\nDate:"
  },
  {
    "path": "patches/0003-original_dst_cluster-Avoid-multiple-hosts-for-the-sa.patch",
    "chars": 20492,
    "preview": "From 8c6ca69f1bdbc6697216e1831659da33c95282b9 Mon Sep 17 00:00:00 2001\nFrom: Jarno Rajahalme <jarno@isovalent.com>\nDate:"
  },
  {
    "path": "patches/0004-thread_local-reset-slot-in-worker-threads-first.patch",
    "chars": 5186,
    "preview": "From 7138d8e50ccfce757d080debd90f5f5dcfc57f40 Mon Sep 17 00:00:00 2001\nFrom: Jarno Rajahalme <jarno@isovalent.com>\nDate:"
  },
  {
    "path": "patches/0005-http-header-expose-attribute.patch",
    "chars": 5365,
    "preview": "From 4587532cfc962d2a22854bc7c45bad9517708ea0 Mon Sep 17 00:00:00 2001\nFrom: Tam Mach <sayboras@yahoo.com>\nDate: Wed, 19"
  },
  {
    "path": "patches/0006-test-integration-Defer-fake-upstream-read-enable-un.patch",
    "chars": 4531,
    "preview": "diff --git a/test/integration/fake_upstream.cc b/test/integration/fake_upstream.cc\n--- a/test/integration/fake_upstream."
  },
  {
    "path": "patches/0008-repo-Make-yq-dependency-optional-for-CI-config-parsi.patch",
    "chars": 3285,
    "preview": "From af2053dc1e3892a9f28d6eebf7f907c3d83ce536 Mon Sep 17 00:00:00 2001\nFrom: Tam Mach <sayboras@yahoo.com>\nDate: Sat, 14"
  },
  {
    "path": "patches/BUILD",
    "chars": 33,
    "preview": "licenses([\"notice\"])  # Apache 2\n"
  },
  {
    "path": "pkg/policy/api/kafka/doc.go",
    "chars": 236,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n// +k8s:openapi-gen=true\n// +deepequal-gen=packag"
  },
  {
    "path": "pkg/policy/api/kafka/kafka.go",
    "chars": 11164,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafka\n\nimport (\n\t\"fmt\"\n\t\"math\"\n\t\"regexp\"\n"
  },
  {
    "path": "pkg/policy/api/kafka/zz_generated.deepequal.go",
    "chars": 684,
    "preview": "//go:build !ignore_autogenerated\n// +build !ignore_autogenerated\n\n// SPDX-License-Identifier: Apache-2.0\n// Copyright Au"
  },
  {
    "path": "proxylib/BUILD",
    "chars": 107,
    "preview": "licenses([\"notice\"])  # Apache 2\n\nexports_files([\n    \"libcilium.h\",\n    \"types.h\",\n    \"libcilium.so\",\n])\n"
  },
  {
    "path": "proxylib/Makefile",
    "chars": 945,
    "preview": "# Copyright Authors of Cilium\n# SPDX-License-Identifier: Apache-2.0\n\ninclude ../Makefile.defs\n\n# Support CGO cross-compi"
  },
  {
    "path": "proxylib/accesslog/client.go",
    "chars": 2292,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage accesslog\n\nimport (\n\t\"net\"\n\t\"sync\"\n\t\"sync"
  },
  {
    "path": "proxylib/cassandra/cassandraparser.go",
    "chars": 22389,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage cassandra\n\nimport (\n\t\"bytes\"\n\t\"encoding/b"
  },
  {
    "path": "proxylib/cassandra/cassandraparser_test.go",
    "chars": 23017,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage cassandra\n\nimport (\n\t\"encoding/hex\"\n\t\"tes"
  },
  {
    "path": "proxylib/kafka/kafkalib/doc.go",
    "chars": 191,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n// Package kafkalib provides a library to parse K"
  },
  {
    "path": "proxylib/kafka/kafkalib/error.go",
    "chars": 1862,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafkalib\n\n// List of possible Kafka error"
  },
  {
    "path": "proxylib/kafka/kafkalib/policy.go",
    "chars": 4749,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafkalib\n\nimport (\n\t\"github.com/sirupsen/"
  },
  {
    "path": "proxylib/kafka/kafkalib/policy_test.go",
    "chars": 3379,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafkalib\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\t\""
  },
  {
    "path": "proxylib/kafka/kafkalib/request.go",
    "chars": 6903,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafkalib\n\nimport (\n\t\"bytes\"\n\t\"encoding/bi"
  },
  {
    "path": "proxylib/kafka/kafkalib/response.go",
    "chars": 6948,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafkalib\n\nimport (\n\t\"encoding/binary\"\n\t\"e"
  },
  {
    "path": "proxylib/kafka/parser.go",
    "chars": 3290,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafka\n\nimport (\n\t\"encoding/binary\"\n\n\t\"git"
  },
  {
    "path": "proxylib/kafka/parser_test.go",
    "chars": 13476,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage kafka\n\nimport (\n\t\"encoding/hex\"\n\t\"testing"
  },
  {
    "path": "proxylib/libcilium/helpers_test.go",
    "chars": 3892,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage libcilium\n\n// These helpers must be defin"
  },
  {
    "path": "proxylib/libcilium/proxylib.go",
    "chars": 2815,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage libcilium\n\nimport (\n\t\"sync\"\n\n\t\"github.com"
  },
  {
    "path": "proxylib/libcilium/proxylib_memcached_test.go",
    "chars": 17042,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage libcilium\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\n\t_"
  },
  {
    "path": "proxylib/libcilium/proxylib_test.go",
    "chars": 23909,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage libcilium\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\t\"t"
  },
  {
    "path": "proxylib/libcilium.h",
    "chars": 4785,
    "preview": "/* Code generated by cmd/cgo; DO NOT EDIT. */\n\n/* package github.com/cilium/proxy/proxylib */\n\n\n#line 1 \"cgo-builtin-exp"
  },
  {
    "path": "proxylib/memcached/binary/parser.go",
    "chars": 4920,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage binary\n\nimport (\n\t\"bytes\"\n\t\"encoding/bina"
  },
  {
    "path": "proxylib/memcached/binary/parser_test.go",
    "chars": 867,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage binary\n\nimport (\n\t\"testing\"\n\n\t\"github.com"
  },
  {
    "path": "proxylib/memcached/meta/meta.go",
    "chars": 539,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n// text memcache protocol parser based on https:/"
  },
  {
    "path": "proxylib/memcached/parser.go",
    "chars": 10399,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n// text memcache protocol parser based on https:/"
  },
  {
    "path": "proxylib/memcached/text/parser.go",
    "chars": 8930,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n// text memcache protocol parser based on https:/"
  },
  {
    "path": "proxylib/npds/backoff.go",
    "chars": 2102,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage npds\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"math\"\n"
  },
  {
    "path": "proxylib/npds/client.go",
    "chars": 5465,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage npds\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt"
  },
  {
    "path": "proxylib/proxylib/connection.go",
    "chars": 9139,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"fmt\"\n\t\"net\"\n\t\"strcon"
  },
  {
    "path": "proxylib/proxylib/input_test.go",
    "chars": 1156,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"testing\"\n\n\t\"github.c"
  },
  {
    "path": "proxylib/proxylib/instance.go",
    "chars": 5796,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"fmt\"\n\t\"sync\"\n\t\"sync/"
  },
  {
    "path": "proxylib/proxylib/parserfactory.go",
    "chars": 5564,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"github.com/sirupsen/"
  },
  {
    "path": "proxylib/proxylib/policymap.go",
    "chars": 9188,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"fmt\"\n\t\"reflect\"\n\t\"st"
  },
  {
    "path": "proxylib/proxylib/reader.go",
    "chars": 1838,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"io\"\n)\n\ntype Reader s"
  },
  {
    "path": "proxylib/proxylib/test_util.go",
    "chars": 3931,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport (\n\t\"testing\"\n\n\t\"google.g"
  },
  {
    "path": "proxylib/proxylib/types.go",
    "chars": 1740,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage proxylib\n\nimport \"fmt\"\n\n// OpType mirrors"
  },
  {
    "path": "proxylib/proxylib.go",
    "chars": 3596,
    "preview": "// nolint:goheader\n// CGo injects a 'Code generated by ...' header here before AST parsing, ignore it.\n\n// SPDX-License-"
  },
  {
    "path": "proxylib/r2d2/r2d2parser.go",
    "chars": 5351,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage r2d2\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"regexp\"\n"
  },
  {
    "path": "proxylib/r2d2/r2d2parser_test.go",
    "chars": 3806,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage r2d2\n\nimport (\n\t\"testing\"\n\n\t\"github.com/s"
  },
  {
    "path": "proxylib/test/accesslog_server.go",
    "chars": 4122,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage test\n\nimport (\n\t\"errors\"\n\t\"io\"\n\t\"net\"\n\t\"o"
  },
  {
    "path": "proxylib/test/tmpdir.go",
    "chars": 329,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage test\n\nimport (\n\t\"os\"\n\n\t\"github.com/sirups"
  },
  {
    "path": "proxylib/testparsers/blockparser.go",
    "chars": 4398,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage testparsers\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"m"
  },
  {
    "path": "proxylib/testparsers/headerparser.go",
    "chars": 3918,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\n//\n// Accompanying file `headerparser.policy` con"
  },
  {
    "path": "proxylib/testparsers/headerparser.policy",
    "chars": 997,
    "preview": "[{\n    \"endpointSelector\": {\"matchLabels\":{\"id.echoserver\":\"\"}},\n    \"ingress\": [{\n        \"fromEndpoints\": [\n          "
  },
  {
    "path": "proxylib/testparsers/lineparser.go",
    "chars": 2429,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage testparsers\n\nimport (\n\t\"bytes\"\n\n\t\"github."
  },
  {
    "path": "proxylib/testparsers/passer.go",
    "chars": 1072,
    "preview": "// SPDX-License-Identifier: Apache-2.0\n// Copyright Authors of Cilium\n\npackage testparsers\n\nimport (\n\t\"github.com/sirups"
  },
  {
    "path": "proxylib/types.h",
    "chars": 1838,
    "preview": "/*\n * Copyright 2018 Authors of Cilium\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may "
  },
  {
    "path": "starter/BUILD",
    "chars": 603,
    "preview": "licenses([\"notice\"])  # Apache 2\n\ncc_library(\n    name = \"main_entry_lib\",\n    srcs = [\"main.cc\"],\n    visibility = [\"//"
  },
  {
    "path": "starter/main.cc",
    "chars": 7275,
    "preview": "#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include <cerrno>\n#include <cst"
  },
  {
    "path": "starter/privileged_service_protocol.cc",
    "chars": 6309,
    "preview": "#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include \"starter/privileged_se"
  },
  {
    "path": "starter/privileged_service_protocol.h",
    "chars": 5437,
    "preview": "#pragma once\n\n#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include <linux/c"
  },
  {
    "path": "starter/privileged_service_server.cc",
    "chars": 4688,
    "preview": "#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include \"starter/privileged_se"
  },
  {
    "path": "starter/privileged_service_server.h",
    "chars": 980,
    "preview": "#pragma once\n\n#if !defined(__linux__)\n#error \"Linux platform file is part of non-Linux build.\"\n#endif\n\n#include <linux/l"
  },
  {
    "path": "tests/BUILD",
    "chars": 13023,
    "preview": "load(\n    \"@envoy//bazel:envoy_build_system.bzl\",\n    \"envoy_cc_test\",\n    \"envoy_cc_test_library\",\n    \"envoy_package\","
  },
  {
    "path": "tests/accesslog_server.cc",
    "chars": 1643,
    "preview": "#include \"tests/accesslog_server.h\"\n\n#include <chrono>\n#include <functional>\n#include <string>\n\n#include \"source/common/"
  }
]

// ... and 1307 more files (download for full content)

About this extraction

This page contains the full source code of the cilium/proxy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1507 files (22.5 MB), approximately 6.0M tokens, and a symbol index with 121979 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!