--- nono/host/netdriver_slirp.cpp 2026/04/29 17:05:39 1.1.1.1 +++ nono/host/netdriver_slirp.cpp 2026/04/29 17:05:43 1.1.1.2 @@ -104,8 +104,11 @@ NetDriverSlirp::InitDriver() return false; } - backend.reset(new SlirpThread(this)); + try { + backend.reset(new SlirpThread(this)); + } catch (...) { } if ((bool)backend == false) { + warnx("Failed to initialize SlirpThread at %s", __method__); return false; } @@ -815,6 +818,19 @@ SlirpThread::WriteHook(const std::vector if (memcmp(ipv6.dstip, &dns6, sizeof(dns6)) == 0) { return false; } + // リンクローカルはここで作って比較。 + struct in6_addr linklocal; + memset(&linklocal, 0, sizeof(linklocal)); + linklocal.s6_addr[0] = 0xfe; + linklocal.s6_addr[1] = 0x80; + memcpy(&linklocal.s6_addr[8], &gw6.s6_addr[8], 8); + if (memcmp(ipv6.dstip, &linklocal, sizeof(linklocal)) == 0) { + return false; + } + memcpy(&linklocal.s6_addr[8], &dns6.s6_addr[8], 8); + if (memcmp(ipv6.dstip, &linklocal, sizeof(linklocal)) == 0) { + return false; + } // ここから未実装ログが出る組み合わせ。