blob: 543464053b6a1556abde57d0fdc8eef208669359 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This file intentionally does not have header guards, it's included
// inside a macro to generate values. The following line silences a
// presubmit warning that would otherwise be triggered by this:
// no-include-guard-because-multiply-included
// This file contains the list of QUIC protocol flags.
// Time period for which a given connection_id should live in the time-wait
// state.
QUIC_FLAG(int64_t, FLAGS_quic_time_wait_list_seconds, 200)
// Currently, this number is quite conservative. The max QPS limit for an
// individual server silo is currently set to 1000 qps, though the actual max
// that we see in the wild is closer to 450 qps. Regardless, this means that
// the longest time-wait list we should see is 200 seconds * 1000 qps, 200000.
// Of course, there are usually many queries per QUIC connection, so we allow a
// factor of 3 leeway.
//
// Maximum number of connections on the time-wait list. A negative value implies
// no configured limit.
QUIC_FLAG(int64_t, FLAGS_quic_time_wait_list_max_connections, 600000)
// Enables server-side support for QUIC stateless rejects.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_enable_quic_stateless_reject_support,
true)
// If true, require handshake confirmation for QUIC connections, functionally
// disabling 0-rtt handshakes.
// TODO(rtenneti): Enable this flag after CryptoServerTest's are fixed.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_require_handshake_confirmation,
false)
// If true, disable pacing in QUIC.
QUIC_FLAG(bool, FLAGS_quic_disable_pacing_for_perf_tests, false)
// If true, QUIC will use cheap stateless rejects without creating a full
// connection.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_use_cheap_stateless_rejects,
true)
// If true, allows packets to be buffered in anticipation of a future CHLO, and
// allow CHLO packets to be buffered until next iteration of the event loop.
QUIC_FLAG(bool, FLAGS_quic_allow_chlo_buffering, true)
// If greater than zero, mean RTT variation is multiplied by the specified
// factor and added to the congestion window limit.
QUIC_FLAG(double, FLAGS_quic_bbr_rtt_variation_weight, 0.0f)
// Congestion window gain for QUIC BBR during PROBE_BW phase.
QUIC_FLAG(double, FLAGS_quic_bbr_cwnd_gain, 2.0f)
// Simplify QUIC\'s adaptive time loss detection to measure the necessary
// reordering window for every spurious retransmit.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_adaptive_time_loss, false)
// When true, defaults to BBR congestion control instead of Cubic.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_default_to_bbr, false)
// If buffered data in QUIC stream is less than this threshold, buffers all
// provided data or asks upper layer for more data.
QUIC_FLAG(uint32_t, FLAGS_quic_buffered_data_threshold, 8192u)
// Max size of data slice in bytes for QUIC stream send buffer.
QUIC_FLAG(uint32_t, FLAGS_quic_send_buffer_max_data_slice_size, 4096u)
// If true, QUIC supports both QUIC Crypto and TLS 1.3 for the handshake
// protocol.
QUIC_FLAG(bool, FLAGS_quic_supports_tls_handshake, false)
// Allow QUIC to accept initial packet numbers that are random, not 1.
QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_enable_accept_random_ipn, false)
// If true, enable QUIC v43.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_43, true)
// Enables 3 new connection options to make PROBE_RTT more aggressive
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_less_probe_rtt, false)
// If true, enable QUIC v99.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_99, false)
// When true, set the initial congestion control window from connection options
// in QuicSentPacketManager rather than TcpCubicSenderBytes.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_unified_iw_options, false)
// Number of packets that the pacing sender allows in bursts during pacing.
QUIC_FLAG(int32_t, FLAGS_quic_lumpy_pacing_size, 1)
// Congestion window fraction that the pacing sender allows in bursts during
// pacing.
QUIC_FLAG(double, FLAGS_quic_lumpy_pacing_cwnd_fraction, 0.25f)
// Default enables QUIC ack decimation and adds a connection option to disable
// it.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_ack_decimation, false)
// If true, QUIC offload pacing when using USPS as egress method.
QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_offload_pacing_to_usps2, false)
// Max time that QUIC can pace packets into the future in ms.
QUIC_FLAG(int32_t, FLAGS_quic_max_pace_time_into_future_ms, 10)
// Smoothed RTT fraction that a connection can pace packets into the future.
QUIC_FLAG(double, FLAGS_quic_pace_time_into_future_srtt_fraction, 0.125f)
// If true, enable QUIC v44.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_44, true)
// Stop checking QuicUnackedPacketMap::HasUnackedRetransmittableFrames and
// instead rely on the existing check that bytes_in_flight > 0
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_optimize_inflight_check, false)
// When you\'re app-limited entering recovery, stay app-limited until you exit
// recovery in QUIC BBR.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_app_limited_recovery, false)
// If true, stop resetting ideal_next_packet_send_time_ in pacing sender.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_donot_reset_ideal_next_packet_send_time,
false)
// If true, enable experiment for testing PCC congestion-control.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_pcc3, false)
// When true, ensure BBR allows at least one MSS to be sent in response to an
// ACK in packet conservation.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_one_mss_conservation, false)
// Add 3 connection options to decrease the pacing and CWND gain in QUIC BBR
// STARTUP.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_slower_startup3, false)
// When true, the LOSS connection option allows for 1/8 RTT of reording instead
// of the current 1/8th threshold which has been found to be too large for fast
// loss recovery.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_eighth_rtt_loss_detection,
false)
// Enables the BBQ5 connection option, which forces saved aggregation values to
// expire when the bandwidth increases more than 25% in QUIC BBR STARTUP.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_slower_startup4, false)
// If true, try to aggregate acked stream frames.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_aggregate_acked_stream_frames_2,
true)
// If true, disable QUIC version 35.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_35, true)
// If true, increase size of random bytes in IETF stateless reset packet.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_more_random_bytes_in_stateless_reset,
true)
// If true, use new, lower-overhead implementation of LRU cache for compressed
// certificates.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_new_lru_cache, true)
// When true and the BBR9 connection option is present, BBR only considers
// bandwidth samples app-limited if they're not filling the pipe.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_bbr_flexible_app_limited, false)
// If true, calling StopReading() on a level-triggered QUIC stream sequencer
// will cause the sequencer to discard future data.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_stop_reading_when_level_triggered,
false)
// If true, mark packets for loss retransmission even they do not contain
// retransmittable frames.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_fix_mark_for_loss_retransmission,
true)
// If true, enable version 45.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_45, false)
// If true, QuicSession::HasPendingCryptoData checks whether the crypto stream's
// send buffer is empty. This flag fixes a bug where the retransmission alarm
// mode is wrong for the first CHLO packet.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_fix_has_pending_crypto_data,
true)
// When true, fix initialization and updating of
// |time_of_first_packet_sent_after_receiving_| in QuicConnection.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_fix_time_of_first_packet_sent_after_receiving,
true)
// When the STMP connection option is sent by the client, timestamps in the QUIC
// ACK frame are sent and processed.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_send_timestamps, false)
// When true, QUIC server push uses a unidirectional stream.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_unidirectional_server_push_stream,
true)
// This flag fixes a bug where dispatcher's last_packet_is_ietf_quic may be
// wrong when getting proof asynchronously.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_fix_last_packet_is_ietf_quic,
true)
// If true, dispatcher passes in a single version when creating a server
// connection, such that version negotiation is not supported in connection.
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_no_server_conn_ver_negotiation2,
false)
// If true, enable QUIC version 46.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_46, true)
// When true, cache that encryption has been established to save CPU.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_optimize_encryption_established,
true)
// When in STARTUP and recovery, do not add bytes_acked to QUIC BBR's CWND in
// CalculateCongestionWindow()
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_bbr_no_bytes_acked_in_startup_recovery,
false)
// If true, make GeneralLossAlgorithm::DetectLosses faster by never rescanning
// the same packet in QuicUnackedPacketMap.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_faster_detect_loss, true)
// If true, use common code for checking whether a new stream ID may be
// allocated.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_use_common_stream_check, false)
// If true, QuicEpollClock::Now() will monotonically increase.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_monotonic_epoll_clock, false)
// If true, a client connection would be closed when a version negotiation
// packet is received. It would be the higher layer's responsibility to do the
// reconnection.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_no_client_conn_ver_negotiation,
false)
// If true, public reset packets sent from GFE will include a kEPID tag.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_spurious_ack_alarm, false)
// If true, QuicSpdyStream::WritevBody() will convert iovs into QuicMemSliceSpan
// and call WriteMemSlices instead.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_call_write_mem_slices, false)
// If true, enables the BBS4 and BBS5 connection options, which reduce BBR's
// pacing rate in STARTUP as more losses occur as a fraction of CWND.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_bbr_startup_rate_reduction,
false)
// If true, disables key share caching for QUIC key exchange
QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_no_ephemeral_key_source, true)
// If true, QuicDispatcher will not assume all blocked writers share the same
// opinion about whether their packet writers are blocked.
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_check_blocked_writer_for_blockage,
false)
// If true, for QUIC V44, if a server connection is post handshake and has no
// termination packets, add it to time wait list with
// action=SEND_STATELESS_RESET.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_send_reset_for_post_handshake_connections_without_termination_packets,
true)
// If true, disconnected quic connection will not be added to dispatcher's write
// blocked list.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_connection_do_not_add_to_write_blocked_list_if_disconnected,
false)
// Changes internal in-memory representation of QUIC connection IDs to network
// byte order.
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_connection_ids_network_byte_order,
true)
// Allows use of new QUIC connection ID constructor designed for
// variable-length connection IDs when acting as client.
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_variable_length_connection_ids_client,
true)
// Allows use of new QUIC connection ID constructor designed for
// variable-length connection IDs when acting as server
QUIC_FLAG(bool,
FLAGS_quic_restart_flag_quic_variable_length_connection_ids_server,
true)
// If true, QuicPacketCreator::SetTransmissionType will set the transmission
// type of the next successfully added frame.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_set_transmission_type_for_next_frame,
true)
// If true, always send connection close/reset for IETF connections.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_always_reset_ietf_connections,
true)
// When true, allows the AKD2 and AKD4 connection options to continue activating
// ack decimation with reordering.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_keep_ack_decimation_reordering,
false)
// If true, close QUIC connection if peer acks packet number 0 because our
// implementation never sends packet number 0.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disallow_peer_ack_0, true)
// If true, log leaf cert subject name into warning log.
QUIC_FLAG(bool,
FLAGS_quic_reloadable_flag_quic_log_cert_name_for_empty_sct,
true)
// If true, close connection with INVALID_STOP_WAITING if received a
// STOP_WAITING with least_unacked 0.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_close_connection_with_zero_least_unacked_stop_waiting,
true)
// If true, QuicCryptoServerConfig will correctly rotate configs based on
// primary time.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_config_rotation, false)
// If true, use numeric_limits<uint64_t>::max() to represent uninitialized
// packet number.
QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_uint64max_uninitialized_pn, false)
// If true, Set is_current_packet_connectivity_probing_ to false in the end
// of QuicConnection::ProcessUdpPacket.
QUIC_FLAG(
bool,
FLAGS_quic_reloadable_flag_quic_clear_probing_mark_after_packet_processing,
true)
// If true, enable QUIC version 47 which adds CRYPTO frames.
QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_47, false)