You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bn...@apache.org on 2023/05/24 04:12:53 UTC

[trafficserver] branch master updated: Make config.proxy.http.no_dns_just_forward_to_parent overridable (#9728)

This is an automated email from the ASF dual-hosted git repository.

bnolsen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new fd63b698f6 Make config.proxy.http.no_dns_just_forward_to_parent overridable (#9728)
fd63b698f6 is described below

commit fd63b698f6b9380347379c9dc651c5e74fb74762
Author: Brian Olsen <br...@comcast.com>
AuthorDate: Tue May 23 22:12:45 2023 -0600

    Make config.proxy.http.no_dns_just_forward_to_parent overridable (#9728)
    
    * make config.proxy.http.no_dns_just_forward_to_parent overridable
    
    * add no_dns_just_forward_to_parent to lua
    
    * header_rewrite: add debug in case set-config operator fails
    
    ---------
    
    Co-authored-by: Brian Olsen <bo...@comcast.com>
---
 doc/admin-guide/files/records.yaml.en.rst          |   1 +
 .../api/functions/TSHttpOverridableConfig.en.rst   |   1 +
 .../api/types/TSOverridableConfigKey.en.rst        |   1 +
 include/ts/apidefs.h.in                            |   3 +-
 plugins/header_rewrite/operators.cc                |   6 ++
 plugins/lua/ts_lua_http_config.c                   |   2 +
 proxy/http/HttpConfig.cc                           |   5 +-
 proxy/http/HttpConfig.h                            |  14 +--
 proxy/http/HttpSM.cc                               |   4 +-
 proxy/http/HttpTransact.cc                         |  19 ++--
 src/shared/overridable_txn_vars.cc                 |   2 +
 src/traffic_server/InkAPI.cc                       |   3 +
 src/traffic_server/InkAPITest.cc                   | 113 +++++++++++----------
 13 files changed, 96 insertions(+), 78 deletions(-)

diff --git a/doc/admin-guide/files/records.yaml.en.rst b/doc/admin-guide/files/records.yaml.en.rst
index 359bceaadd..35982acd6e 100644
--- a/doc/admin-guide/files/records.yaml.en.rst
+++ b/doc/admin-guide/files/records.yaml.en.rst
@@ -1355,6 +1355,7 @@ Parent Proxy Configuration
 
 .. ts:cv:: CONFIG proxy.config.http.no_dns_just_forward_to_parent INT 0
    :reloadable:
+   :overridable:
 
    Don't try to resolve DNS, forward all DNS requests to the parent. This is off (``0``) by default.
 
diff --git a/doc/developer-guide/api/functions/TSHttpOverridableConfig.en.rst b/doc/developer-guide/api/functions/TSHttpOverridableConfig.en.rst
index 1389f9b317..38567a35e3 100644
--- a/doc/developer-guide/api/functions/TSHttpOverridableConfig.en.rst
+++ b/doc/developer-guide/api/functions/TSHttpOverridableConfig.en.rst
@@ -139,6 +139,7 @@ TSOverridableConfigKey Value                                              Config
 :c:enumerator:`TS_CONFIG_HTTP_NEGATIVE_CACHING_LIFETIME`                  :ts:cv:`proxy.config.http.negative_caching_lifetime`
 :c:enumerator:`TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_ENABLED`              :ts:cv:`proxy.config.http.negative_revalidating_enabled`
 :c:enumerator:`TS_CONFIG_HTTP_NEGATIVE_REVALIDATING_LIFETIME`             :ts:cv:`proxy.config.http.negative_revalidating_lifetime`
+:c:enumerator:`TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT`              :ts:cv:`proxy.config.http.no_dns_just_forward_to_parent`
 :c:enumerator:`TS_CONFIG_HTTP_NORMALIZE_AE`                               :ts:cv:`proxy.config.http.normalize_ae`
 :c:enumerator:`TS_CONFIG_HTTP_NUMBER_OF_REDIRECTIONS`                     :ts:cv:`proxy.config.http.number_of_redirections`
 :c:enumerator:`TS_CONFIG_HTTP_PARENT_PROXY_FAIL_THRESHOLD`                :ts:cv:`proxy.config.http.parent_proxy.fail_threshold`
diff --git a/doc/developer-guide/api/types/TSOverridableConfigKey.en.rst b/doc/developer-guide/api/types/TSOverridableConfigKey.en.rst
index 9b30e52a90..796fe563ac 100644
--- a/doc/developer-guide/api/types/TSOverridableConfigKey.en.rst
+++ b/doc/developer-guide/api/types/TSOverridableConfigKey.en.rst
@@ -154,6 +154,7 @@ Enumeration Members
 .. c:enumerator:: TS_CONFIG_NET_SOCK_NOTSENT_LOWAT
 .. c:enumerator:: TS_CONFIG_BODY_FACTORY_RESPONSE_SUPPRESSION_MODE
 .. c:enumerator:: TS_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT
+.. c:enumerator:: TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT
 
 
 Description
diff --git a/include/ts/apidefs.h.in b/include/ts/apidefs.h.in
index 0e57957639..729da51bae 100644
--- a/include/ts/apidefs.h.in
+++ b/include/ts/apidefs.h.in
@@ -887,7 +887,8 @@ typedef enum {
   TS_CONFIG_HTTP_ENABLE_PARENT_TIMEOUT_MARKDOWNS,
   TS_CONFIG_HTTP_DISABLE_PARENT_MARKDOWNS,
   TS_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT,
-  TS_CONFIG_LAST_ENTRY
+  TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT,
+  TS_CONFIG_LAST_ENTRY,
 } TSOverridableConfigKey;
 
 /* The TASK pool of threads is the primary method of off-loading continuations from the
diff --git a/plugins/header_rewrite/operators.cc b/plugins/header_rewrite/operators.cc
index 1f6f6327c5..0d7a7faf17 100644
--- a/plugins/header_rewrite/operators.cc
+++ b/plugins/header_rewrite/operators.cc
@@ -51,16 +51,22 @@ OperatorSetConfig::exec(const Resources &res) const
     case TS_RECORDDATATYPE_INT:
       if (TS_SUCCESS == TSHttpTxnConfigIntSet(res.txnp, _key, _value.get_int_value())) {
         TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invoked on %s=%d", _config.c_str(), _value.get_int_value());
+      } else {
+        TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invocation failed on %s=%d", _config.c_str(), _value.get_int_value());
       }
       break;
     case TS_RECORDDATATYPE_FLOAT:
       if (TS_SUCCESS == TSHttpTxnConfigFloatSet(res.txnp, _key, _value.get_float_value())) {
         TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invoked on %s=%f", _config.c_str(), _value.get_float_value());
+      } else {
+        TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invocation failed on %s=%f", _config.c_str(), _value.get_float_value());
       }
       break;
     case TS_RECORDDATATYPE_STRING:
       if (TS_SUCCESS == TSHttpTxnConfigStringSet(res.txnp, _key, _value.get_value().c_str(), _value.size())) {
         TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invoked on %s=%s", _config.c_str(), _value.get_value().c_str());
+      } else {
+        TSDebug(PLUGIN_NAME, "OperatorSetConfig::exec() invocation failed on %s=%s", _config.c_str(), _value.get_value().c_str());
       }
       break;
     default:
diff --git a/plugins/lua/ts_lua_http_config.c b/plugins/lua/ts_lua_http_config.c
index 95d3e2f460..c2055e8b73 100644
--- a/plugins/lua/ts_lua_http_config.c
+++ b/plugins/lua/ts_lua_http_config.c
@@ -145,6 +145,7 @@ typedef enum {
   TS_LUA_CONFIG_ENABLE_PARENT_TIMEOUT_MARKDOWNS               = TS_CONFIG_HTTP_ENABLE_PARENT_TIMEOUT_MARKDOWNS,
   TS_LUA_CONFIG_DISABLE_PARENT_MARKDOWNS                      = TS_CONFIG_HTTP_DISABLE_PARENT_MARKDOWNS,
   TS_LUA_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT                = TS_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT,
+  TS_LUA_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT            = TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT,
   TS_LUA_CONFIG_LAST_ENTRY                                    = TS_CONFIG_LAST_ENTRY,
 } TSLuaOverridableConfigKey;
 
@@ -282,6 +283,7 @@ ts_lua_var_item ts_lua_http_config_vars[] = {
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_ENABLE_PARENT_TIMEOUT_MARKDOWNS),
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_DISABLE_PARENT_MARKDOWNS),
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT),
+  TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT),
   TS_LUA_MAKE_VAR_ITEM(TS_LUA_CONFIG_LAST_ENTRY),
 };
 
diff --git a/proxy/http/HttpConfig.cc b/proxy/http/HttpConfig.cc
index 8be8e841cb..cd6785b7ed 100644
--- a/proxy/http/HttpConfig.cc
+++ b/proxy/http/HttpConfig.cc
@@ -1179,7 +1179,7 @@ HttpConfig::startup()
   HttpEstablishStaticConfigByte(c.disable_ssl_parenting, "proxy.local.http.parent_proxy.disable_connect_tunneling");
   HttpEstablishStaticConfigByte(c.oride.forward_connect_method, "proxy.config.http.forward_connect_method");
 
-  HttpEstablishStaticConfigByte(c.no_dns_forward_to_parent, "proxy.config.http.no_dns_just_forward_to_parent");
+  HttpEstablishStaticConfigByte(c.oride.no_dns_forward_to_parent, "proxy.config.http.no_dns_just_forward_to_parent");
   HttpEstablishStaticConfigByte(c.oride.uncacheable_requests_bypass_parent, "proxy.config.http.uncacheable_requests_bypass_parent");
   HttpEstablishStaticConfigByte(c.oride.doc_in_cache_skip_dns, "proxy.config.http.doc_in_cache_skip_dns");
 
@@ -1456,7 +1456,7 @@ HttpConfig::reconfigure()
 
   params->proxy_hostname                           = ats_strdup(m_master.proxy_hostname);
   params->proxy_hostname_len                       = (params->proxy_hostname) ? strlen(params->proxy_hostname) : 0;
-  params->no_dns_forward_to_parent                 = INT_TO_BOOL(m_master.no_dns_forward_to_parent);
+  params->oride.no_dns_forward_to_parent           = INT_TO_BOOL(m_master.oride.no_dns_forward_to_parent);
   params->oride.uncacheable_requests_bypass_parent = INT_TO_BOOL(m_master.oride.uncacheable_requests_bypass_parent);
   params->no_origin_server_dns                     = INT_TO_BOOL(m_master.no_origin_server_dns);
   params->use_client_target_addr                   = m_master.use_client_target_addr;
@@ -1556,6 +1556,7 @@ HttpConfig::reconfigure()
   params->oride.parent_fail_threshold           = m_master.oride.parent_fail_threshold;
   params->oride.per_parent_connect_attempts     = m_master.oride.per_parent_connect_attempts;
   params->oride.parent_failures_update_hostdb   = m_master.oride.parent_failures_update_hostdb;
+  params->oride.no_dns_forward_to_parent        = m_master.oride.no_dns_forward_to_parent;
   params->oride.enable_parent_timeout_markdowns = m_master.oride.enable_parent_timeout_markdowns;
   params->oride.disable_parent_markdowns        = m_master.oride.disable_parent_markdowns;
 
diff --git a/proxy/http/HttpConfig.h b/proxy/http/HttpConfig.h
index 8bb9d83ff1..3bb0244788 100644
--- a/proxy/http/HttpConfig.h
+++ b/proxy/http/HttpConfig.h
@@ -579,9 +579,9 @@ struct OverridableHttpConfigParams {
   MgmtByte insert_request_via_string  = 1;
   MgmtByte insert_response_via_string = 0;
 
-  //////////////////////
-  //  DOC IN CACHE NO DNS//
-  //////////////////////
+  /////////////////////////
+  // DOC IN CACHE NO DNS //
+  /////////////////////////
   MgmtByte doc_in_cache_skip_dns = 1;
   MgmtByte flow_control_enabled  = 0;
 
@@ -595,6 +595,7 @@ struct OverridableHttpConfigParams {
   //////////////////////////
   MgmtByte srv_enabled                   = 0;
   MgmtByte parent_failures_update_hostdb = 0;
+  MgmtByte no_dns_forward_to_parent      = 0;
 
   MgmtByte cache_open_write_fail_action = 0;
 
@@ -822,10 +823,9 @@ public:
   ///////////////////////////////////////////////////////////////////
   MgmtByte disable_ssl_parenting = 0;
 
-  MgmtByte no_dns_forward_to_parent = 0;
-  MgmtByte no_origin_server_dns     = 0;
-  MgmtByte use_client_target_addr   = 0;
-  MgmtByte use_client_source_port   = 0;
+  MgmtByte no_origin_server_dns   = 0;
+  MgmtByte use_client_target_addr = 0;
+  MgmtByte use_client_source_port = 0;
 
   MgmtByte enable_http_stats = 1; // Can be "slow"
 
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index a34d8ad869..22a80696fb 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -4530,7 +4530,7 @@ HttpSM::do_hostdb_lookup()
   milestones[TS_MILESTONE_DNS_LOOKUP_BEGIN] = Thread::get_hrtime();
 
   // If directed to not look up fqdns then mark as resolved
-  if (t_state.http_config_param->no_dns_forward_to_parent && t_state.parent_result.result == PARENT_UNDEFINED) {
+  if (t_state.txn_conf->no_dns_forward_to_parent && t_state.parent_result.result == PARENT_UNDEFINED) {
     t_state.dns_info.resolved_p = true;
     call_transact_and_set_next_state(nullptr);
     return;
@@ -7923,7 +7923,7 @@ HttpSM::set_next_state()
 
       call_transact_and_set_next_state(nullptr);
       break;
-    } else if (t_state.dns_info.looking_up == ResolveInfo::ORIGIN_SERVER && t_state.http_config_param->no_dns_forward_to_parent &&
+    } else if (t_state.dns_info.looking_up == ResolveInfo::ORIGIN_SERVER && t_state.txn_conf->no_dns_forward_to_parent &&
                t_state.parent_result.result != PARENT_UNDEFINED) {
       t_state.dns_info.resolved_p = true; // seems dangerous - where's the IP address?
       call_transact_and_set_next_state(nullptr);
diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc
index f27439f8dd..3296671632 100644
--- a/proxy/http/HttpTransact.cc
+++ b/proxy/http/HttpTransact.cc
@@ -585,7 +585,7 @@ find_server_and_update_current_info(HttpTransact::State *s)
       TxnDebug("http_trans", "request not cacheable, so bypass parent");
       s->parent_result.result = PARENT_DIRECT;
     }
-  } else if (s->txn_conf->uncacheable_requests_bypass_parent && s->http_config_param->no_dns_forward_to_parent == 0 &&
+  } else if (s->txn_conf->uncacheable_requests_bypass_parent && s->txn_conf->no_dns_forward_to_parent == 0 &&
              !HttpTransact::is_request_cache_lookupable(s)) {
     // request not lookupable and cacheable, so bypass parent if the parent is not an origin server.
     // Note that the configuration of the proxy as well as the request
@@ -614,7 +614,7 @@ find_server_and_update_current_info(HttpTransact::State *s)
       // We already have a parent that failed, if we are now told
       //  to go the origin server, we can only obey this if we
       //  dns'ed the origin server
-      if (s->parent_result.result == PARENT_DIRECT && s->http_config_param->no_dns_forward_to_parent != 0) {
+      if (s->parent_result.result == PARENT_DIRECT && s->txn_conf->no_dns_forward_to_parent != 0) {
         ink_assert(!s->server_info.dst_addr.isValid());
         s->parent_result.result = PARENT_FAIL;
       }
@@ -625,7 +625,7 @@ find_server_and_update_current_info(HttpTransact::State *s)
       //   1) the config permitted us to dns the origin server
       //   2) the config permits us
       //   3) the parent was not set from API
-      if (s->http_config_param->no_dns_forward_to_parent == 0 && bypass_ok(s) && parent_is_proxy(s) &&
+      if (s->txn_conf->no_dns_forward_to_parent == 0 && bypass_ok(s) && parent_is_proxy(s) &&
           !s->parent_params->apiParentExists(&s->request_data)) {
         s->parent_result.result = PARENT_DIRECT;
       }
@@ -658,7 +658,7 @@ find_server_and_update_current_info(HttpTransact::State *s)
   case PARENT_DIRECT:
     // if the configuration does not allow the origin to be dns'd
     // we're unable to go direct to the origin.
-    if (s->http_config_param->no_dns_forward_to_parent) {
+    if (s->txn_conf->no_dns_forward_to_parent) {
       Warning("no available parents and the config proxy.config.http.no_dns_just_forward_to_parent, prevents origin lookups.");
       s->parent_result.result = PARENT_FAIL;
       return ResolveInfo::HOST_NONE;
@@ -1600,8 +1600,7 @@ HttpTransact::HandleRequest(State *s)
     TRANSACT_RETURN(SM_ACTION_INTERNAL_CACHE_NOOP, nullptr);
   }
 
-  if (s->http_config_param->no_dns_forward_to_parent && s->scheme != URL_WKSIDX_HTTPS &&
-      strcmp(s->server_info.name, "127.0.0.1") != 0) {
+  if (s->txn_conf->no_dns_forward_to_parent && s->scheme != URL_WKSIDX_HTTPS && strcmp(s->server_info.name, "127.0.0.1") != 0) {
     // for HTTPS requests, we must go directly to the
     // origin server. Ignore the no_dns_just_forward_to_parent setting.
     // we need to see if the hostname is an
@@ -1811,7 +1810,7 @@ HttpTransact::PPDNSLookup(State *s)
     if (!s->current.server->dst_addr.isValid()) {
       if (s->current.request_to == ResolveInfo::PARENT_PROXY) {
         TRANSACT_RETURN(SM_ACTION_DNS_LOOKUP, PPDNSLookupAPICall);
-      } else if (s->parent_result.result == PARENT_DIRECT && s->http_config_param->no_dns_forward_to_parent != 1) {
+      } else if (s->parent_result.result == PARENT_DIRECT && s->txn_conf->no_dns_forward_to_parent != 1) {
         // We ran out of parents but parent configuration allows us to go to Origin Server directly
         CallOSDNSLookup(s);
         return;
@@ -2019,7 +2018,7 @@ HttpTransact::OSDNSLookup(State *s)
     // therefore no more backtracking - return to trying the server.
     TRANSACT_RETURN(how_to_open_connection(s), HttpTransact::HandleResponse);
   } else if (s->dns_info.lookup_name[0] <= '9' && s->dns_info.lookup_name[0] >= '0' && s->parent_params->parent_table->hostMatch &&
-             !s->http_config_param->no_dns_forward_to_parent) {
+             !s->txn_conf->no_dns_forward_to_parent) {
     // note, broken logic: ACC fudges the OR stmt to always be true,
     // 'AuthHttpAdapter' should do the rev-dns if needed, not here .
     TRANSACT_RETURN(SM_ACTION_DNS_REVERSE_LOOKUP, HttpTransact::StartAccessControl);
@@ -3311,8 +3310,8 @@ HttpTransact::HandleCacheOpenReadMiss(State *s)
     }
     if (!s->current.server->dst_addr.isValid()) {
       ink_release_assert(s->parent_result.result == PARENT_DIRECT || s->current.request_to == ResolveInfo::PARENT_PROXY ||
-                         s->http_config_param->no_dns_forward_to_parent != 0);
-      if (s->parent_result.result == PARENT_DIRECT && s->http_config_param->no_dns_forward_to_parent != 1) {
+                         s->txn_conf->no_dns_forward_to_parent != 0);
+      if (s->parent_result.result == PARENT_DIRECT && s->txn_conf->no_dns_forward_to_parent != 1) {
         return CallOSDNSLookup(s);
       }
       if (s->current.request_to == ResolveInfo::PARENT_PROXY) {
diff --git a/src/shared/overridable_txn_vars.cc b/src/shared/overridable_txn_vars.cc
index 855c34a8d1..6e6c3c60a6 100644
--- a/src/shared/overridable_txn_vars.cc
+++ b/src/shared/overridable_txn_vars.cc
@@ -152,6 +152,7 @@ const std::unordered_map<std::string_view, std::tuple<const TSOverridableConfigK
      {TS_CONFIG_HTTP_CONNECT_ATTEMPTS_MAX_RETRIES_DEAD_SERVER, TS_RECORDDATATYPE_INT}                                                           },
     {"proxy.config.http.parent_proxy.per_parent_connect_attempts",
      {TS_CONFIG_HTTP_PER_PARENT_CONNECT_ATTEMPTS, TS_RECORDDATATYPE_INT}                                                                        },
+    {"proxy.config.http.no_dns_just_forward_to_parent",                {TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT, TS_RECORDDATATYPE_INT}    },
     {"proxy.config.ssl.client.verify.server.policy",                   {TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_POLICY, TS_RECORDDATATYPE_STRING}    },
     {"proxy.config.ssl.client.verify.server.properties",               {TS_CONFIG_SSL_CLIENT_VERIFY_SERVER_PROPERTIES, TS_RECORDDATATYPE_STRING}},
     {"proxy.config.ssl.client.sni_policy",                             {TS_CONFIG_SSL_CLIENT_SNI_POLICY, TS_RECORDDATATYPE_STRING}              },
@@ -169,5 +170,6 @@ const std::unordered_map<std::string_view, std::tuple<const TSOverridableConfigK
     {"proxy.config.http.parent_proxy.enable_parent_timeout_markdowns",
      {TS_CONFIG_HTTP_ENABLE_PARENT_TIMEOUT_MARKDOWNS, TS_RECORDDATATYPE_INT}                                                                    },
     {"proxy.config.http.parent_proxy.disable_parent_markdowns",        {TS_CONFIG_HTTP_DISABLE_PARENT_MARKDOWNS, TS_RECORDDATATYPE_INT}         },
+    {"proxy.config.http.parent_proxy.disable_parent_markdowns",        {TS_CONFIG_HTTP_DISABLE_PARENT_MARKDOWNS, TS_RECORDDATATYPE_INT}         },
     {"proxy.config.net.default_inactivity_timeout",                    {TS_CONFIG_NET_DEFAULT_INACTIVITY_TIMEOUT, TS_RECORDDATATYPE_INT}        }
 });
diff --git a/src/traffic_server/InkAPI.cc b/src/traffic_server/InkAPI.cc
index 8cc5acfa83..2baf4280b4 100644
--- a/src/traffic_server/InkAPI.cc
+++ b/src/traffic_server/InkAPI.cc
@@ -8805,6 +8805,9 @@ _conf_to_memberp(TSOverridableConfigKey conf, OverridableHttpConfigParams *overr
     ret  = &overridableHttpConfig->host_res_data;
     conv = &HttpTransact::HOST_RES_CONV;
     break;
+  case TS_CONFIG_HTTP_NO_DNS_JUST_FORWARD_TO_PARENT:
+    ret = _memberp_to_generic(&overridableHttpConfig->no_dns_forward_to_parent, conv);
+    break;
   case TS_CONFIG_PLUGIN_VC_DEFAULT_BUFFER_INDEX:
     ret = _memberp_to_generic(&overridableHttpConfig->plugin_vc_default_buffer_index, conv);
     break;
diff --git a/src/traffic_server/InkAPITest.cc b/src/traffic_server/InkAPITest.cc
index 57093c06ce..ed8e498dfa 100644
--- a/src/traffic_server/InkAPITest.cc
+++ b/src/traffic_server/InkAPITest.cc
@@ -8580,61 +8580,61 @@ EXCLUSIVE_REGRESSION_TEST(SDK_API_TSHttpConnectServerIntercept)(RegressionTest *
 
 // The order of these should be the same as TSOverridableConfigKey
 std::array<std::string_view, TS_CONFIG_LAST_ENTRY> SDK_Overridable_Configs = {
-  {"proxy.config.url_remap.pristine_host_hdr",
-   "proxy.config.http.chunking_enabled", "proxy.config.http.negative_caching_enabled",
-   "proxy.config.http.negative_caching_lifetime", "proxy.config.http.cache.when_to_revalidate",
-   "proxy.config.http.keep_alive_enabled_in", "proxy.config.http.keep_alive_enabled_out",
-   "proxy.config.http.keep_alive_post_out", "proxy.config.http.server_session_sharing.match",
-   "proxy.config.net.sock_recv_buffer_size_out", "proxy.config.net.sock_send_buffer_size_out",
-   "proxy.config.net.sock_option_flag_out", "proxy.config.http.forward.proxy_auth_to_parent",
-   "proxy.config.http.anonymize_remove_from", "proxy.config.http.anonymize_remove_referer",
-   "proxy.config.http.anonymize_remove_user_agent", "proxy.config.http.anonymize_remove_cookie",
-   "proxy.config.http.anonymize_remove_client_ip", "proxy.config.http.insert_client_ip",
-   "proxy.config.http.response_server_enabled", "proxy.config.http.insert_squid_x_forwarded_for",
-   "proxy.config.http.send_http11_requests", "proxy.config.http.cache.http",
-   "proxy.config.http.cache.ignore_client_no_cache", "proxy.config.http.cache.ignore_client_cc_max_age",
-   "proxy.config.http.cache.ims_on_client_no_cache", "proxy.config.http.cache.ignore_server_no_cache",
-   "proxy.config.http.cache.cache_responses_to_cookies", "proxy.config.http.cache.ignore_authentication",
-   "proxy.config.http.cache.cache_urls_that_look_dynamic", "proxy.config.http.cache.required_headers",
-   "proxy.config.http.insert_request_via_str", "proxy.config.http.insert_response_via_str",
-   "proxy.config.http.cache.heuristic_min_lifetime", "proxy.config.http.cache.heuristic_max_lifetime",
-   "proxy.config.http.cache.guaranteed_min_lifetime", "proxy.config.http.cache.guaranteed_max_lifetime",
-   "proxy.config.http.cache.max_stale_age", "proxy.config.http.keep_alive_no_activity_timeout_in",
-   "proxy.config.http.keep_alive_no_activity_timeout_out", "proxy.config.http.transaction_no_activity_timeout_in",
-   "proxy.config.http.transaction_no_activity_timeout_out", "proxy.config.http.transaction_active_timeout_out",
-   "proxy.config.http.connect_attempts_max_retries", "proxy.config.http.connect_attempts_max_retries_dead_server",
-   "proxy.config.http.connect_attempts_rr_retries", "proxy.config.http.connect_attempts_timeout",
-   "proxy.config.http.down_server.cache_time", "proxy.config.http.doc_in_cache_skip_dns",
-   "proxy.config.http.background_fill_active_timeout", "proxy.config.http.response_server_str",
-   "proxy.config.http.cache.heuristic_lm_factor", "proxy.config.http.background_fill_completed_threshold",
-   "proxy.config.net.sock_packet_mark_out", "proxy.config.net.sock_packet_tos_out",
-   "proxy.config.http.insert_age_in_response", "proxy.config.http.chunking.size",
-   "proxy.config.http.flow_control.enabled", "proxy.config.http.flow_control.low_water",
-   "proxy.config.http.flow_control.high_water", "proxy.config.http.cache.range.lookup",
-   "proxy.config.http.default_buffer_size", "proxy.config.http.default_buffer_water_mark",
-   "proxy.config.http.request_header_max_size", "proxy.config.http.response_header_max_size",
-   "proxy.config.http.negative_revalidating_enabled", "proxy.config.http.negative_revalidating_lifetime",
-   "proxy.config.ssl.hsts_max_age", "proxy.config.ssl.hsts_include_subdomains",
-   "proxy.config.http.cache.open_read_retry_time", "proxy.config.http.cache.max_open_read_retries",
-   "proxy.config.http.cache.range.write", "proxy.config.http.post.check.content_length.enabled",
-   "proxy.config.http.global_user_agent_header", "proxy.config.http.auth_server_session_private",
-   "proxy.config.http.slow.log.threshold", "proxy.config.http.cache.generation",
-   "proxy.config.body_factory.template_base", "proxy.config.http.cache.open_write_fail_action",
-   "proxy.config.http.number_of_redirections", "proxy.config.http.cache.max_open_write_retries",
-   "proxy.config.http.cache.max_open_write_retry_timeout", "proxy.config.http.redirect_use_orig_cache_key",
-   "proxy.config.http.attach_server_session_to_client", "proxy.config.websocket.no_activity_timeout",
-   "proxy.config.websocket.active_timeout", "proxy.config.http.uncacheable_requests_bypass_parent",
-   "proxy.config.http.parent_proxy.total_connect_attempts", "proxy.config.http.transaction_active_timeout_in",
-   "proxy.config.srv_enabled", "proxy.config.http.forward_connect_method",
-   "proxy.config.ssl.client.cert.filename", "proxy.config.ssl.client.cert.path",
-   "proxy.config.http.parent_proxy.mark_down_hostdb", "proxy.config.http.cache.ignore_accept_mismatch",
-   "proxy.config.http.cache.ignore_accept_language_mismatch", "proxy.config.http.cache.ignore_accept_encoding_mismatch",
-   "proxy.config.http.cache.ignore_accept_charset_mismatch", "proxy.config.http.parent_proxy.fail_threshold",
-   "proxy.config.http.parent_proxy.retry_time", "proxy.config.http.parent_proxy.per_parent_connect_attempts",
-   "proxy.config.http.normalize_ae", "proxy.config.http.insert_forwarded",
-   "proxy.config.http.proxy_protocol_out", "proxy.config.http.allow_multi_range",
-   "proxy.config.http.request_buffer_enabled", "proxy.config.http.allow_half_open",
-   OutboundConnTrack::CONFIG_VAR_MIN,
+  {
+   "proxy.config.url_remap.pristine_host_hdr", "proxy.config.http.chunking_enabled",
+   "proxy.config.http.negative_caching_enabled", "proxy.config.http.negative_caching_lifetime",
+   "proxy.config.http.cache.when_to_revalidate", "proxy.config.http.keep_alive_enabled_in",
+   "proxy.config.http.keep_alive_enabled_out", "proxy.config.http.keep_alive_post_out",
+   "proxy.config.http.server_session_sharing.match", "proxy.config.net.sock_recv_buffer_size_out",
+   "proxy.config.net.sock_send_buffer_size_out", "proxy.config.net.sock_option_flag_out",
+   "proxy.config.http.forward.proxy_auth_to_parent", "proxy.config.http.anonymize_remove_from",
+   "proxy.config.http.anonymize_remove_referer", "proxy.config.http.anonymize_remove_user_agent",
+   "proxy.config.http.anonymize_remove_cookie", "proxy.config.http.anonymize_remove_client_ip",
+   "proxy.config.http.insert_client_ip", "proxy.config.http.response_server_enabled",
+   "proxy.config.http.insert_squid_x_forwarded_for", "proxy.config.http.send_http11_requests",
+   "proxy.config.http.cache.http", "proxy.config.http.cache.ignore_client_no_cache",
+   "proxy.config.http.cache.ignore_client_cc_max_age", "proxy.config.http.cache.ims_on_client_no_cache",
+   "proxy.config.http.cache.ignore_server_no_cache", "proxy.config.http.cache.cache_responses_to_cookies",
+   "proxy.config.http.cache.ignore_authentication", "proxy.config.http.cache.cache_urls_that_look_dynamic",
+   "proxy.config.http.cache.required_headers", "proxy.config.http.insert_request_via_str",
+   "proxy.config.http.insert_response_via_str", "proxy.config.http.cache.heuristic_min_lifetime",
+   "proxy.config.http.cache.heuristic_max_lifetime", "proxy.config.http.cache.guaranteed_min_lifetime",
+   "proxy.config.http.cache.guaranteed_max_lifetime", "proxy.config.http.cache.max_stale_age",
+   "proxy.config.http.keep_alive_no_activity_timeout_in", "proxy.config.http.keep_alive_no_activity_timeout_out",
+   "proxy.config.http.transaction_no_activity_timeout_in", "proxy.config.http.transaction_no_activity_timeout_out",
+   "proxy.config.http.transaction_active_timeout_out", "proxy.config.http.connect_attempts_max_retries",
+   "proxy.config.http.connect_attempts_max_retries_dead_server", "proxy.config.http.connect_attempts_rr_retries",
+   "proxy.config.http.connect_attempts_timeout", "proxy.config.http.down_server.cache_time",
+   "proxy.config.http.doc_in_cache_skip_dns", "proxy.config.http.background_fill_active_timeout",
+   "proxy.config.http.response_server_str", "proxy.config.http.cache.heuristic_lm_factor",
+   "proxy.config.http.background_fill_completed_threshold", "proxy.config.net.sock_packet_mark_out",
+   "proxy.config.net.sock_packet_tos_out", "proxy.config.http.insert_age_in_response",
+   "proxy.config.http.chunking.size", "proxy.config.http.flow_control.enabled",
+   "proxy.config.http.flow_control.low_water", "proxy.config.http.flow_control.high_water",
+   "proxy.config.http.cache.range.lookup", "proxy.config.http.default_buffer_size",
+   "proxy.config.http.default_buffer_water_mark", "proxy.config.http.request_header_max_size",
+   "proxy.config.http.response_header_max_size", "proxy.config.http.negative_revalidating_enabled",
+   "proxy.config.http.negative_revalidating_lifetime", "proxy.config.ssl.hsts_max_age",
+   "proxy.config.ssl.hsts_include_subdomains", "proxy.config.http.cache.open_read_retry_time",
+   "proxy.config.http.cache.max_open_read_retries", "proxy.config.http.cache.range.write",
+   "proxy.config.http.post.check.content_length.enabled", "proxy.config.http.global_user_agent_header",
+   "proxy.config.http.auth_server_session_private", "proxy.config.http.slow.log.threshold",
+   "proxy.config.http.cache.generation", "proxy.config.body_factory.template_base",
+   "proxy.config.http.cache.open_write_fail_action", "proxy.config.http.number_of_redirections",
+   "proxy.config.http.cache.max_open_write_retries", "proxy.config.http.cache.max_open_write_retry_timeout",
+   "proxy.config.http.redirect_use_orig_cache_key", "proxy.config.http.attach_server_session_to_client",
+   "proxy.config.websocket.no_activity_timeout", "proxy.config.websocket.active_timeout",
+   "proxy.config.http.uncacheable_requests_bypass_parent", "proxy.config.http.parent_proxy.total_connect_attempts",
+   "proxy.config.http.transaction_active_timeout_in", "proxy.config.srv_enabled",
+   "proxy.config.http.forward_connect_method", "proxy.config.ssl.client.cert.filename",
+   "proxy.config.ssl.client.cert.path", "proxy.config.http.parent_proxy.mark_down_hostdb",
+   "proxy.config.http.cache.ignore_accept_mismatch", "proxy.config.http.cache.ignore_accept_language_mismatch",
+   "proxy.config.http.cache.ignore_accept_encoding_mismatch", "proxy.config.http.cache.ignore_accept_charset_mismatch",
+   "proxy.config.http.parent_proxy.fail_threshold", "proxy.config.http.parent_proxy.retry_time",
+   "proxy.config.http.parent_proxy.per_parent_connect_attempts", "proxy.config.http.normalize_ae",
+   "proxy.config.http.insert_forwarded", "proxy.config.http.proxy_protocol_out",
+   "proxy.config.http.allow_multi_range", "proxy.config.http.request_buffer_enabled",
+   "proxy.config.http.allow_half_open", OutboundConnTrack::CONFIG_VAR_MIN,
    OutboundConnTrack::CONFIG_VAR_MAX,
    OutboundConnTrack::CONFIG_VAR_MATCH,
    "proxy.config.ssl.client.verify.server.policy", "proxy.config.ssl.client.verify.server.properties",
@@ -8644,7 +8644,8 @@ std::array<std::string_view, TS_CONFIG_LAST_ENTRY> SDK_Overridable_Configs = {
    "proxy.config.http.max_proxy_cycles", "proxy.config.plugin.vc.default_buffer_index",
    "proxy.config.plugin.vc.default_buffer_water_mark", "proxy.config.net.sock_notsent_lowat",
    "proxy.config.body_factory.response_suppression_mode", "proxy.config.http.parent_proxy.enable_parent_timeout_markdowns",
-   "proxy.config.http.parent_proxy.disable_parent_markdowns", "proxy.config.net.default_inactivity_timeout"}
+   "proxy.config.http.parent_proxy.disable_parent_markdowns", "proxy.config.net.default_inactivity_timeout",
+   "proxy.config.http.no_dns_just_forward_to_parent", }
 };
 
 extern ClassAllocator<HttpSM> httpSMAllocator;