mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-11-09 10:00:57 +03:00
Differentiate PacketDropReasons
Summary: The existing PacketDropReason values cover many branches in the code making it impossible to isolate the reason for a PARSE_ERROR, INVALID_PACKET, CONNECTION_NOT_FOUND. This change breaks them down into more values that are each used in a single branch. Reviewed By: mjoras Differential Revision: D39149490 fbshipit-source-id: 28cbe1ea6c4a06cf55960058edaa48c28ed4d2ef
This commit is contained in:
committed by
Facebook GitHub Bot
parent
84d93599a5
commit
227236ef85
@@ -268,7 +268,8 @@ void QuicClientTransport::processPacketData(
|
|||||||
|
|
||||||
RegularQuicPacket* regularOptional = parsedPacket.regularPacket();
|
RegularQuicPacket* regularOptional = parsedPacket.regularPacket();
|
||||||
if (!regularOptional) {
|
if (!regularOptional) {
|
||||||
QUIC_STATS(statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
QUIC_STATS(
|
||||||
|
statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR_CLIENT);
|
||||||
if (conn_->qLogger) {
|
if (conn_->qLogger) {
|
||||||
conn_->qLogger->addPacketDrop(packetSize, kParse);
|
conn_->qLogger->addPacketDrop(packetSize, kParse);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2765,7 +2765,7 @@ TEST_F(
|
|||||||
|
|
||||||
TEST_P(QuicClientTransportAfterStartTest, ReadStreamCoalesced) {
|
TEST_P(QuicClientTransportAfterStartTest, ReadStreamCoalesced) {
|
||||||
expectQuicStatsPacketDrop(
|
expectQuicStatsPacketDrop(
|
||||||
QuicTransportStatsCallback::PacketDropReason::PARSE_ERROR);
|
QuicTransportStatsCallback::PacketDropReason::PARSE_ERROR_CLIENT);
|
||||||
uint8_t connIdSize = GetParam();
|
uint8_t connIdSize = GetParam();
|
||||||
|
|
||||||
client->getNonConstConn().clientConnectionId =
|
client->getNonConstConn().clientConnectionId =
|
||||||
@@ -5465,7 +5465,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
|
|
||||||
TEST_F(QuicProcessDataTest, ProcessDataWithGarbageAtEnd) {
|
TEST_F(QuicProcessDataTest, ProcessDataWithGarbageAtEnd) {
|
||||||
expectQuicStatsPacketDrop(
|
expectQuicStatsPacketDrop(
|
||||||
QuicTransportStatsCallback::PacketDropReason::PARSE_ERROR);
|
QuicTransportStatsCallback::PacketDropReason::PARSE_ERROR_CLIENT);
|
||||||
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Client);
|
auto qLogger = std::make_shared<FileQLogger>(VantagePoint::Client);
|
||||||
client->getNonConstConn().qLogger = qLogger;
|
client->getNonConstConn().qLogger = qLogger;
|
||||||
auto params = mockClientHandshake->getServerTransportParams();
|
auto params = mockClientHandshake->getServerTransportParams();
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ bool QuicServerWorker::maybeSendVersionNegotiationPacketOrDrop(
|
|||||||
if (isInitial && datagramLen < kMinInitialPacketSize) {
|
if (isInitial && datagramLen < kMinInitialPacketSize) {
|
||||||
VLOG(3) << "Dropping initial packet due to invalid size";
|
VLOG(3) << "Dropping initial packet due to invalid size";
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::INVALID_PACKET);
|
statsCallback_, onPacketDropped, PacketDropReason::INVALID_PACKET_SIZE);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
isInitial =
|
isInitial =
|
||||||
@@ -235,7 +235,9 @@ bool QuicServerWorker::maybeSendVersionNegotiationPacketOrDrop(
|
|||||||
if (negotiationNeeded && !isInitial) {
|
if (negotiationNeeded && !isInitial) {
|
||||||
VLOG(3) << "Dropping non-initial packet due to invalid version";
|
VLOG(3) << "Dropping non-initial packet due to invalid version";
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::INVALID_PACKET);
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::INVALID_PACKET_VERSION);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (negotiationNeeded) {
|
if (negotiationNeeded) {
|
||||||
@@ -387,7 +389,9 @@ void QuicServerWorker::handleNetworkData(
|
|||||||
if (!cursor.canAdvance(sizeof(uint8_t))) {
|
if (!cursor.canAdvance(sizeof(uint8_t))) {
|
||||||
VLOG(4) << "Dropping packet too small";
|
VLOG(4) << "Dropping packet too small";
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::INVALID_PACKET);
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::INVALID_PACKET_INITIAL_BYTE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
uint8_t initialByte = cursor.readBE<uint8_t>();
|
uint8_t initialByte = cursor.readBE<uint8_t>();
|
||||||
@@ -399,7 +403,9 @@ void QuicServerWorker::handleNetworkData(
|
|||||||
if (!parsedShortHeader) {
|
if (!parsedShortHeader) {
|
||||||
if (!tryHandlingAsHealthCheck(client, *data)) {
|
if (!tryHandlingAsHealthCheck(client, *data)) {
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_SHORT_HEADER);
|
||||||
VLOG(6) << "Failed to parse short header";
|
VLOG(6) << "Failed to parse short header";
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -424,7 +430,9 @@ void QuicServerWorker::handleNetworkData(
|
|||||||
if (!parsedLongHeader) {
|
if (!parsedLongHeader) {
|
||||||
if (!tryHandlingAsHealthCheck(client, *data)) {
|
if (!tryHandlingAsHealthCheck(client, *data)) {
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_LONG_HEADER);
|
||||||
VLOG(6) << "Failed to parse long header";
|
VLOG(6) << "Failed to parse long header";
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -458,7 +466,9 @@ void QuicServerWorker::handleNetworkData(
|
|||||||
// drop packet if connId is present but is not valid.
|
// drop packet if connId is present but is not valid.
|
||||||
VLOG(3) << "Dropping packet due to invalid connectionId";
|
VLOG(3) << "Dropping packet due to invalid connectionId";
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_, onPacketDropped, PacketDropReason::INVALID_PACKET);
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::INVALID_PACKET_CID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
RoutingData routingData(
|
RoutingData routingData(
|
||||||
@@ -476,7 +486,10 @@ void QuicServerWorker::handleNetworkData(
|
|||||||
isForwardedData);
|
isForwardedData);
|
||||||
} catch (const std::exception& ex) {
|
} catch (const std::exception& ex) {
|
||||||
// Drop the packet.
|
// Drop the packet.
|
||||||
QUIC_STATS(statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
QUIC_STATS(
|
||||||
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_EXCEPTION);
|
||||||
VLOG(6) << "Failed to parse packet header " << ex.what();
|
VLOG(6) << "Failed to parse packet header " << ex.what();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -602,7 +615,7 @@ void QuicServerWorker::forwardNetworkData(
|
|||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_,
|
statsCallback_,
|
||||||
onPacketDropped,
|
onPacketDropped,
|
||||||
PacketDropReason::CONNECTION_NOT_FOUND);
|
PacketDropReason::UNKNOWN_CID_VERSION);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -693,7 +706,7 @@ void QuicServerWorker::dispatchPacketData(
|
|||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_,
|
statsCallback_,
|
||||||
onPacketDropped,
|
onPacketDropped,
|
||||||
PacketDropReason::INVALID_PACKET);
|
PacketDropReason::INVALID_PACKET_SIZE_INITIAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -868,7 +881,10 @@ void QuicServerWorker::dispatchPacketData(
|
|||||||
if (!connIdAlgo_->canParse(routingData.destinationConnId)) {
|
if (!connIdAlgo_->canParse(routingData.destinationConnId)) {
|
||||||
VLOG(3) << "Dropping packet with bad DCID, routingInfo="
|
VLOG(3) << "Dropping packet with bad DCID, routingInfo="
|
||||||
<< logRoutingInfo(routingData.destinationConnId);
|
<< logRoutingInfo(routingData.destinationConnId);
|
||||||
QUIC_STATS(statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
QUIC_STATS(
|
||||||
|
statsCallback_,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_BAD_DCID);
|
||||||
// TODO do we need to reset?
|
// TODO do we need to reset?
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -880,7 +896,8 @@ void QuicServerWorker::dispatchPacketData(
|
|||||||
connIdParam.error().what(),
|
connIdParam.error().what(),
|
||||||
folly::to<std::string>(connIdParam.error().errorCode()),
|
folly::to<std::string>(connIdParam.error().errorCode()),
|
||||||
logRoutingInfo(routingData.destinationConnId));
|
logRoutingInfo(routingData.destinationConnId));
|
||||||
QUIC_STATS(statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
QUIC_STATS(
|
||||||
|
statsCallback_, onPacketDropped, PacketDropReason::PARSE_ERROR_DCID);
|
||||||
// TODO do we need to reset?
|
// TODO do we need to reset?
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -905,9 +922,7 @@ void QuicServerWorker::dispatchPacketData(
|
|||||||
|
|
||||||
if (!packetForwardingEnabled_ || isForwardedData) {
|
if (!packetForwardingEnabled_ || isForwardedData) {
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
statsCallback_,
|
statsCallback_, onPacketDropped, PacketDropReason::CANNOT_FORWARD_DATA);
|
||||||
onPacketDropped,
|
|
||||||
PacketDropReason::CONNECTION_NOT_FOUND);
|
|
||||||
return sendResetPacket(
|
return sendResetPacket(
|
||||||
routingData.headerForm,
|
routingData.headerForm,
|
||||||
client,
|
client,
|
||||||
|
|||||||
@@ -692,6 +692,8 @@ void handleCipherUnavailable(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kNoData);
|
conn.qLogger->addPacketDrop(packetSize, kNoData);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback, onPacketDropped, PacketDropReason::EMPTY_DATA);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (originalData->protectionType != ProtectionType::ZeroRtt &&
|
if (originalData->protectionType != ProtectionType::ZeroRtt &&
|
||||||
@@ -700,6 +702,10 @@ void handleCipherUnavailable(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kUnexpectedProtectionLevel);
|
conn.qLogger->addPacketDrop(packetSize, kUnexpectedProtectionLevel);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_PROTECTION_LEVEL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -711,6 +717,8 @@ void handleCipherUnavailable(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kMaxBuffered);
|
conn.qLogger->addPacketDrop(packetSize, kMaxBuffered);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback, onPacketDropped, PacketDropReason::MAX_BUFFERED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -721,6 +729,10 @@ void handleCipherUnavailable(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketBuffered(originalData->protectionType, packetSize);
|
conn.qLogger->addPacketBuffered(originalData->protectionType, packetSize);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_PACKET_BUFFERED);
|
||||||
ServerEvents::ReadData pendingReadData;
|
ServerEvents::ReadData pendingReadData;
|
||||||
pendingReadData.peer = readData.peer;
|
pendingReadData.peer = readData.peer;
|
||||||
pendingReadData.networkData = NetworkDataSingle(
|
pendingReadData.networkData = NetworkDataSingle(
|
||||||
@@ -735,6 +747,11 @@ void handleCipherUnavailable(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kBufferUnavailable);
|
conn.qLogger->addPacketDrop(packetSize, kBufferUnavailable);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::BUFFER_UNAVAILABLE);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -760,10 +777,12 @@ void onServerReadDataFromOpen(
|
|||||||
conn.qLogger->addPacketDrop(
|
conn.qLogger->addPacketDrop(
|
||||||
0,
|
0,
|
||||||
QuicTransportStatsCallback::toString(
|
QuicTransportStatsCallback::toString(
|
||||||
PacketDropReason::PARSE_ERROR));
|
PacketDropReason::PARSE_ERROR_LONG_HEADER_INITIAL));
|
||||||
}
|
}
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
conn.statsCallback, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::PARSE_ERROR_LONG_HEADER_INITIAL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QuicVersion version = parsedLongHeader->invariant.version;
|
QuicVersion version = parsedLongHeader->invariant.version;
|
||||||
@@ -773,12 +792,12 @@ void onServerReadDataFromOpen(
|
|||||||
conn.qLogger->addPacketDrop(
|
conn.qLogger->addPacketDrop(
|
||||||
0,
|
0,
|
||||||
QuicTransportStatsCallback::toString(
|
QuicTransportStatsCallback::toString(
|
||||||
PacketDropReason::INVALID_PACKET));
|
PacketDropReason::INVALID_PACKET_VN));
|
||||||
}
|
}
|
||||||
QUIC_STATS(
|
QUIC_STATS(
|
||||||
conn.statsCallback,
|
conn.statsCallback,
|
||||||
onPacketDropped,
|
onPacketDropped,
|
||||||
PacketDropReason::INVALID_PACKET);
|
PacketDropReason::INVALID_PACKET_VN);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -874,6 +893,10 @@ void onServerReadDataFromOpen(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kRetry);
|
conn.qLogger->addPacketDrop(packetSize, kRetry);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_RETRY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::STATELESS_RESET: {
|
case CodecResult::Type::STATELESS_RESET: {
|
||||||
@@ -881,6 +904,10 @@ void onServerReadDataFromOpen(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kReset);
|
conn.qLogger->addPacketDrop(packetSize, kReset);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_RESET);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::NOTHING: {
|
case CodecResult::Type::NOTHING: {
|
||||||
@@ -888,6 +915,10 @@ void onServerReadDataFromOpen(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_NOTHING);
|
||||||
if (firstPacketFromPeer) {
|
if (firstPacketFromPeer) {
|
||||||
throw QuicInternalException(
|
throw QuicInternalException(
|
||||||
"Failed to decrypt first packet from peer",
|
"Failed to decrypt first packet from peer",
|
||||||
@@ -903,10 +934,8 @@ void onServerReadDataFromOpen(
|
|||||||
if (!regularOptional) {
|
if (!regularOptional) {
|
||||||
// We were unable to parse the packet, drop for now. All the drop reasons
|
// We were unable to parse the packet, drop for now. All the drop reasons
|
||||||
// should have already been logged into QLogger and QuicTrace inside the
|
// should have already been logged into QLogger and QuicTrace inside the
|
||||||
// previous switch-case block. We just need to update QUIC_STATS here.
|
// previous switch-case block. All stats have already been updated.
|
||||||
VLOG(10) << "Not able to parse QUIC packet " << conn;
|
VLOG(10) << "Not able to parse QUIC packet " << conn;
|
||||||
QUIC_STATS(
|
|
||||||
conn.statsCallback, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (regularOptional->frames.empty()) {
|
if (regularOptional->frames.empty()) {
|
||||||
@@ -1420,6 +1449,10 @@ void onServerReadDataFromClosed(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::CIPHER_UNAVAILABLE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::RETRY: {
|
case CodecResult::Type::RETRY: {
|
||||||
@@ -1428,6 +1461,10 @@ void onServerReadDataFromClosed(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kRetry);
|
conn.qLogger->addPacketDrop(packetSize, kRetry);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_RETRY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::STATELESS_RESET: {
|
case CodecResult::Type::STATELESS_RESET: {
|
||||||
@@ -1435,6 +1472,10 @@ void onServerReadDataFromClosed(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kReset);
|
conn.qLogger->addPacketDrop(packetSize, kReset);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_RESET);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::NOTHING: {
|
case CodecResult::Type::NOTHING: {
|
||||||
@@ -1442,6 +1483,10 @@ void onServerReadDataFromClosed(
|
|||||||
if (conn.qLogger) {
|
if (conn.qLogger) {
|
||||||
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
conn.qLogger->addPacketDrop(packetSize, kCipherUnavailable);
|
||||||
}
|
}
|
||||||
|
QUIC_STATS(
|
||||||
|
conn.statsCallback,
|
||||||
|
onPacketDropped,
|
||||||
|
PacketDropReason::UNEXPECTED_NOTHING);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CodecResult::Type::REGULAR_PACKET:
|
case CodecResult::Type::REGULAR_PACKET:
|
||||||
@@ -1450,14 +1495,8 @@ void onServerReadDataFromClosed(
|
|||||||
auto regularOptional = parsedPacket.regularPacket();
|
auto regularOptional = parsedPacket.regularPacket();
|
||||||
if (!regularOptional) {
|
if (!regularOptional) {
|
||||||
// We were unable to parse the packet, drop for now.
|
// We were unable to parse the packet, drop for now.
|
||||||
|
// Packet drop has already been added to qlog and stats
|
||||||
VLOG(10) << "Not able to parse QUIC packet " << conn;
|
VLOG(10) << "Not able to parse QUIC packet " << conn;
|
||||||
if (conn.qLogger) {
|
|
||||||
conn.qLogger->addPacketDrop(
|
|
||||||
packetSize,
|
|
||||||
QuicTransportStatsCallback::toString(PacketDropReason::PARSE_ERROR));
|
|
||||||
}
|
|
||||||
QUIC_STATS(
|
|
||||||
conn.statsCallback, onPacketDropped, PacketDropReason::PARSE_ERROR);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (regularOptional->frames.empty()) {
|
if (regularOptional->frames.empty()) {
|
||||||
|
|||||||
@@ -539,7 +539,7 @@ TEST_F(QuicServerWorkerTest, NoConnFoundTestReset) {
|
|||||||
std::move(data),
|
std::move(data),
|
||||||
getTestConnectionId(hostId_),
|
getTestConnectionId(hostId_),
|
||||||
std::move(shortHeaderConnId),
|
std::move(shortHeaderConnId),
|
||||||
QuicTransportStatsCallback::PacketDropReason::CONNECTION_NOT_FOUND);
|
QuicTransportStatsCallback::PacketDropReason::CANNOT_FORWARD_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(QuicServerWorkerTest, RateLimit) {
|
TEST_F(QuicServerWorkerTest, RateLimit) {
|
||||||
|
|||||||
@@ -31,8 +31,28 @@ class QuicTransportStatsCallback {
|
|||||||
NONE,
|
NONE,
|
||||||
CONNECTION_NOT_FOUND,
|
CONNECTION_NOT_FOUND,
|
||||||
DECRYPTION_ERROR,
|
DECRYPTION_ERROR,
|
||||||
INVALID_PACKET,
|
INVALID_PACKET_SIZE,
|
||||||
PARSE_ERROR,
|
INVALID_PACKET_SIZE_INITIAL,
|
||||||
|
INVALID_PACKET_VERSION,
|
||||||
|
INVALID_PACKET_INITIAL_BYTE,
|
||||||
|
INVALID_PACKET_CID,
|
||||||
|
INVALID_PACKET_VN,
|
||||||
|
PARSE_ERROR_SHORT_HEADER,
|
||||||
|
PARSE_ERROR_LONG_HEADER,
|
||||||
|
PARSE_ERROR_LONG_HEADER_INITIAL,
|
||||||
|
PARSE_ERROR_EXCEPTION,
|
||||||
|
PARSE_ERROR_BAD_DCID,
|
||||||
|
PARSE_ERROR_DCID,
|
||||||
|
PARSE_ERROR_PACKET_BUFFERED,
|
||||||
|
PARSE_ERROR_CLIENT,
|
||||||
|
CIPHER_UNAVAILABLE,
|
||||||
|
UNEXPECTED_RETRY,
|
||||||
|
UNEXPECTED_RESET,
|
||||||
|
UNEXPECTED_NOTHING,
|
||||||
|
UNEXPECTED_PROTECTION_LEVEL,
|
||||||
|
EMPTY_DATA,
|
||||||
|
MAX_BUFFERED,
|
||||||
|
BUFFER_UNAVAILABLE,
|
||||||
PEER_ADDRESS_CHANGE,
|
PEER_ADDRESS_CHANGE,
|
||||||
PROTOCOL_VIOLATION,
|
PROTOCOL_VIOLATION,
|
||||||
ROUTING_ERROR_WRONG_HOST,
|
ROUTING_ERROR_WRONG_HOST,
|
||||||
@@ -46,6 +66,8 @@ class QuicTransportStatsCallback {
|
|||||||
CLIENT_STATE_CLOSED,
|
CLIENT_STATE_CLOSED,
|
||||||
CLIENT_SHUTDOWN,
|
CLIENT_SHUTDOWN,
|
||||||
INVALID_SRC_PORT,
|
INVALID_SRC_PORT,
|
||||||
|
UNKNOWN_CID_VERSION,
|
||||||
|
CANNOT_FORWARD_DATA,
|
||||||
// NOTE: MAX should always be at the end
|
// NOTE: MAX should always be at the end
|
||||||
MAX
|
MAX
|
||||||
};
|
};
|
||||||
@@ -187,10 +209,50 @@ class QuicTransportStatsCallback {
|
|||||||
return "CONNECTION_NOT_FOUND";
|
return "CONNECTION_NOT_FOUND";
|
||||||
case PacketDropReason::DECRYPTION_ERROR:
|
case PacketDropReason::DECRYPTION_ERROR:
|
||||||
return "DECRYPTION_ERROR";
|
return "DECRYPTION_ERROR";
|
||||||
case PacketDropReason::INVALID_PACKET:
|
case PacketDropReason::INVALID_PACKET_SIZE:
|
||||||
return "INVALID_PACKET";
|
return "INVALID_PACKET_SIZE";
|
||||||
case PacketDropReason::PARSE_ERROR:
|
case PacketDropReason::INVALID_PACKET_SIZE_INITIAL:
|
||||||
return "PARSE_ERROR";
|
return "INVALID_PACKET_SIZE_INITIAL";
|
||||||
|
case PacketDropReason::INVALID_PACKET_VERSION:
|
||||||
|
return "INVALID_PACKET_VERSION";
|
||||||
|
case PacketDropReason::INVALID_PACKET_INITIAL_BYTE:
|
||||||
|
return "INVALID_PACKET_INITIAL_BYTE";
|
||||||
|
case PacketDropReason::INVALID_PACKET_CID:
|
||||||
|
return "INVALID_PACKET_CID";
|
||||||
|
case PacketDropReason::INVALID_PACKET_VN:
|
||||||
|
return "INVALID_PACKET_VN";
|
||||||
|
case PacketDropReason::PARSE_ERROR_SHORT_HEADER:
|
||||||
|
return "PARSE_ERROR_SHORT_HEADER";
|
||||||
|
case PacketDropReason::PARSE_ERROR_LONG_HEADER:
|
||||||
|
return "PARSE_ERROR_LONG_HEADER";
|
||||||
|
case PacketDropReason::PARSE_ERROR_EXCEPTION:
|
||||||
|
return "PARSE_ERROR_EXCEPTION";
|
||||||
|
case PacketDropReason::PARSE_ERROR_BAD_DCID:
|
||||||
|
return "PARSE_ERROR_BAD_DCID";
|
||||||
|
case PacketDropReason::PARSE_ERROR_DCID:
|
||||||
|
return "PARSE_ERROR_DCID";
|
||||||
|
case PacketDropReason::PARSE_ERROR_PACKET_BUFFERED:
|
||||||
|
return "PARSE_ERROR_PACKET_BUFFERED";
|
||||||
|
case PacketDropReason::PARSE_ERROR_CLIENT:
|
||||||
|
return "PARSE_ERROR_CLIENT";
|
||||||
|
case PacketDropReason::PARSE_ERROR_LONG_HEADER_INITIAL:
|
||||||
|
return "PARSE_ERROR_LONG_HEADER_INITIAL";
|
||||||
|
case PacketDropReason::CIPHER_UNAVAILABLE:
|
||||||
|
return "CIPHER_UNAVAILABLE";
|
||||||
|
case PacketDropReason::UNEXPECTED_RETRY:
|
||||||
|
return "UNEXPECTED_RETRY";
|
||||||
|
case PacketDropReason::UNEXPECTED_RESET:
|
||||||
|
return "UNEXPECTED_RESET";
|
||||||
|
case PacketDropReason::UNEXPECTED_NOTHING:
|
||||||
|
return "UNEXPECTED_NOTHING";
|
||||||
|
case PacketDropReason::UNEXPECTED_PROTECTION_LEVEL:
|
||||||
|
return "UNEXPECTED_PROTECTION_LEVEL";
|
||||||
|
case PacketDropReason::EMPTY_DATA:
|
||||||
|
return "EMPTY_DATA";
|
||||||
|
case PacketDropReason::MAX_BUFFERED:
|
||||||
|
return "MAX_BUFFERED";
|
||||||
|
case PacketDropReason::BUFFER_UNAVAILABLE:
|
||||||
|
return "BUFFER_UNAVAILABLE";
|
||||||
case PacketDropReason::PEER_ADDRESS_CHANGE:
|
case PacketDropReason::PEER_ADDRESS_CHANGE:
|
||||||
return "PEER_ADDRESS_CHANGE";
|
return "PEER_ADDRESS_CHANGE";
|
||||||
case PacketDropReason::PROTOCOL_VIOLATION:
|
case PacketDropReason::PROTOCOL_VIOLATION:
|
||||||
@@ -217,10 +279,12 @@ class QuicTransportStatsCallback {
|
|||||||
return "CLIENT_SHUTDOWN";
|
return "CLIENT_SHUTDOWN";
|
||||||
case PacketDropReason::INVALID_SRC_PORT:
|
case PacketDropReason::INVALID_SRC_PORT:
|
||||||
return "INVALID_SRC_PORT";
|
return "INVALID_SRC_PORT";
|
||||||
|
case PacketDropReason::UNKNOWN_CID_VERSION:
|
||||||
|
return "UNKNOWN_CID_VERSION";
|
||||||
|
case PacketDropReason::CANNOT_FORWARD_DATA:
|
||||||
|
return "CANNOT_FORWARD_DATA";
|
||||||
case PacketDropReason::MAX:
|
case PacketDropReason::MAX:
|
||||||
return "MAX";
|
return "MAX";
|
||||||
default:
|
|
||||||
throw std::runtime_error("Undefined PacketDropReason passed");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user