1
0
mirror of https://github.com/facebookincubator/mvfst.git synced 2025-11-24 04:01:07 +03:00

Implement basic ACK_FREQUENCY support.

Summary: As in title. This doesn't actually send any frames, but implements basic support for the transport parameter and responding to the frames.

Reviewed By: yangchi

Differential Revision: D26134787

fbshipit-source-id: 2c48e01084034317c8f36f89c69d172e3cb42278
This commit is contained in:
Matt Joras
2021-02-02 19:00:56 -08:00
committed by Facebook GitHub Bot
parent 4f320d8e7b
commit 21f190220e
22 changed files with 238 additions and 6 deletions

View File

@@ -55,6 +55,7 @@ folly::Optional<QuicSimpleFrame> updateSimpleFrameOnPacketClone(
case QuicSimpleFrame::Type::MaxStreamsFrame:
case QuicSimpleFrame::Type::HandshakeDoneFrame:
case QuicSimpleFrame::Type::KnobFrame:
case QuicSimpleFrame::Type::AckFrequencyFrame:
case QuicSimpleFrame::Type::RetireConnectionIdFrame:
// TODO junqiw
return QuicSimpleFrame(frame);
@@ -133,6 +134,7 @@ void updateSimpleFrameOnPacketLoss(
case QuicSimpleFrame::Type::MaxStreamsFrame:
case QuicSimpleFrame::Type::RetireConnectionIdFrame:
case QuicSimpleFrame::Type::KnobFrame:
case QuicSimpleFrame::Type::AckFrequencyFrame:
conn.pendingEvents.frames.push_back(frame);
break;
}
@@ -294,6 +296,24 @@ bool updateSimpleFrameOnPacketReceived(
knobFrame.knobSpace, knobFrame.id, knobFrame.blob->clone());
return true;
}
case QuicSimpleFrame::Type::AckFrequencyFrame: {
if (!conn.transportSettings.minAckDelay.hasValue()) {
return true;
}
const auto ackFrequencyFrame = frame.asAckFrequencyFrame();
auto& ackState = conn.ackStates.appDataAckState;
if (!ackState.ackFrequencySequenceNumber ||
ackFrequencyFrame->sequenceNumber >
ackState.ackFrequencySequenceNumber.value()) {
ackState.tolerance = ackFrequencyFrame->packetTolerance;
ackState.ignoreReorder = ackFrequencyFrame->ignoreOrder;
conn.ackStates.maxAckDelay =
std::chrono::microseconds(std::max<uint64_t>(
conn.transportSettings.minAckDelay->count(),
ackFrequencyFrame->updateMaxAckDelay));
}
return true;
}
}
folly::assume_unreachable();
}