diff --git a/llarp/handlers/tun.cpp b/llarp/handlers/tun.cpp index c63392269..26fd604ef 100644 --- a/llarp/handlers/tun.cpp +++ b/llarp/handlers/tun.cpp @@ -399,7 +399,7 @@ namespace llarp { if(isV4 && SupportsV6()) { - msg.AddNXReply(); + msg.hdr_fields |= dns::flags_QR | dns::flags_AA | dns::flags_RA; } else if(HasAddress(addr)) { diff --git a/llarp/net/ip.cpp b/llarp/net/ip.cpp index 06a17579e..8b8cc6cb8 100644 --- a/llarp/net/ip.cpp +++ b/llarp/net/ip.cpp @@ -105,9 +105,22 @@ namespace llarp void IPPacket::UpdateV6Address(huint128_t src, huint128_t dst) { + if(sz <= 40) + return; auto hdr = HeaderV6(); + auto oldSrc = hdr->srcaddr; + auto oldDst = hdr->dstaddr; hdr->srcaddr = HUIntToIn6(src); hdr->dstaddr = HUIntToIn6(dst); + const size_t ihs = 40; + auto pld = buf + ihs; + auto psz = sz - ihs; + switch(hdr->proto) + { + //tcp + case 6: + return; + } } #if 0 diff --git a/llarp/net/ip.hpp b/llarp/net/ip.hpp index ed830a34d..927e4674b 100644 --- a/llarp/net/ip.hpp +++ b/llarp/net/ip.hpp @@ -78,7 +78,10 @@ struct ipv6_header { unsigned char version : 4; unsigned char pad_small : 4; - uint8_t pad [7]; + uint8_t pad [3]; + uint16_t payload_len; + uint8_t proto; + uint8_t hoplimit; in6_addr srcaddr; in6_addr dstaddr; };