From df7a86ed735eafefbd046c8cad7134652fe3f600 Mon Sep 17 00:00:00 2001 From: Ed Swierk Date: Thu, 20 Aug 2009 19:00:31 -0700 Subject: slirp: Read host DNS config on demand Currently the qemu user-mode networking stack reads the host DNS configuration (/etc/resolv.conf or the Windows equivalent) only once when qemu starts. This causes name lookups in the guest to fail if the host is moved to a different network from which the original DNS servers are unreachable, a common occurrence when the host is a laptop. This patch changes the slirp code to read the host DNS configuration on demand, caching the results for at most 1 second to avoid unnecessary overhead if name lookups occur in rapid succession. On non-Windows hosts, /etc/resolv.conf is re-read only if the file has been replaced or if its size or mtime has changed. Signed-off-by: Ed Swierk Signed-off-by: Anthony Liguori --- slirp/ip_icmp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'slirp/ip_icmp.c') diff --git a/slirp/ip_icmp.c b/slirp/ip_icmp.c index 95a4b39a4e..751a8e249a 100644 --- a/slirp/ip_icmp.c +++ b/slirp/ip_icmp.c @@ -127,7 +127,8 @@ icmp_input(struct mbuf *m, int hlen) slirp->vnetwork_addr.s_addr) { /* It's an alias */ if (so->so_faddr.s_addr == slirp->vnameserver_addr.s_addr) { - addr.sin_addr = dns_addr; + if (get_dns_addr(&addr.sin_addr) < 0) + addr.sin_addr = loopback_addr; } else { addr.sin_addr = loopback_addr; } -- cgit v1.2.3