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; _______________________________________________ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel