From: Jason Wessel <jason.wessel@windriver.com>
To: qemu-devel@nongnu.org, freebsd-emulation@freebsd.org
Subject: Re: [Qemu-devel] Re: weird slirp problems (dns lookups stopped working, and maybe more) [PATCH]
Date: Thu, 11 Jan 2007 21:37:58 -0600 [thread overview]
Message-ID: <45A70296.9010705@windriver.com> (raw)
In-Reply-To: <20070112014143.GA50646@saturn.kn-bremen.de>
[-- Attachment #1: Type: text/plain, Size: 2089 bytes --]
I posted a similar patch last year, but it was not accepted for some
reason. Making this change allows UDP nfs to work to a remote file
server as well.
I would recommend, making one further change as included in this patch.
It allows KGDBOE to operate on the local host or from a remote host
because it allow the special 10.0.2.2 address to be translated.
I have included the patch in the e-mail once again.
signed-off-by: jason.wessel@windriver.com
Jason.
Juergen Lock wrote:
> 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
>
[-- Attachment #2: always_set_udp_faddr.patch --]
[-- Type: text/plain, Size: 1400 bytes --]
Index: qemu/slirp/udp.c
===================================================================
--- qemu.orig/slirp/udp.c
+++ qemu/slirp/udp.c
@@ -205,8 +205,6 @@ udp_input(m, iphlen)
/* 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 +214,13 @@ udp_input(m, iphlen)
* and if it is, do the fork_exec() etc.
*/
}
+ /* Always reset the from address as it can change,
+ * as with NFS for example where it will talk to
+ * the same destination port with multiple source
+ * addresses. Or different gdb session to kgdboe.
+ */
+ so->so_faddr = ip->ip_dst; /* XXX */
+ so->so_fport = uh->uh_dport; /* XXX */
iphlen += sizeof(struct udphdr);
m->m_len -= iphlen;
@@ -312,7 +317,8 @@ int udp_output(struct socket *so, struct
struct sockaddr_in saddr, daddr;
saddr = *addr;
- if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr) {
+ if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr &&
+ addr->sin_addr.s_addr == htonl(0x7f000001)) {
saddr.sin_addr.s_addr = so->so_faddr.s_addr;
if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff))
saddr.sin_addr.s_addr = alias_addr.s_addr;
next prev parent reply other threads:[~2007-01-12 3:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-09 20:47 [Qemu-devel] weird slirp problems (dns lookups stopped working, and maybe more) Juergen Lock
2007-01-09 23:04 ` [Qemu-devel] " Juergen Lock
2007-01-12 1:41 ` Juergen Lock
2007-01-12 3:37 ` Jason Wessel [this message]
2007-01-15 21:34 ` [Qemu-devel] Re: weird slirp problems (dns lookups stopped working, and maybe more) [PATCH] Igor Kovalenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45A70296.9010705@windriver.com \
--to=jason.wessel@windriver.com \
--cc=freebsd-emulation@freebsd.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).