- tune.quic.be.stream.rxbuf
- tune.quic.be.tx.pacing
- tune.quic.be.tx.udp-gso
- - tune.quic.cc.cubic.min-losses (deprecated)
- - tune.quic.cc-hystart (deprecated)
- - tune.quic.disable-tx-pacing (deprecated)
- - tune.quic.disable-udp-gso (deprecated)
- tune.quic.fe.cc.cubic-min-losses
- tune.quic.fe.cc.hystart
- tune.quic.fe.cc.max-frame-loss
- tune.quic.fe.stream.rxbuf
- tune.quic.fe.tx.pacing
- tune.quic.fe.tx.udp-gso
- - tune.quic.frontend.max-data-size (deprecated)
- - tune.quic.frontend.max-idle-timeout (deprecated)
- - tune.quic.frontend.max-streams-bidi (deprecated)
- - tune.quic.frontend.max-tx-mem (deprecated)
- - tune.quic.frontend.stream-data-ratio (deprecated)
- - tune.quic.frontend.default-max-window-size (deprecated)
- tune.quic.listen
- - tune.quic.max-frame-loss (deprecated)
- tune.quic.mem.tx-max
- - tune.quic.reorder-ratio (deprecated)
- - tune.quic.retry-threshold (deprecated)
- - tune.quic.socket-owner (deprecated)
- tune.quic.zero-copy-fwd-send
- tune.renice.runtime
- tune.renice.startup
compare some metrics. Never go beyond 2 without an expert's prior analysis of
the situation. The default and minimum value is 1. Always use 1.
-tune.quic.cc.cubic.min-losses <number> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.cc.hystart { on | off }
tune.quic.fe.cc.hystart { on | off }
Enables ('on') or disabled ('off') the HyStart++ (RFC 9406) algorithm for
QUIC connections used as a replacement for the slow start phase of congestion
control algorithms which may cause high packet loss. It is disabled by default.
-tune.quic.cc-hystart { on | off } (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.cc.max-frame-loss <number>
tune.quic.fe.cc.max-frame-loss <number>
Sets the limit for which a single QUIC frame can be marked as lost. If
The default value is 10.
-tune.quic.max-frame-loss <number> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.cc.max-win-size <size>
tune.quic.fe.cc.max-win-size <size>
Sets the default maximum window size for the congestion controller of a
See also the "quic-cc-algo" bind and server options.
-tune.quic.frontend.default-max-window-size <size> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.cc.reorder-ratio <0..100, in percent>
tune.quic.fe.cc.reorder-ratio <0..100, in percent>
The ratio applied to the packet reordering threshold calculated. It may
The default value is 50.
-tune.quic.reorder-ratio <0..100, in percent> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.max-idle-timeout <timeout>
tune.quic.fe.max-idle-timeout <timeout>
Sets the QUIC max_idle_timeout transport parameters on either frontend or
The default value is 30s.
-tune.quic.frontend.max-idle-timeout <timeout> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.sec.glitches-threshold <number>
tune.quic.fe.sec.glitches-threshold <number>
Sets the threshold for the number of glitches per connection either on
See also: fc_glitches, tune.glitches.kill.cpu-usage
-tune.quic.frontend.glitches-threshold <number> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.fe.sec.retry-threshold <number>
Dynamically enables the Retry feature for all the configured QUIC listeners
as soon as this number of half open connections is reached. A half open
See https://www.rfc-editor.org/rfc/rfc9000.html#section-8.1.2 for more
information about QUIC retry.
-tune.quic.retry-threshold <number> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.fe.sock-per-conn { default-on | force-off }
Specifies globally how QUIC frontend connections will use socket for
receive/send operations. Connections can share listener socket or each
"force-off" is used globally, it will be applied on every listener instance,
regardless of their individual configuration.
-tune.quic.socket-owner { connection | listener } (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. The newer
- option is named "tune.quic.fe.sock-per-conn", with legacy value "connection"
- corresponding to "default-on" and "listener" to "force-off".
-
tune.quic.be.stream.data-ratio <0..100, in percent>
tune.quic.fe.stream.data-ratio <0..100, in percent>
This setting allows to configure the hard limit of the number of data bytes
"tune.quic.be.stream.max-concurrent",
"tune.quic.fe.stream.max-concurrent"
-tune.quic.frontend.stream-data-ratio <0..100, in percent> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.stream.max-concurrent <number>
tune.quic.fe.stream.max-concurrent <number>
On frontend side, this is used as the value for the advertised
The default value is 0 which implies no specific limit outside of the QUIC
protocol encoding limitation (2^60, more than a billion billion).
-tune.quic.frontend.max-streams-bidi <number> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.stream.rxbuf <size>
tune.quic.fe.stream.rxbuf <size>
This setting is the hard limit for the number of data bytes in flight over a
"tune.quic.fe.stream.max-concurrent",
"tune.quic.be.stream.data-ratio", "tune.quic.fe.stream.data-ratio"
-tune.quic.frontend.max-data-size <size> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.tx.pacing { on | off }
tune.quic.fe.tx.pacing { on | off }
Enables ('on') or disables ('off') pacing support for QUIC emission. By
See also the "quic-cc-algo" bind and server options.
-tune.quic.disable-tx-pacing (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.be.tx.udp-gso { on | off }
tune.quic.fe.tx.udp-gso { on | off }
Enables ('on') or disables ('off') UDP GSO support for QUIC emission. By
be useful to disable it on developers suggestion when suspecting an issue on
emission.
-tune.quic.disable-udp-gso (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.listen { on | off }
Disable QUIC transport protocol on the frontend side. All the QUIC listeners
will still be created, but they won't listen for incoming datagrams. Hence,
connection will always be able to use a window of at least 2 datagrams, so a
proper maxconn should be used in conjunction.
-tune.quic.frontend.max-tx-mem <size> (deprecated)
- This keyword has been deprecated in 3.3 and will be removed in 3.5. It is
- part of the streamlining process apply on QUIC configuration. If used, this
- setting will only be applied on frontend connections.
-
tune.quic.zero-copy-fwd-send { on | off }
Enables ('on') of disabled ('off') the zero-copy sends of data for the QUIC
multiplexer. It is enabled by default.
return 0;
}
-/* parse "tune.quic.socket-owner", accepts "listener" or "connection" */
-static int cfg_parse_quic_tune_socket_owner(char **args, int section_type,
- struct proxy *curpx,
- const struct proxy *defpx,
- const char *file, int line, char **err)
-{
- if (too_many_args(1, args, err, NULL))
- return -1;
-
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.sock-per-conn'.", args[0]);
-
- if (strcmp(args[1], "connection") == 0) {
- quic_tune.fe.opts |= QUIC_TUNE_FE_SOCK_PER_CONN;
- }
- else if (strcmp(args[1], "listener") == 0) {
- quic_tune.fe.opts &= ~QUIC_TUNE_FE_SOCK_PER_CONN;
- }
- else {
- memprintf(err, "'%s' expects either 'listener' or 'connection' but got '%s'.", args[0], args[1]);
- return -1;
- }
-
- /* Returns 1 to ensure deprecated warning is displayed. */
- return 1;
-}
-
/* Must be used to parse tune.quic.* setting which requires a time
* as value.
* Return -1 on alert, or 0 if succeeded.
&quic_tune.fe.max_idle_timeout;
*ptr = time;
}
- /* legacy options */
- else if (strcmp(name + prefix_len, "frontend.max-idle-timeout") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.max-idle-timeout'.", args[0]);
- quic_tune.fe.max_idle_timeout = time;
- ret = 1;
- }
else {
memprintf(err, "'%s' keyword not handled (please report this bug).", args[0]);
ret = -1;
*ptr = arg;
}
-
- /* legacy options */
- else if (strcmp(suffix, "cc.cubic.min-losses") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.cc.cubic-min-losses'.", args[0]);
- quic_tune.fe.cc_cubic_min_losses = arg - 1;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.default-max-window-size") == 0) {
- unsigned long cwnd;
- char *end_opt;
-
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.cc.max-win-size'.", args[0]);
-
- cwnd = parse_window_size(args[0], args[1], &end_opt, err);
- if (!cwnd)
- return -1;
- if (*end_opt != '\0') {
- memprintf(err, "'%s' : expects an integer value with an optional suffix 'k', 'm' or 'g'", args[0]);
- return -1;
- }
-
- quic_tune.fe.cc_max_win_size = cwnd;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.glitches-threshold") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.sec.glitches-threshold'.", args[0]);
- quic_tune.fe.sec_glitches_threshold = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.max-data-size") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.stream.rxbuf'.", args[0]);
- if ((errptr = parse_size_err(args[1], &arg))) {
- memprintf(err, "'%s': unexpected character '%c' in size argument '%s'.",
- args[0], *errptr, args[1]);
- return -1;
- }
-
- quic_tune.fe.stream_rxbuf = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.max-streams-bidi") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.stream.max-concurrent'.", args[0]);
- quic_tune.fe.stream_max_concurrent = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.max-tx-mem") == 0) {
- ullong max_mem;
-
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.mem.tx-max'.", args[0]);
-
- if ((errptr = parse_size_err(args[1], &max_mem))) {
- memprintf(err, "'%s': unexpected character '%c' in size argument '%s'.",
- args[0], *errptr, args[1]);
- return -1;
- }
-
- quic_tune.mem_tx_max = max_mem;
- ret = 1;
- }
- else if (strcmp(suffix, "frontend.stream-data-ratio") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.stream.data-ratio'.", args[0]);
-
- if (arg < 1 || arg > 100) {
- memprintf(err, "'%s' expects an integer argument between 1 and 100.", args[0]);
- return -1;
- }
- quic_tune.fe.stream_data_ratio = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "max-frame-loss") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.cc.max-frame-loss'.", args[0]);
- quic_tune.fe.cc_max_frame_loss = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "reorder-ratio") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.cc.reorder-ratio'.", args[0]);
- if (arg > 100) {
- memprintf(err, "'%s' expects an integer argument between 0 and 100.", args[0]);
- return -1;
- }
-
- quic_tune.fe.cc_reorder_ratio = arg;
- ret = 1;
- }
- else if (strcmp(suffix, "retry-threshold") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.sec.retry-threshold'.", args[0]);
- quic_tune.fe.sec_retry_threshold = arg;
- ret = 1;
- }
else {
memprintf(err, "'%s' keyword not handled (please report this bug).", args[0]);
return -1;
return ret;
}
-static int cfg_parse_quic_tune_setting0(char **args, int section_type,
- struct proxy *curpx,
- const struct proxy *defpx,
- const char *file, int line, char **err)
-{
- int ret = 0;
- int prefix_len = strlen("tune.quic.");
- const char *suffix;
-
- if (too_many_args(0, args, err, NULL))
- return -1;
-
- suffix = args[0] + prefix_len;
- if (strcmp(suffix, "disable-tx-pacing") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.tx.pacing'.", args[0]);
- quic_tune.fe.fb_opts &= ~QUIC_TUNE_FB_TX_PACING;
- ret = 1;
- }
- else if (strcmp(suffix, "disable-udp-gso") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.tx.udp-gso'.", args[0]);
- quic_tune.fe.fb_opts &= ~QUIC_TUNE_FB_TX_UDP_GSO;
- ret = 1;
- }
- else {
- memprintf(err, "'%s' keyword unhandled (please report this bug).", args[0]);
- return -1;
- }
-
- return ret;
-}
-
/* config parser for global "tune.quic.* {on|off}" */
static int cfg_parse_quic_tune_on_off(char **args, int section_type, struct proxy *curpx,
const struct proxy *defpx, const char *file, int line,
else
*ptr &= ~QUIC_TUNE_FB_TX_UDP_GSO;
}
- else if (strcmp(suffix, "cc-hystart") == 0) {
- memprintf(err, "'%s' is deprecated in 3.3 and will be removed in 3.5. "
- "Please use the newer keyword syntax 'tune.quic.fe.cc.hystart'.", args[0]);
- if (on)
- quic_tune.fe.fb_opts |= QUIC_TUNE_FB_CC_HYSTART;
- else
- quic_tune.fe.fb_opts &= ~QUIC_TUNE_FB_CC_HYSTART;
- ret = 1;
- }
return ret;
}
{ CFG_GLOBAL, "tune.quic.be.tx.pacing", cfg_parse_quic_tune_on_off },
{ CFG_GLOBAL, "tune.quic.be.tx.udp-gso", cfg_parse_quic_tune_on_off },
- /* legacy options */
- { CFG_GLOBAL, "tune.quic.cc-hystart", cfg_parse_quic_tune_on_off },
- { CFG_GLOBAL, "tune.quic.cc.cubic.min-losses", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.disable-tx-pacing", cfg_parse_quic_tune_setting0 },
- { CFG_GLOBAL, "tune.quic.disable-udp-gso", cfg_parse_quic_tune_setting0 },
- { CFG_GLOBAL, "tune.quic.frontend.default-max-window-size", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.glitches-threshold", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.max-data-size", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.max-idle-timeout", cfg_parse_quic_time },
- { CFG_GLOBAL, "tune.quic.frontend.max-streams-bidi", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.max-tx-mem", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.frontend.stream-data-ratio", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.max-frame-loss", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.reorder-ratio", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.retry-threshold", cfg_parse_quic_tune_setting },
- { CFG_GLOBAL, "tune.quic.socket-owner", cfg_parse_quic_tune_socket_owner },
-
{ 0, NULL, NULL }
}};