From nobody Wed Feb 11 04:36:35 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1490554068424846.1637320242629; Sun, 26 Mar 2017 11:47:48 -0700 (PDT) Received: from localhost ([::1]:41924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1csDCc-00076s-PE for importer@patchew.org; Sun, 26 Mar 2017 14:47:46 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41861) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1csDBX-0006cm-V3 for qemu-devel@nongnu.org; Sun, 26 Mar 2017 14:46:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1csDBX-0002Jx-6S for qemu-devel@nongnu.org; Sun, 26 Mar 2017 14:46:39 -0400 Received: from hera.aquilenet.fr ([2a01:474::1]:47468) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1csDBW-0002IQ-Vs for qemu-devel@nongnu.org; Sun, 26 Mar 2017 14:46:39 -0400 Received: from localhost (localhost [127.0.0.1]) by hera.aquilenet.fr (Postfix) with ESMTP id 19076BC8E; Sun, 26 Mar 2017 20:46:38 +0200 (CEST) Received: from hera.aquilenet.fr ([127.0.0.1]) by localhost (hera.aquilenet.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id FeZWFIlkiHAU; Sun, 26 Mar 2017 20:46:37 +0200 (CEST) Received: from var.youpi.perso.aquilenet.fr (unknown [IPv6:2a01:cb19:181:c200:3602:86ff:fe2c:6a19]) by hera.aquilenet.fr (Postfix) with ESMTPSA id 7128ABCBC; Sun, 26 Mar 2017 20:46:36 +0200 (CEST) Received: from samy by var.youpi.perso.aquilenet.fr with local (Exim 4.88) (envelope-from ) id 1csDBT-0006Wf-Je; Sun, 26 Mar 2017 20:46:35 +0200 X-Virus-Scanned: Debian amavisd-new at aquilenet.fr From: Samuel Thibault To: qemu-devel@nongnu.org Date: Sun, 26 Mar 2017 20:46:34 +0200 Message-Id: <20170326184634.25042-3-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170326184634.25042-1-samuel.thibault@ens-lyon.org> References: <20170326184634.25042-1-samuel.thibault@ens-lyon.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a01:474::1 Subject: [Qemu-devel] [PATCH 2/2] slirp: Send RDNSS in RA only if host has an IPv6 DNS server X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Samuel Thibault , thuth@redhat.com, jan.kiszka@siemens.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Previously we would always send an RDNSS option in the RA, making the guest try to resolve DNS through IPv6, even if the host does not actually have and IPv6 DNS server available. This makes the RDNSS option enabled only when an IPv6 DNS server is available. Signed-off-by: Samuel Thibault --- slirp/ip6_icmp.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/slirp/ip6_icmp.c b/slirp/ip6_icmp.c index d0f5cc1456..00183e5945 100644 --- a/slirp/ip6_icmp.c +++ b/slirp/ip6_icmp.c @@ -189,18 +189,22 @@ void ndp_send_ra(Slirp *slirp) t->m_data +=3D NDPOPT_PREFIXINFO_LEN; pl_size +=3D NDPOPT_PREFIXINFO_LEN; =20 -#ifndef _WIN32 /* Prefix information (NDP option) */ - /* disabled for windows for now, until get_dns6_addr is implemented */ - struct ndpopt *opt3 =3D mtod(t, struct ndpopt *); - opt3->ndpopt_type =3D NDPOPT_RDNSS; - opt3->ndpopt_len =3D NDPOPT_RDNSS_LEN / 8; - opt3->ndpopt_rdnss.reserved =3D 0; - opt3->ndpopt_rdnss.lifetime =3D htonl(2 * NDP_MaxRtrAdvInterval); - opt3->ndpopt_rdnss.addr =3D slirp->vnameserver_addr6; - t->m_data +=3D NDPOPT_RDNSS_LEN; - pl_size +=3D NDPOPT_RDNSS_LEN; -#endif + { + struct in6_addr addr; + uint32_t scope_id; + if (get_dns6_addr(&addr, &scope_id) >=3D 0) { + /* Host system does have an IPv6 DNS server, announce our prox= y. */ + struct ndpopt *opt3 =3D mtod(t, struct ndpopt *); + opt3->ndpopt_type =3D NDPOPT_RDNSS; + opt3->ndpopt_len =3D NDPOPT_RDNSS_LEN / 8; + opt3->ndpopt_rdnss.reserved =3D 0; + opt3->ndpopt_rdnss.lifetime =3D htonl(2 * NDP_MaxRtrAdvInterva= l); + opt3->ndpopt_rdnss.addr =3D slirp->vnameserver_addr6; + t->m_data +=3D NDPOPT_RDNSS_LEN; + pl_size +=3D NDPOPT_RDNSS_LEN; + } + } =20 rip->ip_pl =3D htons(pl_size); t->m_data -=3D sizeof(struct ip6) + pl_size; --=20 2.11.0