Merge branch 'ipv6-tun' into ipv6-tun

pull/686/head
Jeff 5 years ago committed by GitHub
commit 8407c20b91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -111,14 +111,28 @@ namespace llarp
llarp::net::IPPacket pkt;
if(!pkt.Load(buf.underlying))
return false;
huint32_t dst;
if(m_RewriteSource)
dst = net::IPPacket::TruncateV6(m_Parent->GetIfAddr());
if(pkt.IsV6() && m_Parent->SupportsV6())
{
huint128_t dst;
if(m_RewriteSource)
dst = m_Parent->GetIfAddr();
else
dst = pkt.dstv6();
pkt.UpdateV6Address(m_IP, dst);
}
else if(pkt.IsV4() && !m_Parent->SupportsV6())
{
huint32_t dst;
if(m_RewriteSource)
dst = net::IPPacket::TruncateV6(m_Parent->GetIfAddr());
else
dst = pkt.dstv4();
pkt.UpdateIPV4Address(xhtonl(net::IPPacket::TruncateV6(m_IP)), xhtonl(dst));
}
else
dst = pkt.dstv4();
pkt.UpdateIPv4Address(xhtonl(net::IPPacket::TruncateV6(m_IP)),
xhtonl(dst));
{
return false;
}
m_UpstreamQueue.emplace(pkt, counter);
m_TxRate += buf.underlying.sz;
m_LastActive = m_Parent->Now();

@ -57,6 +57,12 @@ namespace llarp
return obj;
}
bool
ExitEndpoint::SupportsV6() const
{
return m_UseV6;
}
bool
ExitEndpoint::ShouldHookDNSMessage(const dns::Message &msg) const
{
@ -132,6 +138,7 @@ namespace llarp
|| msg.questions[0].qtype == dns::qTypeAAAA)
{
const bool isV6 = msg.questions[0].qtype == dns::qTypeAAAA;
const bool isV4 = msg.questions[0].qtype == dns::qTypeA;
if(msg.questions[0].IsName("random.snode"))
{
RouterID random;
@ -158,7 +165,11 @@ namespace llarp
{
huint128_t ip;
PubKey pubKey(r);
if(m_SNodeKeys.find(pubKey) == m_SNodeKeys.end())
if(isV4 && SupportsV6())
{
msg.hdr_fields |= dns::flags_QR | dns::flags_AA | dns::flags_RA;
}
else if(m_SNodeKeys.find(pubKey) == m_SNodeKeys.end())
{
// we do not have it mapped
// map it
@ -539,8 +550,14 @@ namespace llarp
}
else if(m_IfAddr.FromString(host_str))
{
m_UseV6 = true;
m_OurRange.netmask_bits = netmask_ipv6_bits(m_Tun.netmask);
}
else
{
LogError(Name(), " invalid ifaddr: ", v);
return false;
}
m_OurRange.addr = m_IfAddr;
m_NextAddr = m_IfAddr;
m_HigestAddr = m_IfAddr | (~m_OurRange.netmask_bits);

@ -32,6 +32,9 @@ namespace llarp
util::StatusObject
ExtractStatus() const;
bool
SupportsV6() const;
bool
ShouldHookDNSMessage(const dns::Message& msg) const override;
@ -177,6 +180,7 @@ namespace llarp
/// internet to llarp packet queue
PacketQueue_t m_InetToNetwork;
bool m_UseV6;
};
} // namespace handlers
} // namespace llarp

@ -718,6 +718,12 @@ namespace llarp
m_Exit->QueueUpstreamTraffic(std::move(pkt),
llarp::routing::ExitPadSize);
}
else if(m_Exit && pkt.IsV6())
{
pkt.UpdateV6Address({0}, pkt.dstv6());
m_Exit->QueueUpstreamTraffic(std::move(pkt),
llarp::routing::ExitPadSize);
}
else
{
llarp::LogWarn(Name(), " has no endpoint for ", dst);

Loading…
Cancel
Save