diff options
author | Dave Wallace <dwallacelf@gmail.com> | 2019-10-30 18:30:53 +0000 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2019-10-30 22:44:58 +0000 |
commit | 7c7fa9066e2f056581af3fb82a21a1145a7aaafa (patch) | |
tree | 18dd6cd96511fbc4b3b426decbfc08588414e20b | |
parent | 35b037fd7f7ff1842f8d72a969c8415aa6f60d4d (diff) |
quic: fix quicly fifo size mismatch
- This fixes an intermittent failure of the
test_quic_ext_transfer test due to quicly
being configured with the wrong fifo size
which was taken from the cli or startup.conf
file. The fifo size from the application
context is now used when creating the
quicly context.
- Emit an error message if the entire chunk
of a stream is not enqueued in the svm fifo.
Type: fix
Change-Id: I03847ea7d4cd7a617b577697dfe3afa969850937
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
-rw-r--r-- | src/plugins/quic/quic.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/plugins/quic/quic.c b/src/plugins/quic/quic.c index dcab5e34c9a..076fd5eed0f 100644 --- a/src/plugins/quic/quic.c +++ b/src/plugins/quic/quic.c @@ -509,7 +509,12 @@ quic_on_receive (quicly_stream_t * stream, size_t off, const void *src, /* Streams live on the same thread so (f, stream_data) should stay consistent */ rlen = svm_fifo_enqueue (f, len, (u8 *) src); stream_data->app_rx_data_len += rlen; - ASSERT (rlen >= len); + if (PREDICT_FALSE (rlen != len)) + { + clib_warning ("ERROR: Could not enqueue all data (rlen %u, len %u)", + rlen, len); + ASSERT (rlen == len); + } app_wrk = app_worker_get_if_valid (stream_session->app_wrk_index); if (PREDICT_TRUE (app_wrk != 0)) app_worker_lock_and_send_event (app_wrk, stream_session, @@ -861,6 +866,7 @@ quic_store_quicly_ctx (application_t * app, u32 cert_key_index) quicly_context_t *quicly_ctx; ptls_iovec_t key_vec; app_cert_key_pair_t *ckpair; + u64 max_enq; if (app->quicly_ctx) return; @@ -899,8 +905,12 @@ quic_store_quicly_ctx (application_t * app, u32 cert_key_index) quicly_ctx->transport_params.max_data = QUIC_INT_MAX; quicly_ctx->transport_params.max_streams_uni = (uint64_t) 1 << 60; quicly_ctx->transport_params.max_streams_bidi = (uint64_t) 1 << 60; - quicly_ctx->transport_params.max_stream_data.bidi_local = (qm->udp_fifo_size - 1); /* max_enq is SIZE - 1 */ - quicly_ctx->transport_params.max_stream_data.bidi_remote = (qm->udp_fifo_size - 1); /* max_enq is SIZE - 1 */ + + /* max_enq is FIFO_SIZE - 1 */ + max_enq = app->sm_properties.rx_fifo_size - 1; + quicly_ctx->transport_params.max_stream_data.bidi_local = max_enq; + max_enq = app->sm_properties.tx_fifo_size - 1; + quicly_ctx->transport_params.max_stream_data.bidi_remote = max_enq; quicly_ctx->transport_params.max_stream_data.uni = QUIC_INT_MAX; quicly_ctx->tls->random_bytes (quicly_ctx_data->cid_key, 16); |