summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
Diffstat (limited to 'src/event')
-rw-r--r--src/event/quic/ngx_event_quic.c5
-rw-r--r--src/event/quic/ngx_event_quic.h36
-rw-r--r--src/event/quic/ngx_event_quic_streams.c10
-rw-r--r--src/event/quic/ngx_event_quic_transport.c44
-rw-r--r--src/event/quic/ngx_event_quic_transport.h27
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,