From 8114f63e702c4b22c5fa739a5fb31feb388b81f4 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Sun, 16 Sep 2018 08:25:17 -0400 Subject: [PATCH] use queues --- llarp/ev.hpp | 7 +------ llarp/handlers/tun.cpp | 37 +++++++++++-------------------------- llarp/path.cpp | 1 + llarp/service/protocol.cpp | 1 + 4 files changed, 14 insertions(+), 32 deletions(-) diff --git a/llarp/ev.hpp b/llarp/ev.hpp index 277ca8be5..3ff737e19 100644 --- a/llarp/ev.hpp +++ b/llarp/ev.hpp @@ -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 diff --git a/llarp/handlers/tun.cpp b/llarp/handlers/tun.cpp index 7d296d348..9fcc5421b 100644 --- a/llarp/handlers/tun.cpp +++ b/llarp/handlers/tun.cpp @@ -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 { diff --git a/llarp/path.cpp b/llarp/path.cpp index db5e879ea..7468f1ef6 100644 --- a/llarp/path.cpp +++ b/llarp/path.cpp @@ -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; diff --git a/llarp/service/protocol.cpp b/llarp/service/protocol.cpp index dcf5fe1c4..c9edd849a 100644 --- a/llarp/service/protocol.cpp +++ b/llarp/service/protocol.cpp @@ -339,6 +339,7 @@ namespace llarp ProtocolFrame::ProtocolFrame() { T.Zero(); + C.Zero(); } bool