[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: weird slirp problems (dns lookups stopped working, and
From: |
Juergen Lock |
Subject: |
[Qemu-devel] Re: weird slirp problems (dns lookups stopped working, and maybe more) |
Date: |
Fri, 12 Jan 2007 02:41:43 +0100 |
User-agent: |
Mutt/1.5.13 (2006-08-11) |
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;