Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 9 Jan 2007 21:47:40 +0100
From:      Juergen Lock <nox@jelal.kn-bremen.de>
To:        qemu-devel@nongnu.org, freebsd-emulation@FreeBSD.org
Subject:   weird slirp problems (dns lookups stopped working, and maybe more)
Message-ID:  <20070109204740.GA98620@saturn.kn-bremen.de>

next in thread | raw e-mail | index | archive | help
Hi!

 I'm not sure why I didn't notice signs of this earlier (using the
Dec 25 snapshot, I'm on FreeBSD), maybe I really only talked to the host
(10.0.2.2) from inside guests.  Anyway, after I first saw it yesterday
night, today I sniffed on the external interface and saw dns requests
of a `host google.com' going out to 224.0.0.251, port 5353, instead
of the dns in resolv.conf.  Hmm?  And when I patched slirp like this:

Index: qemu/slirp/slirp.c
@@ -130,6 +130,7 @@
 void slirp_init(void)
 {
     //    debug_init("/tmp/slirp.log", DEBUG_DEFAULT);
+        debug_init("/usr/tmp/slirp.log", DEBUG_DEFAULT);
     
 #ifdef _WIN32
     {
Index: qemu/slirp/udp.c
@@ -104,6 +104,9 @@
 	 */
 	ip = mtod(m, struct ip *);
 	uh = (struct udphdr *)((caddr_t)ip + iphlen);
+#if 1
+	DEBUG_MISC((dfd, " udp_input(), ip_dst.s_addr=0x%x, uh_dport=%d\n", ntohl(ip->ip_dst.s_addr), ntohs(uh->uh_dport)));
+#endif
 
 	/*
 	 * Make mbuf data length reflect UDP length.

 it indeed shows slirp is getting the dest ip + port correctly and
then sends them out wrong:

 ...
m_get...
 m = 9bd7800
ip_input...
 m = 9bd7800
 m_len = 56
udp_input...
 m = 9bd7800
 iphlen = 20
 udp_input(), ip_dst.s_addr=0xa000203, uh_dport=53
sosendto...
 so = 9b39b80
 m = 9bd7800
 sendto()ing, addr.sin_port=5353, addr.sin_addr.s_addr=224.0.0.251
m_free...
 m = 9bd7000
ip_slowtimo...
tcp_slowtimo...
 ...

 In between I see these which I'm not sure where they are coming from:

 ...
m_get...
 m = 9bd7800
ip_input...
 m = 9bd7800
 m_len = 74
udp_input...
 m = 9bd7800
 iphlen = 20
 udp_input(), ip_dst.s_addr=0xe00000fb, uh_dport=5353
sosendto...
 so = 9b39b80
 m = 9bd7800
 sendto()ing, addr.sin_port=5353, addr.sin_addr.s_addr=224.0.0.251
m_free...
 m = 9bd7000
ip_slowtimo...
tcp_slowtimo...
m_get...
 m = 9bd7000
ip_input...
 m = 9bd7000
 m_len = 74
udp_input...
 m = 9bd7000
 iphlen = 20
 udp_input(), ip_dst.s_addr=0xe00000fb, uh_dport=5353
sosendto...
 so = 9b39b80
 m = 9bd7000
 sendto()ing, addr.sin_port=5353, addr.sin_addr.s_addr=224.0.0.251
m_free...
 m = 9bd7800
ip_slowtimo...
tcp_slowtimo...
ip_slowtimo...
tcp_slowtimo...

 And this is my try giving the real dns (which worked yesterday btw):

m_get...
 m = 9bd7800
ip_input...
 m = 9bd7800
 m_len = 56
udp_input...
 m = 9bd7800
 iphlen = 20
 udp_input(), ip_dst.s_addr=0xd9ed958e, uh_dport=53
sosendto...
 so = 9b39b80
 m = 9bd7800
 sendto()ing, addr.sin_port=5353, addr.sin_addr.s_addr=224.0.0.251
m_free...
 m = 9bd7000
ip_slowtimo...
tcp_slowtimo...
 ...

 I also got a report which stated that for him also tcp stopped working,
while I still can do http://<google.com's ip> and get the expected page,
and as said I can also ssh (and scp) to the host (10.0.2.2).

 Soo, does anyone know slirp enough to have an idea whats going on here?
The puzzling thing is I don't see recent slirp commits that could be
relevant either...

 Thanx,
	Juergen



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20070109204740.GA98620>