From 7c0fc69ad89611ba72499b6cbf2ba0311732ee08 Mon Sep 17 00:00:00 2001 From: Jeff Becker Date: Fri, 6 Dec 2019 15:33:43 -0500 Subject: [PATCH] use ipv6 only with ipv6 packets --- llarp/exit/endpoint.cpp | 7 ++++++- llarp/handlers/exit.cpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/llarp/exit/endpoint.cpp b/llarp/exit/endpoint.cpp index a9df603a7..a2af62245 100644 --- a/llarp/exit/endpoint.cpp +++ b/llarp/exit/endpoint.cpp @@ -154,7 +154,12 @@ namespace llarp src = m_Parent->GetIfAddr(); else src = pkt.srcv6(); - pkt.UpdateIPv6Address(src, m_IP); + if(pkt.IsV6()) + pkt.UpdateIPv6Address(src, m_IP); + else + pkt.UpdateIPv4Address(xhtonl(net::IPPacket::TruncateV6(src)), + xhtonl(net::IPPacket::TruncateV6(m_IP))); + const auto _pktbuf = pkt.Buffer(); const llarp_buffer_t& pktbuf = _pktbuf.underlying; const uint8_t queue_idx = pktbuf.sz / llarp::routing::ExitPadSize; diff --git a/llarp/handlers/exit.cpp b/llarp/handlers/exit.cpp index 7c5c490d6..5b429a65f 100644 --- a/llarp/handlers/exit.cpp +++ b/llarp/handlers/exit.cpp @@ -479,7 +479,11 @@ namespace llarp if(!pkt.Load(buf)) return false; // rewrite ip - pkt.UpdateIPv6Address(from, m_IfAddr); + if(m_UseV6) + pkt.UpdateIPv6Address(from, m_IfAddr); + else + pkt.UpdateIPv4Address(xhtonl(net::IPPacket::TruncateV6(from)), + xhtonl(net::IPPacket::TruncateV6(m_IfAddr))); return llarp_ev_tun_async_write(&m_Tun, pkt.Buffer()); } @@ -579,6 +583,7 @@ namespace llarp m_HigestAddr = m_OurRange.HighestAddr(); LogInfo(Name(), " set ifaddr range to ", m_Tun.ifaddr, "/", m_Tun.netmask, " lo=", m_IfAddr, " hi=", m_HigestAddr); + m_UseV6 = false; } if(k == "ifname") {