aboutsummaryrefslogtreecommitdiff
path: root/slirp
diff options
context:
space:
mode:
authorpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>2006-04-23 19:41:17 +0000
committerpbrook <pbrook@c046a42c-6fe2-441c-8c8c-71466251a162>2006-04-23 19:41:17 +0000
commitf4e15b4b4b0b8dcecf056ea817aae967de401b45 (patch)
treee622d8cf1a98caa55005233e0313a37b3947d745 /slirp
parentbbeb7b5cbd312b4690843499e0061691b8ae1fd8 (diff)
Fix slirp redirection on systems without a useful host IP address.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1837 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'slirp')
-rw-r--r--slirp/misc.c19
-rw-r--r--slirp/slirp.c2
2 files changed, 11 insertions, 10 deletions
diff --git a/slirp/misc.c b/slirp/misc.c
index a58b631003..1cd8749737 100644
--- a/slirp/misc.c
+++ b/slirp/misc.c
@@ -88,15 +88,16 @@ void
getouraddr()
{
char buff[256];
- struct hostent *he;
-
- if (gethostname(buff,256) < 0)
- return;
-
- if ((he = gethostbyname(buff)) == NULL)
- return;
-
- our_addr = *(struct in_addr *)he->h_addr;
+ struct hostent *he = NULL;
+
+ if (gethostname(buff,256) == 0)
+ he = gethostbyname(buff);
+ if (he)
+ our_addr = *(struct in_addr *)he->h_addr;
+ /* If the host doesn't have a useful IP address then use the
+ guest side address. */
+ if (our_addr.s_addr == 0 || our_addr.s_addr == loopback_addr.s_addr)
+ our_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS);
}
#if SIZEOF_CHAR_P == 8
diff --git a/slirp/slirp.c b/slirp/slirp.c
index a7d3f69119..b4ab12a088 100644
--- a/slirp/slirp.c
+++ b/slirp/slirp.c
@@ -146,7 +146,6 @@ void slirp_init(void)
m_init();
/* set default addresses */
- getouraddr();
inet_aton("127.0.0.1", &loopback_addr);
if (get_dns_addr(&dns_addr) < 0) {
@@ -155,6 +154,7 @@ void slirp_init(void)
}
inet_aton(CTL_SPECIAL, &special_addr);
+ getouraddr();
}
#define CONN_CANFSEND(so) (((so)->so_state & (SS_FCANTSENDMORE|SS_ISFCONNECTED)) == SS_ISFCONNECTED)