Mercurial > hg > nginx
changeset 8815:8ab0d609af09 quic
QUIC: the "quic_gso" directive.
The directive enables usage of UDP segmentation offloading by quic.
By default, gso is disabled since it is not always operational when
detected (depends on interface configuration).
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Tue, 20 Jul 2021 12:37:12 +0300 |
parents | 913ff20e4c62 |
children | 7f29db5294bd |
files | src/event/quic/ngx_event_quic.h src/event/quic/ngx_event_quic_output.c src/http/modules/ngx_http_quic_module.c src/stream/ngx_stream_quic_module.c |
diffstat | 4 files changed, 25 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic.h Tue Jul 20 12:04:58 2021 +0300 +++ b/src/event/quic/ngx_event_quic.h Tue Jul 20 12:37:12 2021 +0300 @@ -59,6 +59,7 @@ 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];
--- a/src/event/quic/ngx_event_quic_output.c Tue Jul 20 12:04:58 2021 +0300 +++ b/src/event/quic/ngx_event_quic_output.c Tue Jul 20 12:37:12 2021 +0300 @@ -212,13 +212,17 @@ 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;
--- a/src/http/modules/ngx_http_quic_module.c Tue Jul 20 12:04:58 2021 +0300 +++ b/src/http/modules/ngx_http_quic_module.c Tue Jul 20 12:37:12 2021 +0300 @@ -126,6 +126,13 @@ 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 @@ 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 @@ 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, "");
--- a/src/stream/ngx_stream_quic_module.c Tue Jul 20 12:04:58 2021 +0300 +++ b/src/stream/ngx_stream_quic_module.c Tue Jul 20 12:37:12 2021 +0300 @@ -128,6 +128,13 @@ 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 @@ 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 @@ 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, "");