use queues

pull/15/head
Jeff Becker 6 years ago
parent 2f2e3be8b7
commit 8114f63e70
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -43,12 +43,7 @@ namespace llarp
bool
queue_write(const void* data, size_t sz)
{
return m_writeq.EmplaceIf(
[&](WriteBuffer& pkt) -> bool {
return m_writeq.Size() < MAX_WRITE_QUEUE_SIZE
&& sz <= sizeof(pkt.buf);
},
data, sz);
return write(fd, data, sz) != -1;
}
/// called in event loop when fd is ready for writing

@ -185,10 +185,6 @@ namespace llarp
auto itr = m_IPToAddr.find(pkt.dst());
if(itr == m_IPToAddr.end())
{
in_addr a;
a.s_addr = pkt.dst();
llarp::LogWarn("drop packet to ", inet_ntoa(a));
llarp::DumpBuffer(pkt.Buffer());
return true;
}
return SendToOrQueue(itr->second, pkt.Buffer(),
@ -200,40 +196,27 @@ namespace llarp
TunEndpoint::HandleDataMessage(const PathID_t &src,
service::ProtocolMessage *msg)
{
llarp::LogInfo(Name(), " handle data message ", msg->payload.size(),
" bytes");
EnsureReplyPath(msg->sender);
uint32_t themIP = ObtainIPForAddr(msg->sender.Addr());
uint32_t usIP = m_OurIP;
auto buf = llarp::Buffer(msg->payload);
net::IPv4Packet pkt;
pkt.sz = std::min(buf.sz, sizeof(pkt.buf));
memcpy(pkt.buf, buf.base, pkt.sz);
pkt.src(themIP);
pkt.dst(usIP);
pkt.UpdateChecksum();
llarp::LogInfo(Name(), " handle data message ", msg->payload.size(),
" bytes from ", inet_ntoa({htonl(themIP)}));
llarp_ev_tun_async_write(&tunif, pkt.buf, pkt.sz);
/*
if(!m_NetworkToUserPktQueue.EmplaceIf(
if(m_NetworkToUserPktQueue.EmplaceIf(
[buf, themIP, usIP](net::IPv4Packet &pkt) -> bool {
// do packet info rewrite here
// TODO: don't truncate packet here
memcpy(pkt.buf, buf.base, std::min(buf.sz, sizeof(pkt.buf)));
pkt.sz = std::min(buf.sz, sizeof(pkt.buf));
memcpy(pkt.buf, buf.base, pkt.sz);
pkt.src(themIP);
pkt.dst(usIP);
pkt.UpdateChecksum();
return true;
}))
{
llarp::LogWarn("failed to parse buffer for ip traffic");
llarp::DumpBuffer(buf);
}
*/
llarp::LogInfo(Name(), " handle data message ", msg->payload.size(),
" bytes from ", inet_ntoa({htonl(themIP)}));
else
llarp::LogWarn(Name(), " dropped packet");
}
uint32_t
@ -247,7 +230,7 @@ namespace llarp
if(itr != m_AddrToIP.end())
{
// mark ip active
m_IPActivity[itr->second] = std::max(now, m_IPActivity[itr->second]);
MarkIPActive(itr->second);
return itr->second;
}
}
@ -259,6 +242,8 @@ namespace llarp
m_IPToAddr.insert(std::make_pair(nextIP, addr));
llarp::LogInfo(Name(), " mapped ", addr, " to ",
inet_ntoa({htonl(nextIP)}));
MarkIPActive(nextIP);
return nextIP;
}
else
{

@ -598,6 +598,7 @@ namespace llarp
Path::HandlePathLatencyMessage(
const llarp::routing::PathLatencyMessage* msg, llarp_router* r)
{
// TODO: reanimate dead paths if they get this message
if(msg->L == m_LastLatencyTestID && _status == ePathEstablished)
{
intro.latency = llarp_time_now_ms() - m_LastLatencyTestTime;

@ -339,6 +339,7 @@ namespace llarp
ProtocolFrame::ProtocolFrame()
{
T.Zero();
C.Zero();
}
bool

Loading…
Cancel
Save