summary refs log tree commit diff stats
path: root/slirp/socket.c
diff options
context:
space:
mode:
authorEd Swierk <eswierk@aristanetworks.com>2009-08-20 19:00:31 -0700
committerAnthony Liguori <aliguori@us.ibm.com>2009-08-27 20:46:58 -0500
commitdf7a86ed735eafefbd046c8cad7134652fe3f600 (patch)
tree585563918d17462f707cebdae337d5fcde45d927 /slirp/socket.c
parentce0bd027df9c62766a5417521d0f08f27359d43f (diff)
downloadfocaccia-qemu-df7a86ed735eafefbd046c8cad7134652fe3f600.tar.gz
focaccia-qemu-df7a86ed735eafefbd046c8cad7134652fe3f600.zip
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 <eswierk@aristanetworks.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'slirp/socket.c')
-rw-r--r--slirp/socket.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/slirp/socket.c b/slirp/socket.c
index d8fbe89a74..207109c7ec 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -552,7 +552,8 @@ sosendto(struct socket *so, struct mbuf *m)
 	    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;
 	  }