Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jan 2007 02:41:43 +0100
From:      Juergen Lock <nox@jelal.kn-bremen.de>
To:        qemu-devel@nongnu.org, freebsd-emulation@FreeBSD.org
Subject:   Re: weird slirp problems (dns lookups stopped working, and maybe more)
Message-ID:  <20070112014143.GA50646@saturn.kn-bremen.de>
In-Reply-To: <20070109230403.GA4552@saturn.kn-bremen.de>
References:  <20070109204740.GA98620@saturn.kn-bremen.de> <20070109230403.GA4552@saturn.kn-bremen.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jan 10, 2007 at 12:04:03AM +0100, Juergen Lock wrote:
>...
> Ok, garrison on irc just helped solve this mystery:  This (the same)
> one actually goes out first, before the 10.0.2.3 one (I didn't notice
> at first), and since slirp reuses the socket because the source ip and
> port hasnt changed (slirp/udp.c lines 172 and up, it doesn't check the
> dest ip), the second packet with the 10.0.2.3 dest ip (which gets
> replaced with the hosts's dns) goes out wrong.  And the reason this
> worked previously with the same guest is multicast started working
> only recently...

And here's the fix I just added to the FreeBSD qemu port: (thanx garrison!)

Index: qemu/slirp/udp.c
@@ -205,8 +208,6 @@
 	  /* udp_last_so = so; */
 	  so->so_laddr = ip->ip_src;
 	  so->so_lport = uh->uh_sport;
-	  so->so_faddr = ip->ip_dst; /* XXX */
-	  so->so_fport = uh->uh_dport; /* XXX */
 	  
 	  if ((so->so_iptos = udp_tos(so)) == 0)
 	    so->so_iptos = ip->ip_tos;
@@ -216,6 +217,15 @@
 	   * and if it is, do the fork_exec() etc.
 	   */
 	}
+
+	/*
+	 * Assign destination unconditionally
+	 *
+	 * This fixes the case where packets are sent from the same
+	 * source ip/port to different destination ips/ports
+	 */
+	so->so_faddr = ip->ip_dst; /* XXX */
+	so->so_fport = uh->uh_dport; /* XXX */
 
 	iphlen += sizeof(struct udphdr);
 	m->m_len -= iphlen;



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