Merge pull request #1663 from majestrate/latency-test-fec-fix-2021-06-09

Last minute fixes
pull/1664/head
Jeff 3 years ago committed by GitHub
commit 2d25c3cd91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -68,7 +68,10 @@ namespace llarp
, m_UserToNetworkPktQueue("endpoint_sendq", r->loop(), r->loop())
{
m_PacketSendWaker = r->loop()->make_waker([this]() { FlushWrite(); });
m_MessageSendWaker = r->loop()->make_waker([this]() { FlushSend(); });
m_MessageSendWaker = r->loop()->make_waker([this]() {
FlushSend();
Pump(Now());
});
m_PacketRouter = std::make_unique<vpn::PacketRouter>(
[this](net::IPPacket pkt) { HandleGotUserPacket(std::move(pkt)); });
#ifdef ANDROID

@ -370,7 +370,7 @@ namespace llarp
for (const auto& router : sessionsNeeded)
{
LogInfo("ensuring session to ", router, " for previously made commitment");
LogDebug("ensuring session to ", router, " for previously made commitment");
_sessionMaker->CreateSessionTo(router, nullptr);
}

@ -316,9 +316,9 @@ namespace llarp
self->hop->info.downstream,
self->hop->pathKey,
status);
self->hop = nullptr;
};
self->context->ForwardLRCM(self->hop->info.upstream, self->frames, func);
self->hop = nullptr;
}
// this is called from the logic thread

@ -405,6 +405,23 @@ namespace llarp
}
}
bool
Path::SendLatencyMessage(AbstractRouter* r)
{
const auto now = r->Now();
// send path latency test
routing::PathLatencyMessage latency{};
latency.T = randint();
latency.S = NextSeqNo();
m_LastLatencyTestID = latency.T;
m_LastLatencyTestTime = now;
LogDebug(Name(), " send latency test id=", latency.T);
if (not SendRoutingMessage(latency, r))
return false;
FlushUpstream(r);
return true;
}
void
Path::Tick(llarp_time_t now, AbstractRouter* r)
{
@ -439,15 +456,12 @@ namespace llarp
auto dlt = now - m_LastLatencyTestTime;
if (dlt > path::latency_interval && m_LastLatencyTestID == 0)
{
routing::PathLatencyMessage latency;
latency.T = randint();
m_LastLatencyTestID = latency.T;
m_LastLatencyTestTime = now;
SendRoutingMessage(latency, r);
FlushUpstream(r);
// reset ID so we don't mark ourself as dead if we drop a latency sample
r->loop()->call_later(
1s, [self = shared_from_this()]() { self->m_LastLatencyTestID = 0; });
SendLatencyMessage(r);
// latency test FEC
r->loop()->call_later(2s, [self = shared_from_this(), r]() {
if (self->m_LastLatencyTestID)
self->SendLatencyMessage(r);
});
return;
}
dlt = now - m_LastRecvMessage;
@ -684,16 +698,7 @@ namespace llarp
// persist session with upstream router until the path is done
r->PersistSessionUntil(Upstream(), intro.expiresAt);
MarkActive(now);
// send path latency test
routing::PathLatencyMessage latency;
latency.T = randint();
latency.S = NextSeqNo();
m_LastLatencyTestID = latency.T;
m_LastLatencyTestTime = now;
if (!SendRoutingMessage(latency, r))
return false;
FlushUpstream(r);
return true;
return SendLatencyMessage(r);
}
LogWarn("got unwarranted path confirm message on tx=", RXID(), " rx=", RXID());
return false;
@ -731,11 +736,11 @@ namespace llarp
constexpr auto MaxLatencySamples = 8;
bool
Path::HandlePathLatencyMessage(const routing::PathLatencyMessage& msg, AbstractRouter* r)
Path::HandlePathLatencyMessage(const routing::PathLatencyMessage&, AbstractRouter* r)
{
const auto now = r->Now();
MarkActive(now);
if (msg.L == m_LastLatencyTestID)
if (m_LastLatencyTestID)
{
m_LatencySamples.emplace_back(now - m_LastLatencyTestTime);

@ -400,6 +400,9 @@ namespace llarp
HandleAllDownstream(std::vector<RelayDownstreamMessage> msgs, AbstractRouter* r) override;
private:
bool
SendLatencyMessage(AbstractRouter* r);
/// call obtained exit hooks
bool
InformExitResult(llarp_time_t b);

@ -432,9 +432,6 @@ namespace llarp
if (NumInStatus(path::ePathBuilding) >= numDesiredPaths)
return false;
if (m_BadIntros.count(remoteIntro))
return true;
size_t numValidPaths = 0;
ForEachPath([now, &numValidPaths](path::Path_ptr path) {
if (not path->IsReady())

Loading…
Cancel
Save