|  | // 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, limit quic stream length to be below 2^62. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_stream_too_long, true) | 
|  |  | 
|  | // If true, enable QUIC v99. | 
|  | QUIC_FLAG(bool, FLAGS_quic_enable_version_99, false) | 
|  |  | 
|  | #if defined(COBALT_QUIC46) | 
|  | // This flag was changed into a reloadable one in m74, we keep both temporarily | 
|  | // to minimize the scope of extra code changes. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_99, false) | 
|  | #endif | 
|  |  | 
|  | // 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, QuicCryptoServerConfig::EvaluateClientHello will use GetCertChain | 
|  | // instead of the more expensive GetProof. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_use_get_cert_chain, false) | 
|  |  | 
|  | // If true, try to aggregate acked stream frames. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_aggregate_acked_stream_frames_2, | 
|  | false) | 
|  |  | 
|  | // If true, only process stateless reset packets on the client side. | 
|  | QUIC_FLAG( | 
|  | bool, | 
|  | FLAGS_quic_reloadable_flag_quic_process_stateless_reset_at_client_only, | 
|  | false) | 
|  |  | 
|  | // If true, do not retransmit old window update frames. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_donot_retransmit_old_window_update2, | 
|  | false) | 
|  |  | 
|  | // If ture, make QuicSession::GetStream faster by skipping the lookup into | 
|  | // static stream map, when possible. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_session_faster_get_stream, | 
|  | false) | 
|  |  | 
|  | // If true, when session decides what to write, set a approximate retransmission | 
|  | // for packets to be retransmitted. Also check packet state in | 
|  | // IsPacketUsefulForRetransmittableData. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_is_useful_for_retrans, true) | 
|  |  | 
|  | // If true, QUIC connection will notify the debug visitor after a connectivity | 
|  | // probing is sent. | 
|  | QUIC_FLAG( | 
|  | bool, | 
|  | FLAGS_quic_reloadable_flag_quic_notify_debug_visitor_on_connectivity_probing_sent, | 
|  | true) | 
|  |  | 
|  | // If true, disable QUIC version 35. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_35, false) | 
|  | // If true, then QuicCryptoServerConfig::ProcessClientHelloAfterGetProof() will | 
|  | // use the async interface to KeyExchange::CalculateSharedKeys. | 
|  | QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_use_async_key_exchange, false) | 
|  |  | 
|  | // 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, | 
|  | false) | 
|  |  | 
|  | // If true, use new, lower-overhead implementation of LRU cache for compressed | 
|  | // certificates. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_new_lru_cache, false) | 
|  |  | 
|  | // 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, QuicSpdySession::OnStreamHeaderList() will close the connection | 
|  | // if the stream id referenced indicates a static stream." | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_restart_flag_quic_check_stream_nonstatic_on_header_list, | 
|  | true) | 
|  |  | 
|  | // 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, | 
|  | false) | 
|  |  | 
|  | // 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) | 
|  |  | 
|  | // This flag fixes a bug where a zombie stream cannot be correctly reset. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_reset_zombie_streams, 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) | 
|  |  | 
|  | // If true, deprecate PostProcessAfterData from QuicConnection. This is used to | 
|  | // fix a bug where window update causes session to write data. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_deprecate_post_process_after_data, | 
|  | true) | 
|  |  | 
|  | // If true, QuicSpdyClientSessionBase::OnPromiseHeaderList() will close the | 
|  | // connection if the stream id referenced indicates a static stream. | 
|  | QUIC_FLAG( | 
|  | bool, | 
|  | FLAGS_quic_reloadable_flag_quic_check_stream_nonstatic_on_promised_headers, | 
|  | false) | 
|  |  | 
|  | // 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) | 
|  |  | 
|  | // If true, use a common stream ID limit checking method. | 
|  | QUIC_FLAG(bool, FLAGS_quic_use_common_stream_check, false) | 
|  |  | 
|  | // When true, don't arm the path degrading alarm on the server side and stop | 
|  | // using HasUnackedPackets to decide when to arm it. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_path_degrading_alarm, false) | 
|  |  | 
|  | // new flags in m74 | 
|  |  | 
|  | // 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 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, 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, true) | 
|  |  | 
|  | // 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, 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, | 
|  | 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, 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, QuicCryptoServerConfig will correctly rotate configs based on | 
|  | // primary time. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_config_rotation, true) | 
|  |  | 
|  | // If true, use numeric_limits<uint64_t>::max() to represent uninitialized | 
|  | // packet number. | 
|  | QUIC_FLAG(bool, FLAGS_quic_restart_flag_quic_uint64max_uninitialized_pn, true) | 
|  |  | 
|  | // If true, enable QUIC version 47 which adds CRYPTO frames. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_enable_version_47, false) | 
|  |  | 
|  | // If true, disable QUIC version 39. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_disable_version_39, false) | 
|  |  | 
|  | // If true, simplifies the implementation of | 
|  | // QuicFramer::BuildConnectivityProbingPacket(). | 
|  | QUIC_FLAG( | 
|  | bool, | 
|  | FLAGS_quic_reloadable_flag_quic_simplify_build_connectivity_probing_packet, | 
|  | true) | 
|  |  | 
|  | // If true, use one loss algorithm per encryption level. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_use_uber_loss_algorithm, false) | 
|  |  | 
|  | // When true, QuicFramer will use AppendIetfConnectionIdsNew instead of | 
|  | // AppendIetfConnectionId. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_use_new_append_connection_id, | 
|  | false) | 
|  |  | 
|  | // If true, QuicStreamSequencerBuffer will switch to a new | 
|  | // QuicIntervalSet::AddOptimizedForAppend method in OnStreamData(). | 
|  | QUIC_FLAG( | 
|  | bool, | 
|  | FLAGS_quic_reloadable_flag_quic_faster_interval_add_in_sequence_buffer, | 
|  | false) | 
|  |  | 
|  | // If true, GFE time wait list will send termination packets based on current | 
|  | // packet's encryption level. | 
|  | QUIC_FLAG(bool, FLAGS_quic_reloadable_flag_quic_fix_termination_packets, false) | 
|  |  | 
|  | // If true, stop using AckBundling mode to send ACK, also deprecate ack_queued | 
|  | // from QuicConnection. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_deprecate_ack_bundling_mode, | 
|  | false) | 
|  |  | 
|  | // If true, enforce that QUIC CHLOs fit in one packet. | 
|  | QUIC_FLAG(bool, FLAGS_quic_enforce_single_packet_chlo, true) | 
|  |  | 
|  | // If both this flag and gfe2_reloadable_flag_quic_deprecate_ack_bundling_mode | 
|  | // are true, QuicReceivedPacketManager decides when to send ACKs. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_rpm_decides_when_to_send_acks, | 
|  | false) | 
|  |  | 
|  | // If true, instead of send encryption none termination packets, send stateless | 
|  | // reset in reponse to short headers. | 
|  | QUIC_FLAG(bool, | 
|  | FLAGS_quic_reloadable_flag_quic_always_reset_short_header_packets, | 
|  | false) | 
|  |  | 
|  | // New flags in m74 |