diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/quic/ngx_event_quic.c | 5 | ||||
| -rw-r--r-- | src/event/quic/ngx_event_quic.h | 36 | ||||
| -rw-r--r-- | src/event/quic/ngx_event_quic_streams.c | 10 | ||||
| -rw-r--r-- | src/event/quic/ngx_event_quic_transport.c | 44 | ||||
| -rw-r--r-- | src/event/quic/ngx_event_quic_transport.h | 27 |
5 files changed, 87 insertions, 35 deletions
diff --git a/src/event/quic/ngx_event_quic.c b/src/event/quic/ngx_event_quic.c index 03d703b2c..cb71a16b1 100644 --- a/src/event/quic/ngx_event_quic.c +++ b/src/event/quic/ngx_event_quic.c @@ -294,7 +294,10 @@ ngx_quic_new_connection(ngx_connection_t *c, ngx_quic_conf_t *conf, qc->path_validation.cancelable = 1; qc->conf = conf; - qc->tp = conf->tp; + + if (ngx_quic_init_transport_params(&qc->tp, conf) != NGX_OK) { + return NULL; + } ctp = &qc->ctp; diff --git a/src/event/quic/ngx_event_quic.h b/src/event/quic/ngx_event_quic.h index 1007c491d..8ae7bf643 100644 --- a/src/event/quic/ngx_event_quic.h +++ b/src/event/quic/ngx_event_quic.h @@ -27,43 +27,23 @@ #define NGX_QUIC_STREAM_SERVER_INITIATED 0x01 #define NGX_QUIC_STREAM_UNIDIRECTIONAL 0x02 -#define NGX_QUIC_STREAM_BUFSIZE 65536 - - -typedef struct { - /* configurable */ - ngx_msec_t max_idle_timeout; - ngx_msec_t max_ack_delay; - - size_t max_udp_payload_size; - size_t initial_max_data; - size_t initial_max_stream_data_bidi_local; - size_t initial_max_stream_data_bidi_remote; - size_t initial_max_stream_data_uni; - ngx_uint_t initial_max_streams_bidi; - ngx_uint_t initial_max_streams_uni; - ngx_uint_t ack_delay_exponent; - ngx_uint_t active_connection_id_limit; - ngx_flag_t disable_active_migration; - ngx_str_t original_dcid; - ngx_str_t initial_scid; - ngx_str_t retry_scid; - u_char sr_token[NGX_QUIC_SR_TOKEN_LEN]; - - /* TODO */ - void *preferred_address; -} ngx_quic_tp_t; - typedef struct { ngx_ssl_t *ssl; - ngx_quic_tp_t tp; + ngx_flag_t retry; ngx_flag_t gso_enabled; + ngx_flag_t disable_active_migration; + ngx_msec_t timeout; ngx_str_t host_key; + size_t mtu; + size_t stream_buffer_size; + ngx_uint_t max_concurrent_streams_bidi; + ngx_uint_t max_concurrent_streams_uni; ngx_int_t stream_close_code; ngx_int_t stream_reject_code_uni; ngx_int_t stream_reject_code_bidi; + u_char av_token_key[NGX_QUIC_AV_KEY_LEN]; u_char sr_token_key[NGX_QUIC_SR_KEY_LEN]; } ngx_quic_conf_t; diff --git a/src/event/quic/ngx_event_quic_streams.c b/src/event/quic/ngx_event_quic_streams.c index ced35370b..60e693bbd 100644 --- a/src/event/quic/ngx_event_quic_streams.c +++ b/src/event/quic/ngx_event_quic_streams.c @@ -851,7 +851,7 @@ ngx_quic_max_stream_flow(ngx_connection_t *c) qs = c->quic; qc = ngx_quic_get_connection(qs->parent); - size = NGX_QUIC_STREAM_BUFSIZE; + size = qc->conf->stream_buffer_size; sent = c->sent; unacked = sent - qs->acked; @@ -859,15 +859,13 @@ ngx_quic_max_stream_flow(ngx_connection_t *c) qc->streams.send_max_data = qc->ctp.initial_max_data; } - if (unacked >= NGX_QUIC_STREAM_BUFSIZE) { + if (unacked >= size) { ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic send flow hit buffer size"); return 0; } - if (unacked + size > NGX_QUIC_STREAM_BUFSIZE) { - size = NGX_QUIC_STREAM_BUFSIZE - unacked; - } + size -= unacked; if (qc->streams.sent >= qc->streams.send_max_data) { ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, @@ -1493,7 +1491,7 @@ ngx_quic_handle_stream_ack(ngx_connection_t *c, ngx_quic_frame_t *f) sent = qs->connection->sent; unacked = sent - qs->acked; - if (unacked >= NGX_QUIC_STREAM_BUFSIZE && wev->active) { + if (unacked >= qc->conf->stream_buffer_size && wev->active) { wev->ready = 1; ngx_post_event(wev, &ngx_posted_events); } diff --git a/src/event/quic/ngx_event_quic_transport.c b/src/event/quic/ngx_event_quic_transport.c index c39d1094c..0ff42de2d 100644 --- a/src/event/quic/ngx_event_quic_transport.c +++ b/src/event/quic/ngx_event_quic_transport.c @@ -1937,6 +1937,50 @@ ngx_quic_create_retire_connection_id(u_char *p, } +ngx_int_t +ngx_quic_init_transport_params(ngx_quic_tp_t *tp, ngx_quic_conf_t *qcf) +{ + ngx_uint_t nstreams; + + ngx_memzero(tp, sizeof(ngx_quic_tp_t)); + + /* + * set by ngx_memzero(): + * + * tp->disable_active_migration = 0; + * tp->original_dcid = { 0, NULL }; + * tp->initial_scid = { 0, NULL }; + * tp->retry_scid = { 0, NULL }; + * tp->sr_token = { 0 } + * tp->sr_enabled = 0 + * tp->preferred_address = NULL + */ + + tp->max_idle_timeout = qcf->timeout; + + tp->max_udp_payload_size = qcf->mtu; + + nstreams = qcf->max_concurrent_streams_bidi + + qcf->max_concurrent_streams_uni; + + tp->initial_max_data = nstreams * qcf->stream_buffer_size; + tp->initial_max_stream_data_bidi_local = qcf->stream_buffer_size; + tp->initial_max_stream_data_bidi_remote = qcf->stream_buffer_size; + tp->initial_max_stream_data_uni = qcf->stream_buffer_size; + + tp->initial_max_streams_bidi = qcf->max_concurrent_streams_bidi; + tp->initial_max_streams_uni = qcf->max_concurrent_streams_uni; + + tp->max_ack_delay = NGX_QUIC_DEFAULT_MAX_ACK_DELAY; + tp->ack_delay_exponent = NGX_QUIC_DEFAULT_ACK_DELAY_EXPONENT; + + tp->active_connection_id_limit = 2; + tp->disable_active_migration = qcf->disable_active_migration; + + return NGX_OK; +} + + ssize_t ngx_quic_create_transport_params(u_char *pos, u_char *end, ngx_quic_tp_t *tp, size_t *clen) diff --git a/src/event/quic/ngx_event_quic_transport.h b/src/event/quic/ngx_event_quic_transport.h index 2cd372cba..64ebfa979 100644 --- a/src/event/quic/ngx_event_quic_transport.h +++ b/src/event/quic/ngx_event_quic_transport.h @@ -338,6 +338,31 @@ typedef struct { } ngx_quic_header_t; +typedef struct { + ngx_msec_t max_idle_timeout; + ngx_msec_t max_ack_delay; + + size_t max_udp_payload_size; + size_t initial_max_data; + size_t initial_max_stream_data_bidi_local; + size_t initial_max_stream_data_bidi_remote; + size_t initial_max_stream_data_uni; + ngx_uint_t initial_max_streams_bidi; + ngx_uint_t initial_max_streams_uni; + ngx_uint_t ack_delay_exponent; + ngx_uint_t active_connection_id_limit; + ngx_flag_t disable_active_migration; + + ngx_str_t original_dcid; + ngx_str_t initial_scid; + ngx_str_t retry_scid; + u_char sr_token[NGX_QUIC_SR_TOKEN_LEN]; + + /* TODO */ + void *preferred_address; +} ngx_quic_tp_t; + + ngx_int_t ngx_quic_parse_packet(ngx_quic_header_t *pkt); size_t ngx_quic_create_version_negotiation(ngx_quic_header_t *pkt, u_char *out); @@ -358,6 +383,8 @@ ssize_t ngx_quic_parse_ack_range(ngx_log_t *log, u_char *start, u_char *end, uint64_t *gap, uint64_t *range); size_t ngx_quic_create_ack_range(u_char *p, uint64_t gap, uint64_t range); +ngx_int_t ngx_quic_init_transport_params(ngx_quic_tp_t *tp, + ngx_quic_conf_t *qcf); ngx_int_t ngx_quic_parse_transport_params(u_char *p, u_char *end, ngx_quic_tp_t *tp, ngx_log_t *log); ssize_t ngx_quic_create_transport_params(u_char *p, u_char *end, |
