aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/event/quic/ngx_event_quic.h1
-rw-r--r--src/event/quic/ngx_event_quic_output.c8
-rw-r--r--src/http/modules/ngx_http_quic_module.c9
-rw-r--r--src/stream/ngx_stream_quic_module.c9
4 files changed, 25 insertions, 2 deletions
diff --git a/src/event/quic/ngx_event_quic.h b/src/event/quic/ngx_event_quic.h
index fe0f7fef3..d3429cbe4 100644
--- a/src/event/quic/ngx_event_quic.h
+++ b/src/event/quic/ngx_event_quic.h
@@ -59,6 +59,7 @@ typedef struct {
ngx_ssl_t *ssl;
ngx_quic_tp_t tp;
ngx_flag_t retry;
+ ngx_flag_t gso_enabled;
ngx_flag_t require_alpn;
ngx_str_t host_key;
u_char av_token_key[NGX_QUIC_AV_KEY_LEN];
diff --git a/src/event/quic/ngx_event_quic_output.c b/src/event/quic/ngx_event_quic_output.c
index ce3805c8f..dc4cf59be 100644
--- a/src/event/quic/ngx_event_quic_output.c
+++ b/src/event/quic/ngx_event_quic_output.c
@@ -212,13 +212,17 @@ ngx_quic_allow_segmentation(ngx_connection_t *c, ngx_quic_socket_t *qsock)
ngx_quic_send_ctx_t *ctx;
ngx_quic_connection_t *qc;
+ qc = ngx_quic_get_connection(c);
+
+ if (!qc->conf->gso_enabled) {
+ return 0;
+ }
+
if (qsock->path->state != NGX_QUIC_PATH_VALIDATED) {
/* don't even try to be faster on non-validated paths */
return 0;
}
- qc = ngx_quic_get_connection(c);
-
ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_initial);
if (!ngx_queue_empty(&ctx->frames)) {
return 0;
diff --git a/src/http/modules/ngx_http_quic_module.c b/src/http/modules/ngx_http_quic_module.c
index d933dd1f9..ab84583f2 100644
--- a/src/http/modules/ngx_http_quic_module.c
+++ b/src/http/modules/ngx_http_quic_module.c
@@ -126,6 +126,13 @@ static ngx_command_t ngx_http_quic_commands[] = {
offsetof(ngx_quic_conf_t, retry),
NULL },
+ { ngx_string("quic_gso"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_SRV_CONF_OFFSET,
+ offsetof(ngx_quic_conf_t, gso_enabled),
+ NULL },
+
{ ngx_string("quic_host_key"),
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_CONF_TAKE1,
ngx_http_quic_host_key,
@@ -290,6 +297,7 @@ ngx_http_quic_create_srv_conf(ngx_conf_t *cf)
conf->tp.active_connection_id_limit = NGX_CONF_UNSET_UINT;
conf->retry = NGX_CONF_UNSET;
+ conf->gso_enabled = NGX_CONF_UNSET;
conf->require_alpn = 1;
return conf;
@@ -348,6 +356,7 @@ ngx_http_quic_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
prev->tp.active_connection_id_limit, 2);
ngx_conf_merge_value(conf->retry, prev->retry, 0);
+ ngx_conf_merge_value(conf->gso_enabled, prev->gso_enabled, 0);
ngx_conf_merge_str_value(conf->host_key, prev->host_key, "");
diff --git a/src/stream/ngx_stream_quic_module.c b/src/stream/ngx_stream_quic_module.c
index 01caa9555..2cd811ad4 100644
--- a/src/stream/ngx_stream_quic_module.c
+++ b/src/stream/ngx_stream_quic_module.c
@@ -128,6 +128,13 @@ static ngx_command_t ngx_stream_quic_commands[] = {
offsetof(ngx_quic_conf_t, retry),
NULL },
+ { ngx_string("quic_gso"),
+ NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_STREAM_SRV_CONF_OFFSET,
+ offsetof(ngx_quic_conf_t, gso_enabled),
+ NULL },
+
{ ngx_string("quic_host_key"),
NGX_STREAM_MAIN_CONF|NGX_STREAM_SRV_CONF|NGX_CONF_FLAG,
ngx_stream_quic_host_key,
@@ -251,6 +258,7 @@ ngx_stream_quic_create_srv_conf(ngx_conf_t *cf)
conf->tp.active_connection_id_limit = NGX_CONF_UNSET_UINT;
conf->retry = NGX_CONF_UNSET;
+ conf->gso_enabled = NGX_CONF_UNSET;
return conf;
}
@@ -308,6 +316,7 @@ ngx_stream_quic_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
prev->tp.active_connection_id_limit, 2);
ngx_conf_merge_value(conf->retry, prev->retry, 0);
+ ngx_conf_merge_value(conf->gso_enabled, prev->gso_enabled, 0);
ngx_conf_merge_str_value(conf->host_key, prev->host_key, "");