Introduce kDefaultMaxPacketSizeForTunnels
This CL makes no functional changes, it simply refactors the 1350 MTU to a single constant. We'll then be able to use this constant from Chrome for QUIC connections that carry connect-udp, such as for IP Protection.
PiperOrigin-RevId: 626451281
diff --git a/quiche/quic/core/quic_constants.h b/quiche/quic/core/quic_constants.h
index 5126040..cb81cd4 100644
--- a/quiche/quic/core/quic_constants.h
+++ b/quiche/quic/core/quic_constants.h
@@ -30,6 +30,12 @@
inline constexpr uint32_t kDefaultNumConnections = 2;
// Default initial maximum size in bytes of a QUIC packet.
inline constexpr QuicByteCount kDefaultMaxPacketSize = 1250;
+// Tunnels (such as MASQUE and QBONE) reduce the inner MTU so they work best
+// with a higher outer MTU. This means that outer connections could fail on some
+// networks where the UDP MTU is between 1250 and 1350, but allows inner QUIC
+// connections to still have 1200 bytes of UDP MTU, even if we apply two nested
+// levels of connect-udp proxying, as we do for IP Protection.
+inline constexpr QuicByteCount kDefaultMaxPacketSizeForTunnels = 1350;
// Default initial maximum size in bytes of a QUIC packet for servers.
inline constexpr QuicByteCount kDefaultServerMaxPacketSize = 1000;
// Maximum transmission unit on Ethernet.
diff --git a/quiche/quic/masque/masque_client.cc b/quiche/quic/masque/masque_client.cc
index f55fff6..6eddcf3 100644
--- a/quiche/quic/masque/masque_client.cc
+++ b/quiche/quic/masque/masque_client.cc
@@ -87,7 +87,7 @@
return nullptr;
}
- masque_client->set_initial_max_packet_length(kMasqueMaxOuterPacketSize);
+ masque_client->set_initial_max_packet_length(kDefaultMaxPacketSizeForTunnels);
masque_client->set_drop_response_body(false);
if (!masque_client->Initialize()) {
QUIC_LOG(ERROR) << "Failed to initialize masque_client";
diff --git a/quiche/quic/masque/masque_server_session.cc b/quiche/quic/masque/masque_server_session.cc
index 82b9a4d..a413f58 100644
--- a/quiche/quic/masque/masque_server_session.cc
+++ b/quiche/quic/masque/masque_server_session.cc
@@ -138,10 +138,10 @@
masque_server_backend_(masque_server_backend),
event_loop_(event_loop),
masque_mode_(masque_mode) {
- // Artificially increase the max packet length to 1350 to ensure we can fit
- // QUIC packets inside DATAGRAM frames.
+ // Artificially increase the max packet length to ensure we can fit QUIC
+ // packets inside DATAGRAM frames.
// TODO(b/181606597) Remove this workaround once we use PMTUD.
- connection->SetMaxPacketLength(kMasqueMaxOuterPacketSize);
+ connection->SetMaxPacketLength(kDefaultMaxPacketSizeForTunnels);
masque_server_backend_->RegisterBackendClient(connection_id(), this);
QUICHE_DCHECK_NE(event_loop_, nullptr);
diff --git a/quiche/quic/masque/masque_utils.h b/quiche/quic/masque/masque_utils.h
index 900e62c..64bedd7 100644
--- a/quiche/quic/masque/masque_utils.h
+++ b/quiche/quic/masque/masque_utils.h
@@ -28,7 +28,6 @@
// Maximum packet size for encapsulated connections.
enum : QuicByteCount {
kMasqueMaxEncapsulatedPacketSize = 1250,
- kMasqueMaxOuterPacketSize = 1350,
kMasqueIpPacketBufferSize = 1501,
// Enough for a VLAN tag, but not Stacked VLANs.
kMasqueEthernetFrameBufferSize = 1523,