| /** @file |
| |
| Definitions via the X Macro pattern for overridable configuration variables. |
| |
| @section license License |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you 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. |
| */ |
| |
| /** |
| @section overview Overview |
| |
| This file provides a single source of truth for all overridable configuration |
| variables using the X-macro pattern. By defining configs here once, we |
| auto-generate code in multiple locations: |
| |
| - Lua plugin enum and variable array (ts_lua_http_config.cc) |
| - String-to-enum mapping (overridable_txn_vars.cc) |
| - The _conf_to_memberp switch statement (InkAPI.cc) |
| - SDK_Overridable_Configs test array (InkAPITest.cc) |
| |
| @section xmacro_format X-Macro Format |
| |
| Each entry in OVERRIDABLE_CONFIGS has 5 parameters: |
| |
| X(CONFIG_KEY, MEMBER, RECORD_NAME, DATA_TYPE, CONV) |
| |
| - CONFIG_KEY: Enum suffix, becomes TS_CONFIG_<CONFIG_KEY> in the public API. |
| - MEMBER: The struct member name in OverridableHttpConfigParams. |
| - RECORD_NAME: The proxy.config.* record name string (or a variable for |
| dynamic names like ConnectionTracker::CONFIG_SERVER_VAR_MIN). |
| - DATA_TYPE: One of INT, FLOAT, or STRING. Used for type validation. |
| - CONV: Converter specification (see below). |
| |
| @section converters Converter Types (CONV parameter) |
| |
| The CONV parameter controls how values are converted between the API and |
| internal storage. There are three categories: |
| |
| 1. GENERIC - Use _memberp_to_generic() which auto-selects the appropriate |
| converter based on the member's C++ type (MgmtByte, MgmtInt, MgmtFloat, |
| std::string_view, etc.). This is the most common case. |
| |
| 2. NONE - No conversion; the config is handled specially elsewhere (e.g., |
| SSL string configs are processed directly in TSHttpTxnConfigStringSet). |
| The MEMBER field is ignored but must be provided. |
| |
| 3. Custom converter name - For configs needing special conversion logic. |
| The name must match a _CONF_CASE_<name> macro defined in InkAPI.cc. |
| Examples: HttpDownServerCacheTimeConv, HttpStatusCodeList_Conv, |
| ConnectionTracker_MIN_SERVER_CONV, HttpTransact_HOST_RES_CONV. |
| See the X-Macro Dispatch doxygen documentation in InkAPI.cc for more |
| details. |
| |
| @section adding_new_config Adding a New Overridable Config |
| |
| To make a configuration variable overridable: |
| |
| 1. Add the config member to OverridableHttpConfigParams in HttpConfig.h. |
| (Move it from HttpConfigParams if it already exists as non-overridable.) |
| |
| 2. Add an entry to OVERRIDABLE_CONFIGS below. Place it at the END of the |
| list to match the enum order requirement. |
| |
| 3. Add the enum value to TSOverridableConfigKey in apidefs.h.in. |
| It MUST be added at the end, just before TS_CONFIG_LAST_ENTRY, to |
| preserve ABI compatibility. |
| |
| IMPORTANT: The X-macro order MUST match the enum order exactly. |
| overridable_txn_vars.cc has compile-time validation that will fail |
| if they don't match. |
| |
| 4. Update documentation in doc/developer-guide/api/. |
| |
| @section adding_custom_converter Adding a Custom Converter |
| |
| See the X-Macro Dispatch doxygen documentation in InkAPI.cc for more details. |
| |
| @section caching Automatic Caching for STRING Configs |
| |
| Some STRING configs require parsing that is more expensive than a simple |
| string copy (e.g., parsing status code lists or host resolution preferences). |
| For these configs, TSHttpTxnConfigStringSet() automatically uses |
| ParsedConfigCache (defined in HttpConfig.h) to cache parsed results. |
| |
| This means the parsing only happens once per unique (config_key, value) pair. |
| Subsequent calls with the same value use the cached result directly. |
| HTTP_NEGATIVE_CACHING_LIST is an example configuration that takes advantage |
| of this. This optimization is transparent to API users - they just call |
| TSHttpTxnConfigStringSet() as usual and get the performance benefit |
| automatically. |
| |
| @section none_configs Note on CONV=NONE |
| |
| Some SSL string configs use NONE because they bypass _conf_to_memberp() |
| entirely and are handled directly in TSHttpTxnConfigStringSet(). For these |
| entries, the MEMBER field is ignored but must still be provided to satisfy |
| the macro format (typically using a placeholder member name). |
| */ |
| |
| #pragma once |
| |
| // clang-format off |
| #define OVERRIDABLE_CONFIGS(X) \ |
| X(URL_REMAP_PRISTINE_HOST_HDR, maintain_pristine_host_hdr, "proxy.config.url_remap.pristine_host_hdr", INT, GENERIC) \ |
| X(HTTP_CHUNKING_ENABLED, chunking_enabled, "proxy.config.http.chunking_enabled", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_CACHING_ENABLED, negative_caching_enabled, "proxy.config.http.negative_caching_enabled", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_CACHING_LIFETIME, negative_caching_lifetime, "proxy.config.http.negative_caching_lifetime", INT, GENERIC) \ |
| X(HTTP_CACHE_WHEN_TO_REVALIDATE, cache_when_to_revalidate, "proxy.config.http.cache.when_to_revalidate", INT, GENERIC) \ |
| X(HTTP_KEEP_ALIVE_ENABLED_IN, keep_alive_enabled_in, "proxy.config.http.keep_alive_enabled_in", INT, GENERIC) \ |
| X(HTTP_KEEP_ALIVE_ENABLED_OUT, keep_alive_enabled_out, "proxy.config.http.keep_alive_enabled_out", INT, GENERIC) \ |
| X(HTTP_KEEP_ALIVE_POST_OUT, keep_alive_post_out, "proxy.config.http.keep_alive_post_out", INT, GENERIC) \ |
| X(HTTP_SERVER_SESSION_SHARING_MATCH, server_session_sharing_match, "proxy.config.http.server_session_sharing.match", STRING, GENERIC) \ |
| X(NET_SOCK_RECV_BUFFER_SIZE_OUT, sock_recv_buffer_size_out, "proxy.config.net.sock_recv_buffer_size_out", INT, GENERIC) \ |
| X(NET_SOCK_SEND_BUFFER_SIZE_OUT, sock_send_buffer_size_out, "proxy.config.net.sock_send_buffer_size_out", INT, GENERIC) \ |
| X(NET_SOCK_OPTION_FLAG_OUT, sock_option_flag_out, "proxy.config.net.sock_option_flag_out", INT, GENERIC) \ |
| X(HTTP_FORWARD_PROXY_AUTH_TO_PARENT, fwd_proxy_auth_to_parent, "proxy.config.http.forward.proxy_auth_to_parent", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_REMOVE_FROM, anonymize_remove_from, "proxy.config.http.anonymize_remove_from", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_REMOVE_REFERER, anonymize_remove_referer, "proxy.config.http.anonymize_remove_referer", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_REMOVE_USER_AGENT, anonymize_remove_user_agent, "proxy.config.http.anonymize_remove_user_agent", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_REMOVE_COOKIE, anonymize_remove_cookie, "proxy.config.http.anonymize_remove_cookie", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_REMOVE_CLIENT_IP, anonymize_remove_client_ip, "proxy.config.http.anonymize_remove_client_ip", INT, GENERIC) \ |
| X(HTTP_ANONYMIZE_INSERT_CLIENT_IP, anonymize_insert_client_ip, "proxy.config.http.insert_client_ip", INT, GENERIC) \ |
| X(HTTP_RESPONSE_SERVER_ENABLED, proxy_response_server_enabled, "proxy.config.http.response_server_enabled", INT, GENERIC) \ |
| X(HTTP_INSERT_SQUID_X_FORWARDED_FOR, insert_squid_x_forwarded_for, "proxy.config.http.insert_squid_x_forwarded_for", INT, GENERIC) \ |
| X(HTTP_SEND_HTTP11_REQUESTS, send_http11_requests, "proxy.config.http.send_http11_requests", INT, GENERIC) \ |
| X(HTTP_CACHE_HTTP, cache_http, "proxy.config.http.cache.http", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_CLIENT_NO_CACHE, cache_ignore_client_no_cache, "proxy.config.http.cache.ignore_client_no_cache", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_CLIENT_CC_MAX_AGE, cache_ignore_client_cc_max_age, "proxy.config.http.cache.ignore_client_cc_max_age", INT, GENERIC) \ |
| X(HTTP_CACHE_IMS_ON_CLIENT_NO_CACHE, cache_ims_on_client_no_cache, "proxy.config.http.cache.ims_on_client_no_cache", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_SERVER_NO_CACHE, cache_ignore_server_no_cache, "proxy.config.http.cache.ignore_server_no_cache", INT, GENERIC) \ |
| X(HTTP_CACHE_CACHE_RESPONSES_TO_COOKIES, cache_responses_to_cookies, "proxy.config.http.cache.cache_responses_to_cookies", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_AUTHENTICATION, cache_ignore_auth, "proxy.config.http.cache.ignore_authentication", INT, GENERIC) \ |
| X(HTTP_CACHE_CACHE_URLS_THAT_LOOK_DYNAMIC, cache_urls_that_look_dynamic, "proxy.config.http.cache.cache_urls_that_look_dynamic", INT, GENERIC) \ |
| X(HTTP_CACHE_REQUIRED_HEADERS, cache_required_headers, "proxy.config.http.cache.required_headers", INT, GENERIC) \ |
| X(HTTP_INSERT_REQUEST_VIA_STR, insert_request_via_string, "proxy.config.http.insert_request_via_str", INT, GENERIC) \ |
| X(HTTP_INSERT_RESPONSE_VIA_STR, insert_response_via_string, "proxy.config.http.insert_response_via_str", INT, GENERIC) \ |
| X(HTTP_CACHE_HEURISTIC_MIN_LIFETIME, cache_heuristic_min_lifetime, "proxy.config.http.cache.heuristic_min_lifetime", INT, GENERIC) \ |
| X(HTTP_CACHE_HEURISTIC_MAX_LIFETIME, cache_heuristic_max_lifetime, "proxy.config.http.cache.heuristic_max_lifetime", INT, GENERIC) \ |
| X(HTTP_CACHE_GUARANTEED_MIN_LIFETIME, cache_guaranteed_min_lifetime, "proxy.config.http.cache.guaranteed_min_lifetime", INT, GENERIC) \ |
| X(HTTP_CACHE_GUARANTEED_MAX_LIFETIME, cache_guaranteed_max_lifetime, "proxy.config.http.cache.guaranteed_max_lifetime", INT, GENERIC) \ |
| X(HTTP_CACHE_MAX_STALE_AGE, cache_max_stale_age, "proxy.config.http.cache.max_stale_age", INT, GENERIC) \ |
| X(HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_IN, keep_alive_no_activity_timeout_in, "proxy.config.http.keep_alive_no_activity_timeout_in", INT, GENERIC) \ |
| X(HTTP_KEEP_ALIVE_NO_ACTIVITY_TIMEOUT_OUT, keep_alive_no_activity_timeout_out, "proxy.config.http.keep_alive_no_activity_timeout_out", INT, GENERIC) \ |
| X(HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_IN, transaction_no_activity_timeout_in, "proxy.config.http.transaction_no_activity_timeout_in", INT, GENERIC) \ |
| X(HTTP_TRANSACTION_NO_ACTIVITY_TIMEOUT_OUT, transaction_no_activity_timeout_out, "proxy.config.http.transaction_no_activity_timeout_out", INT, GENERIC) \ |
| X(HTTP_TRANSACTION_ACTIVE_TIMEOUT_OUT, transaction_active_timeout_out, "proxy.config.http.transaction_active_timeout_out", INT, GENERIC) \ |
| X(HTTP_CONNECT_ATTEMPTS_MAX_RETRIES, connect_attempts_max_retries, "proxy.config.http.connect_attempts_max_retries", INT, GENERIC) \ |
| X(HTTP_CONNECT_ATTEMPTS_MAX_RETRIES_DOWN_SERVER, connect_attempts_max_retries_down_server, "proxy.config.http.connect_attempts_max_retries_down_server", INT, GENERIC) \ |
| X(HTTP_CONNECT_ATTEMPTS_RR_RETRIES, connect_attempts_rr_retries, "proxy.config.http.connect_attempts_rr_retries", INT, GENERIC) \ |
| X(HTTP_CONNECT_ATTEMPTS_TIMEOUT, connect_attempts_timeout, "proxy.config.http.connect_attempts_timeout", INT, GENERIC) \ |
| X(HTTP_DOWN_SERVER_CACHE_TIME, down_server_timeout, "proxy.config.http.down_server.cache_time", INT, HttpDownServerCacheTimeConv) \ |
| X(HTTP_DOC_IN_CACHE_SKIP_DNS, doc_in_cache_skip_dns, "proxy.config.http.doc_in_cache_skip_dns", INT, GENERIC) \ |
| X(HTTP_BACKGROUND_FILL_ACTIVE_TIMEOUT, background_fill_active_timeout, "proxy.config.http.background_fill_active_timeout", INT, GENERIC) \ |
| X(HTTP_RESPONSE_SERVER_STR, proxy_response_server_string, "proxy.config.http.response_server_str", STRING, GENERIC) \ |
| X(HTTP_CACHE_HEURISTIC_LM_FACTOR, cache_heuristic_lm_factor, "proxy.config.http.cache.heuristic_lm_factor", FLOAT, GENERIC) \ |
| X(HTTP_BACKGROUND_FILL_COMPLETED_THRESHOLD, background_fill_threshold, "proxy.config.http.background_fill_completed_threshold", FLOAT, GENERIC) \ |
| X(NET_SOCK_PACKET_MARK_OUT, sock_packet_mark_out, "proxy.config.net.sock_packet_mark_out", INT, GENERIC) \ |
| X(NET_SOCK_PACKET_TOS_OUT, sock_packet_tos_out, "proxy.config.net.sock_packet_tos_out", INT, GENERIC) \ |
| X(HTTP_INSERT_AGE_IN_RESPONSE, insert_age_in_response, "proxy.config.http.insert_age_in_response", INT, GENERIC) \ |
| X(HTTP_CHUNKING_SIZE, http_chunking_size, "proxy.config.http.chunking.size", INT, GENERIC) \ |
| X(HTTP_FLOW_CONTROL_ENABLED, flow_control_enabled, "proxy.config.http.flow_control.enabled", INT, GENERIC) \ |
| X(HTTP_FLOW_CONTROL_LOW_WATER_MARK, flow_low_water_mark, "proxy.config.http.flow_control.low_water", INT, GENERIC) \ |
| X(HTTP_FLOW_CONTROL_HIGH_WATER_MARK, flow_high_water_mark, "proxy.config.http.flow_control.high_water", INT, GENERIC) \ |
| X(HTTP_CACHE_RANGE_LOOKUP, cache_range_lookup, "proxy.config.http.cache.range.lookup", INT, GENERIC) \ |
| X(HTTP_DEFAULT_BUFFER_SIZE, default_buffer_size_index, "proxy.config.http.default_buffer_size", INT, GENERIC) \ |
| X(HTTP_DEFAULT_BUFFER_WATER_MARK, default_buffer_water_mark, "proxy.config.http.default_buffer_water_mark", INT, GENERIC) \ |
| X(HTTP_REQUEST_HEADER_MAX_SIZE, request_hdr_max_size, "proxy.config.http.request_header_max_size", INT, GENERIC) \ |
| X(HTTP_RESPONSE_HEADER_MAX_SIZE, response_hdr_max_size, "proxy.config.http.response_header_max_size", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_REVALIDATING_ENABLED, negative_revalidating_enabled, "proxy.config.http.negative_revalidating_enabled", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_REVALIDATING_LIFETIME, negative_revalidating_lifetime, "proxy.config.http.negative_revalidating_lifetime", INT, GENERIC) \ |
| X(SSL_HSTS_MAX_AGE, proxy_response_hsts_max_age, "proxy.config.ssl.hsts_max_age", INT, GENERIC) \ |
| X(SSL_HSTS_INCLUDE_SUBDOMAINS, proxy_response_hsts_include_subdomains, "proxy.config.ssl.hsts_include_subdomains", INT, GENERIC) \ |
| X(HTTP_CACHE_OPEN_READ_RETRY_TIME, cache_open_read_retry_time, "proxy.config.http.cache.open_read_retry_time", INT, GENERIC) \ |
| X(HTTP_CACHE_MAX_OPEN_READ_RETRIES, max_cache_open_read_retries, "proxy.config.http.cache.max_open_read_retries", INT, GENERIC) \ |
| X(HTTP_CACHE_RANGE_WRITE, cache_range_write, "proxy.config.http.cache.range.write", INT, GENERIC) \ |
| X(HTTP_POST_CHECK_CONTENT_LENGTH_ENABLED, post_check_content_length_enabled, "proxy.config.http.post.check.content_length.enabled", INT, GENERIC) \ |
| X(HTTP_GLOBAL_USER_AGENT_HEADER, global_user_agent_header, "proxy.config.http.global_user_agent_header", STRING, GENERIC) \ |
| X(HTTP_AUTH_SERVER_SESSION_PRIVATE, auth_server_session_private, "proxy.config.http.auth_server_session_private", INT, GENERIC) \ |
| X(HTTP_SLOW_LOG_THRESHOLD, slow_log_threshold, "proxy.config.http.slow.log.threshold", INT, GENERIC) \ |
| X(HTTP_CACHE_GENERATION, cache_generation_number, "proxy.config.http.cache.generation", INT, GENERIC) \ |
| X(BODY_FACTORY_TEMPLATE_BASE, body_factory_template_base, "proxy.config.body_factory.template_base", STRING, GENERIC) \ |
| X(HTTP_CACHE_OPEN_WRITE_FAIL_ACTION, cache_open_write_fail_action, "proxy.config.http.cache.open_write_fail_action", INT, GENERIC) \ |
| X(HTTP_NUMBER_OF_REDIRECTIONS, number_of_redirections, "proxy.config.http.number_of_redirections", INT, GENERIC) \ |
| X(HTTP_CACHE_MAX_OPEN_WRITE_RETRIES, max_cache_open_write_retries, "proxy.config.http.cache.max_open_write_retries", INT, GENERIC) \ |
| X(HTTP_CACHE_MAX_OPEN_WRITE_RETRY_TIMEOUT, max_cache_open_write_retry_timeout, "proxy.config.http.cache.max_open_write_retry_timeout", INT, GENERIC) \ |
| X(HTTP_REDIRECT_USE_ORIG_CACHE_KEY, redirect_use_orig_cache_key, "proxy.config.http.redirect_use_orig_cache_key", INT, GENERIC) \ |
| X(HTTP_ATTACH_SERVER_SESSION_TO_CLIENT, attach_server_session_to_client, "proxy.config.http.attach_server_session_to_client", INT, GENERIC) \ |
| X(WEBSOCKET_NO_ACTIVITY_TIMEOUT, websocket_inactive_timeout, "proxy.config.websocket.no_activity_timeout", INT, GENERIC) \ |
| X(WEBSOCKET_ACTIVE_TIMEOUT, websocket_active_timeout, "proxy.config.websocket.active_timeout", INT, GENERIC) \ |
| X(HTTP_UNCACHEABLE_REQUESTS_BYPASS_PARENT, uncacheable_requests_bypass_parent, "proxy.config.http.uncacheable_requests_bypass_parent", INT, GENERIC) \ |
| X(HTTP_PARENT_PROXY_TOTAL_CONNECT_ATTEMPTS, parent_connect_attempts, "proxy.config.http.parent_proxy.total_connect_attempts", INT, GENERIC) \ |
| X(HTTP_TRANSACTION_ACTIVE_TIMEOUT_IN, transaction_active_timeout_in, "proxy.config.http.transaction_active_timeout_in", INT, GENERIC) \ |
| X(SRV_ENABLED, srv_enabled, "proxy.config.srv_enabled", INT, GENERIC) \ |
| X(HTTP_FORWARD_CONNECT_METHOD, forward_connect_method, "proxy.config.http.forward_connect_method", INT, GENERIC) \ |
| X(SSL_CERT_FILENAME, ssl_client_cert_filename, "proxy.config.ssl.client.cert.filename", STRING, NONE) \ |
| X(SSL_CERT_FILEPATH, ssl_client_cert_filename, "proxy.config.ssl.client.cert.path", STRING, NONE) \ |
| X(PARENT_FAILURES_UPDATE_HOSTDB, parent_failures_update_hostdb, "proxy.config.http.parent_proxy.mark_down_hostdb", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_ACCEPT_MISMATCH, ignore_accept_mismatch, "proxy.config.http.cache.ignore_accept_mismatch", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_ACCEPT_LANGUAGE_MISMATCH, ignore_accept_language_mismatch, "proxy.config.http.cache.ignore_accept_language_mismatch", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_ACCEPT_ENCODING_MISMATCH, ignore_accept_encoding_mismatch, "proxy.config.http.cache.ignore_accept_encoding_mismatch", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_ACCEPT_CHARSET_MISMATCH, ignore_accept_charset_mismatch, "proxy.config.http.cache.ignore_accept_charset_mismatch", INT, GENERIC) \ |
| X(HTTP_PARENT_PROXY_FAIL_THRESHOLD, parent_fail_threshold, "proxy.config.http.parent_proxy.fail_threshold", INT, GENERIC) \ |
| X(HTTP_PARENT_PROXY_RETRY_TIME, parent_retry_time, "proxy.config.http.parent_proxy.retry_time", INT, GENERIC) \ |
| X(HTTP_PER_PARENT_CONNECT_ATTEMPTS, per_parent_connect_attempts, "proxy.config.http.parent_proxy.per_parent_connect_attempts", INT, GENERIC) \ |
| X(HTTP_NORMALIZE_AE, normalize_ae, "proxy.config.http.normalize_ae", INT, GENERIC) \ |
| X(HTTP_INSERT_FORWARDED, insert_forwarded, "proxy.config.http.insert_forwarded", STRING, GENERIC) \ |
| X(HTTP_PROXY_PROTOCOL_OUT, proxy_protocol_out, "proxy.config.http.proxy_protocol_out", INT, GENERIC) \ |
| X(HTTP_ALLOW_MULTI_RANGE, allow_multi_range, "proxy.config.http.allow_multi_range", INT, GENERIC) \ |
| X(HTTP_REQUEST_BUFFER_ENABLED, request_buffer_enabled, "proxy.config.http.request_buffer_enabled", INT, GENERIC) \ |
| X(HTTP_ALLOW_HALF_OPEN, allow_half_open, "proxy.config.http.allow_half_open", INT, GENERIC) \ |
| X(HTTP_SERVER_MIN_KEEP_ALIVE_CONNS, connection_tracker_config.server_min, ConnectionTracker::CONFIG_SERVER_VAR_MIN, INT, ConnectionTracker_MIN_SERVER_CONV) \ |
| X(HTTP_PER_SERVER_CONNECTION_MAX, connection_tracker_config.server_max, ConnectionTracker::CONFIG_SERVER_VAR_MAX, INT, ConnectionTracker_MAX_SERVER_CONV) \ |
| X(HTTP_PER_SERVER_CONNECTION_MATCH, connection_tracker_config.server_match, ConnectionTracker::CONFIG_SERVER_VAR_MATCH, INT, ConnectionTracker_SERVER_MATCH_CONV) \ |
| X(SSL_CLIENT_VERIFY_SERVER_POLICY, ssl_client_verify_server_policy, "proxy.config.ssl.client.verify.server.policy", STRING, NONE) \ |
| X(SSL_CLIENT_VERIFY_SERVER_PROPERTIES, ssl_client_verify_server_properties, "proxy.config.ssl.client.verify.server.properties", STRING, NONE) \ |
| X(SSL_CLIENT_SNI_POLICY, ssl_client_sni_policy, "proxy.config.ssl.client.sni_policy", STRING, NONE) \ |
| X(SSL_CLIENT_PRIVATE_KEY_FILENAME, ssl_client_private_key_filename, "proxy.config.ssl.client.private_key.filename", STRING, NONE) \ |
| X(SSL_CLIENT_CA_CERT_FILENAME, ssl_client_ca_cert_filename, "proxy.config.ssl.client.CA.cert.filename", STRING, NONE) \ |
| X(SSL_CLIENT_ALPN_PROTOCOLS, ssl_client_alpn_protocols, "proxy.config.ssl.client.alpn_protocols", STRING, NONE) \ |
| X(HTTP_HOST_RESOLUTION_PREFERENCE, host_res_data, "proxy.config.hostdb.ip_resolve", STRING, HttpTransact_HOST_RES_CONV) \ |
| X(HTTP_CONNECT_DOWN_POLICY, connect_down_policy, "proxy.config.http.connect.down.policy", INT, GENERIC) \ |
| X(HTTP_MAX_PROXY_CYCLES, max_proxy_cycles, "proxy.config.http.max_proxy_cycles", INT, GENERIC) \ |
| X(PLUGIN_VC_DEFAULT_BUFFER_INDEX, plugin_vc_default_buffer_index, "proxy.config.plugin.vc.default_buffer_index", INT, GENERIC) \ |
| X(PLUGIN_VC_DEFAULT_BUFFER_WATER_MARK, plugin_vc_default_buffer_water_mark, "proxy.config.plugin.vc.default_buffer_water_mark", INT, GENERIC) \ |
| X(NET_SOCK_NOTSENT_LOWAT, sock_packet_notsent_lowat, "proxy.config.net.sock_notsent_lowat", INT, GENERIC) \ |
| X(BODY_FACTORY_RESPONSE_SUPPRESSION_MODE, response_suppression_mode, "proxy.config.body_factory.response_suppression_mode", INT, GENERIC) \ |
| X(HTTP_ENABLE_PARENT_TIMEOUT_MARKDOWNS, enable_parent_timeout_markdowns, "proxy.config.http.parent_proxy.enable_parent_timeout_markdowns", INT, GENERIC) \ |
| X(HTTP_DISABLE_PARENT_MARKDOWNS, disable_parent_markdowns, "proxy.config.http.parent_proxy.disable_parent_markdowns", INT, GENERIC) \ |
| X(NET_DEFAULT_INACTIVITY_TIMEOUT, default_inactivity_timeout, "proxy.config.net.default_inactivity_timeout", INT, GENERIC) \ |
| X(HTTP_NO_DNS_JUST_FORWARD_TO_PARENT, no_dns_forward_to_parent, "proxy.config.http.no_dns_just_forward_to_parent", INT, GENERIC) \ |
| X(HTTP_CACHE_IGNORE_QUERY, cache_ignore_query, "proxy.config.http.cache.ignore_query", INT, GENERIC) \ |
| X(HTTP_DROP_CHUNKED_TRAILERS, http_drop_chunked_trailers, "proxy.config.http.drop_chunked_trailers", INT, GENERIC) \ |
| X(HTTP_STRICT_CHUNK_PARSING, http_strict_chunk_parsing, "proxy.config.http.strict_chunk_parsing", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_CACHING_LIST, negative_caching_list, "proxy.config.http.negative_caching_list", STRING, HttpStatusCodeList_Conv) \ |
| X(HTTP_CONNECT_ATTEMPTS_RETRY_BACKOFF_BASE, connect_attempts_retry_backoff_base, "proxy.config.http.connect_attempts_retry_backoff_base", INT, GENERIC) \ |
| X(HTTP_NEGATIVE_REVALIDATING_LIST, negative_revalidating_list, "proxy.config.http.negative_revalidating_list", STRING, HttpStatusCodeList_Conv) \ |
| X(HTTP_CACHE_POST_METHOD, cache_post_method, "proxy.config.http.cache.post_method", INT, GENERIC) |
| |
| // clang-format on |