From: Mike F. <vap...@gm...> - 2008-06-15 06:16:55
|
i took a working system that is running on 0.7.1 and looked at updating to 0.7.3, but my slirp networking seems to break (sort of). i'm using dhcp on the slirp network device. same rootfs, so same userspace configs between the two setups ... here's my network settings given to colinux: eth0=slirp,,tcp:22:22/tcp:333:22/tcp:10000:10000/udp:69:69 eth1=tuntap and here's my network settings in userspace (/etc/network/interfaces): auto eth0 eth1 iface eth0 inet dhcp iface eth1 inet static address 10.12.12.2 netmask 255.255.255.0 i use colinux as a tftp server. so the setup is: - colinux side of slirp is 10.0.2.15 - windows side of slirp is 10.0.2.{2,3} (i guess dns/gateway have diff IPs?) - windows public ip is 192.168.0.35 - running tftp client on 192.168.0.17 ("G5") on the working system (0.7.1), i can see this communication when running tcpdump from inside colinux: 01:34:47.410000 IP G5.60808 > 10.0.2.15.tftp: 15 RRQ "moo" netascii 01:34:47.413067 IP 10.0.2.15.32797 > 10.0.2.3.domain: 59766+ PTR? 15.2.0.10.in-addr.arpa. (40) 01:34:47.447703 IP 10.0.2.15.32798 > G5.60808: UDP, length 9 on the failing system (0.7.3), i see this: 01:44:45.645802 IP 10.0.2.2.33431 > 10.0.2.15.tftp: 15 RRQ "moo" netascii 01:44:46.105809 IP 10.0.2.15.32769 > 10.0.2.2.33431: UDP, length 9 01:44:45.675802 IP 10.0.2.2 > 10.0.2.15: ICMP 10.0.2.2 udp port 33431 unreachable, length 45 for some reason, the incoming packets from the tftp client as seen by colinux have the gateway's ip (10.0.2.2) instead of the real ip (192.168.0.17) ... any hints as to what's going wrong here ? taking a step back and just hitting colinux with netcat shows the same behavior. connecting to a tcp forwarded port and things look good (the source ip is the real client, not the gateway). connecting to a udp forwarded port and things look bad (the source ip is the gateway instead of the real client). -mike |
From: Mike F. <vap...@gm...> - 2008-06-15 06:43:46
|
On Sun, Jun 15, 2008 at 2:16 AM, Mike Frysinger wrote: > for some reason, the incoming packets from the tftp client as seen by > colinux have the gateway's ip (10.0.2.2) instead of the real ip > (192.168.0.17) ... any hints as to what's going wrong here ? > > taking a step back and just hitting colinux with netcat shows the same > behavior. connecting to a tcp forwarded port and things look good > (the source ip is the real client, not the gateway). connecting to a > udp forwarded port and things look bad (the source ip is the gateway > instead of the real client). i noticed that there's a standalone exe called 'colinux-slirp-net-daemon.exe', so on a hunch i copied the one from 0.7.1 to 0.7.3 and when i rebooted, the network communication for UDP forwarded ports started working again ... guess it's a bug in the slirp daemon ? -mike |
From: Henry N. <hen...@ar...> - 2008-06-22 19:49:39
|
Mike Frysinger wrote: > On Sun, Jun 15, 2008 at 2:16 AM, Mike Frysinger wrote: >> for some reason, the incoming packets from the tftp client as seen by >> colinux have the gateway's ip (10.0.2.2) instead of the real ip >> (192.168.0.17) ... any hints as to what's going wrong here ? >> >> taking a step back and just hitting colinux with netcat shows the same >> behavior. connecting to a tcp forwarded port and things look good >> (the source ip is the real client, not the gateway). connecting to a >> udp forwarded port and things look bad (the source ip is the gateway >> instead of the real client). > > i noticed that there's a standalone exe called > 'colinux-slirp-net-daemon.exe', so on a hunch i copied the one from > 0.7.1 to 0.7.3 and when i rebooted, the network communication for UDP > forwarded ports started working again ... guess it's a bug in the > slirp daemon ? Thank for your comments. In Version 0.7.2 the builtin TFTP-server was disabled. This server was a host only server and opens files on the Windows side. This should have nothing to do with the redirections. I hope, that is not the problem here. I have build a slirp version with enabled builtin TFTP-server: http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080622-slirp/ Please test this. -- Henry N. |
From: Mike F. <vap...@gm...> - 2008-06-22 20:23:29
|
On Sun, Jun 22, 2008 at 3:51 PM, Henry Nestler wrote: > Mike Frysinger wrote: >> On Sun, Jun 15, 2008 at 2:16 AM, Mike Frysinger wrote: >>> for some reason, the incoming packets from the tftp client as seen by >>> colinux have the gateway's ip (10.0.2.2) instead of the real ip >>> (192.168.0.17) ... any hints as to what's going wrong here ? >>> >>> taking a step back and just hitting colinux with netcat shows the same >>> behavior. connecting to a tcp forwarded port and things look good >>> (the source ip is the real client, not the gateway). connecting to a >>> udp forwarded port and things look bad (the source ip is the gateway >>> instead of the real client). >> >> i noticed that there's a standalone exe called >> 'colinux-slirp-net-daemon.exe', so on a hunch i copied the one from >> 0.7.1 to 0.7.3 and when i rebooted, the network communication for UDP >> forwarded ports started working again ... guess it's a bug in the >> slirp daemon ? > > In Version 0.7.2 the builtin TFTP-server was disabled. This server was a > host only server and opens files on the Windows side. This should have > nothing to do with the redirections. I hope, that is not the problem here. > > I have build a slirp version with enabled builtin TFTP-server: > http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080622-slirp/ > > Please test this. doesnt seem to make a difference :( based on your comments, i also enabled port forwarding on 1234, but i saw the same misbehavior between 0.7.1 and 0.7.3 (and your test version) -mike |
From: Henry N. <hen...@ar...> - 2008-06-22 20:57:33
|
Mike Frysinger wrote: > On Sun, Jun 22, 2008 at 3:51 PM, Henry Nestler wrote: >> Mike Frysinger wrote: >>> On Sun, Jun 15, 2008 at 2:16 AM, Mike Frysinger wrote: >>>> for some reason, the incoming packets from the tftp client as seen by >>>> colinux have the gateway's ip (10.0.2.2) instead of the real ip >>>> (192.168.0.17) ... any hints as to what's going wrong here ? >>>> >>>> taking a step back and just hitting colinux with netcat shows the same >>>> behavior. connecting to a tcp forwarded port and things look good >>>> (the source ip is the real client, not the gateway). connecting to a >>>> udp forwarded port and things look bad (the source ip is the gateway >>>> instead of the real client). >>> i noticed that there's a standalone exe called >>> 'colinux-slirp-net-daemon.exe', so on a hunch i copied the one from >>> 0.7.1 to 0.7.3 and when i rebooted, the network communication for UDP >>> forwarded ports started working again ... guess it's a bug in the >>> slirp daemon ? >> In Version 0.7.2 the builtin TFTP-server was disabled. This server was a >> host only server and opens files on the Windows side. This should have >> nothing to do with the redirections. I hope, that is not the problem here. >> >> I have build a slirp version with enabled builtin TFTP-server: >> http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080622-slirp/ >> >> Please test this. > > doesnt seem to make a difference :( OK. That is very nice. So, I know, that this change was not the problem. The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are fixups for compiler warnings. There exist an other interesting change between versions: http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 This sets the 10.0.2.2 as source for broardcasts. Perhaps somethin is wrong there? I will check it with netcat and tcpdump next times. -- Henry N. |
From: Mike F. <vap...@gm...> - 2008-06-23 01:19:25
|
On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: > The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are > fixups for compiler warnings. > > There exist an other interesting change between versions: > http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 so there may be a discrepancy when i said "0.7.1". i was given an old coLinux installer and was told it was "0.7.1". i assumed everything in the package was "0.7.1"; the person before me may have taken an older slirp daemon and dropped it in for this same reason. so as to make things maintainable, i started fresh with the 0.7.3 release from colinux.org, hit this bug, and then copied the slirp daemon from this "0.7.1" version. so let's just focus on the svn info i posted otherwise as that is used in conjunction with vanilla 0.7.3 install without any unknown baggage. sorry for any confusion. -mike |
From: Henry N. <hen...@ar...> - 2008-06-23 20:25:12
|
Hello Mike, Mike Frysinger wrote: > On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: >> The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are >> fixups for compiler warnings. >> >> There exist an other interesting change between versions: >> http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 > > so there may be a discrepancy when i said "0.7.1". i was given an old > coLinux installer and was told it was "0.7.1". i assumed everything > in the package was "0.7.1"; the person before me may have taken an > older slirp daemon and dropped it in for this same reason. so as to > make things maintainable, i started fresh with the 0.7.3 release from > colinux.org, hit this bug, and then copied the slirp daemon from this > "0.7.1" version. > > so let's just focus on the svn info i posted otherwise as that is used > in conjunction with vanilla 0.7.3 install without any unknown baggage. > sorry for any confusion. > -mike > With rev 479/480 you pointed to a bigger set of changes. By the while I found the place where it goes wrong. Please see the source snip or: http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup file udp.c, line 323, function udp_output() In the line 323 the source address saddr.sin_addr (192.168.x.x) is overwritten with 10.0.2.2 One line before was checked the listen address (so->so_faddr). I'm afraid, there should check the source address instead? But why there is a check for broadcast? Is that a hack for a hack? It sems me, that it would better work without the lines from 322 to 326 there? Background: special_addr = 10.0.2.2 (const) All UDP sockets are listen on address 0.0.0.0, that address is set as faked address 10.0.2.2 in line 383: "so->so_faddr = alias_addr;" ----------------------------------- devel/src/colinux/user/slirp/udp.c 315 int udp_output(struct socket *so, struct mbuf *m, 316 struct sockaddr_in *addr) 317 318 { 319 struct sockaddr_in saddr, daddr; 320 321 saddr = *addr; 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == special_addr.s_addr) { 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) 325 saddr.sin_addr.s_addr = alias_addr.s_addr; 326 } 327 daddr.sin_addr = so->so_laddr; 328 daddr.sin_port = so->so_lport; 329 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); 331 } -- Henry N. |
From: Henry N. <hen...@ar...> - 2008-06-23 20:36:34
|
Henry Nestler wrote: > Hello Mike, > > Mike Frysinger wrote: >> On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: >>> The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are >>> fixups for compiler warnings. >>> >>> There exist an other interesting change between versions: >>> http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 >> so there may be a discrepancy when i said "0.7.1". i was given an old >> coLinux installer and was told it was "0.7.1". i assumed everything >> in the package was "0.7.1"; the person before me may have taken an >> older slirp daemon and dropped it in for this same reason. so as to >> make things maintainable, i started fresh with the 0.7.3 release from >> colinux.org, hit this bug, and then copied the slirp daemon from this >> "0.7.1" version. >> >> so let's just focus on the svn info i posted otherwise as that is used >> in conjunction with vanilla 0.7.3 install without any unknown baggage. >> sorry for any confusion. >> -mike >> > > With rev 479/480 you pointed to a bigger set of changes. > > By the while I found the place where it goes wrong. Please see the > source snip or: > http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup > > file udp.c, line 323, function udp_output() > > In the line 323 the source address saddr.sin_addr (192.168.x.x) is > overwritten with 10.0.2.2 > One line before was checked the listen address (so->so_faddr). > I'm afraid, there should check the source address instead? But why there > is a check for broadcast? Is that a hack for a hack? It sems me, that it > would better work without the lines from 322 to 326 there? > > Background: > special_addr = 10.0.2.2 (const) Typofix. That is correctly: special_addr = 10.0.2.0 (const) alias_addr = 10.0.2.2 (const) > > All UDP sockets are listen on address 0.0.0.0, that address is set as > faked address 10.0.2.2 in line 383: > "so->so_faddr = alias_addr;" > > ----------------------------------- > devel/src/colinux/user/slirp/udp.c > 315 int udp_output(struct socket *so, struct mbuf *m, > 316 struct sockaddr_in *addr) > 317 > 318 { > 319 struct sockaddr_in saddr, daddr; > 320 > 321 saddr = *addr; > 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == > special_addr.s_addr) { > 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; > 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) > 325 saddr.sin_addr.s_addr = alias_addr.s_addr; > 326 } > 327 daddr.sin_addr = so->so_laddr; > 328 daddr.sin_port = so->so_lport; > 329 > 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); > 331 } > -- Henry N. |
From: Mike F. <vap...@gm...> - 2008-06-23 20:50:39
|
On Mon, Jun 23, 2008 at 4:27 PM, Henry Nestler wrote: > With rev 479/480 you pointed to a bigger set of changes. > > By the while I found the place where it goes wrong. Please see the > source snip or: > http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup > > file udp.c, line 323, function udp_output() > > In the line 323 the source address saddr.sin_addr (192.168.x.x) is > overwritten with 10.0.2.2 > One line before was checked the listen address (so->so_faddr). > I'm afraid, there should check the source address instead? But why there > is a check for broadcast? Is that a hack for a hack? It sems me, that it > would better work without the lines from 322 to 326 there? > > Background: > special_addr = 10.0.2.2 (const) > > All UDP sockets are listen on address 0.0.0.0, that address is set as > faked address 10.0.2.2 in line 383: > "so->so_faddr = alias_addr;" > > ----------------------------------- > devel/src/colinux/user/slirp/udp.c > 315 int udp_output(struct socket *so, struct mbuf *m, > 316 struct sockaddr_in *addr) > 317 > 318 { > 319 struct sockaddr_in saddr, daddr; > 320 > 321 saddr = *addr; > 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == > special_addr.s_addr) { > 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; > 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) > 325 saddr.sin_addr.s_addr = alias_addr.s_addr; > 326 } > 327 daddr.sin_addr = so->so_laddr; > 328 daddr.sin_port = so->so_lport; > 329 > 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); > 331 } i'd like to assist in analysis, but i'm not familiar with any of the colinux source base, so i cant really even make an educated guess; i'd be shooting blind. i'll gladly test any proposed changes though. a comment block here in the source explaining what it's supposed to be doing would have been useful :/. -mike |
From: Mike F. <vap...@gm...> - 2008-06-22 21:12:37
|
On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: > Mike Frysinger wrote: >> On Sun, Jun 22, 2008 at 3:51 PM, Henry Nestler wrote: >>> Mike Frysinger wrote: >>>> On Sun, Jun 15, 2008 at 2:16 AM, Mike Frysinger wrote: >>>>> for some reason, the incoming packets from the tftp client as seen by >>>>> colinux have the gateway's ip (10.0.2.2) instead of the real ip >>>>> (192.168.0.17) ... any hints as to what's going wrong here ? >>>>> >>>>> taking a step back and just hitting colinux with netcat shows the same >>>>> behavior. connecting to a tcp forwarded port and things look good >>>>> (the source ip is the real client, not the gateway). connecting to a >>>>> udp forwarded port and things look bad (the source ip is the gateway >>>>> instead of the real client). >>>> i noticed that there's a standalone exe called >>>> 'colinux-slirp-net-daemon.exe', so on a hunch i copied the one from >>>> 0.7.1 to 0.7.3 and when i rebooted, the network communication for UDP >>>> forwarded ports started working again ... guess it's a bug in the >>>> slirp daemon ? >>> In Version 0.7.2 the builtin TFTP-server was disabled. This server was a >>> host only server and opens files on the Windows side. This should have >>> nothing to do with the redirections. I hope, that is not the problem here. >>> >>> I have build a slirp version with enabled builtin TFTP-server: >>> http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080622-slirp/ >>> >>> Please test this. >> >> doesnt seem to make a difference :( > > OK. That is very nice. So, I know, that this change was not the problem. > > The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are > fixups for compiler warnings. > > There exist an other interesting change between versions: > http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 > > This sets the 10.0.2.2 as source for broardcasts. Perhaps somethin is > wrong there? I will check it with netcat and tcpdump next times. i'm building the devel branch now (./configure && make) so i can go back through the versions the easy test is to run `tcpdump` in colinux and then just connect with netcat from another machine: nc -u colinux 69 <<<"MOO" a broken system will show the packet coming from 10.0.2.x rather than the real host -mike |
From: Mike F. <vap...@gm...> - 2008-06-23 00:12:16
|
On Sun, Jun 22, 2008 at 5:12 PM, Mike Frysinger wrote: > On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: >> The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are >> fixups for compiler warnings. >> >> There exist an other interesting change between versions: >> http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 >> >> This sets the 10.0.2.2 as source for broardcasts. Perhaps somethin is >> wrong there? I will check it with netcat and tcpdump next times. > > i'm building the devel branch now (./configure && make) so i can go > back through the versions rev 479: works rev 480: fails -mike |
From: Mike F. <vap...@gm...> - 2008-06-23 00:18:41
|
On Sun, Jun 22, 2008 at 8:12 PM, Mike Frysinger wrote: > On Sun, Jun 22, 2008 at 5:12 PM, Mike Frysinger wrote: >> On Sun, Jun 22, 2008 at 4:59 PM, Henry Nestler wrote: >>> The difference for coLinux 0.7.1 and 0.7.3 are very small. Mostly are >>> fixups for compiler warnings. >>> >>> There exist an other interesting change between versions: >>> http://colinux.svn.sourceforge.net/viewvc/colinux?view=rev&revision=574 >>> >>> This sets the 10.0.2.2 as source for broardcasts. Perhaps somethin is >>> wrong there? I will check it with netcat and tcpdump next times. >> >> i'm building the devel branch now (./configure && make) so i can go >> back through the versions > > rev 479: works > rev 480: fails sorry, to be more specific ... i took svn branches/devel/ and built it up. then i reverted only branches/devel/src/colinux/user/slirp/ to rev 479 and rebuilt the slirp daemon. dropping just that binary into 0.7.3 and the forwarding seems to work fine. -mike |
From: Henry N. <hen...@ar...> - 2008-06-23 21:40:36
|
Mike Frysinger wrote: > On Mon, Jun 23, 2008 at 4:27 PM, Henry Nestler wrote: >> With rev 479/480 you pointed to a bigger set of changes. >> >> By the while I found the place where it goes wrong. Please see the >> source snip or: >> http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup >> >> file udp.c, line 323, function udp_output() >> >> In the line 323 the source address saddr.sin_addr (192.168.x.x) is >> overwritten with 10.0.2.2 >> One line before was checked the listen address (so->so_faddr). >> I'm afraid, there should check the source address instead? But why there >> is a check for broadcast? Is that a hack for a hack? It sems me, that it >> would better work without the lines from 322 to 326 there? >> >> Background: >> special_addr = 10.0.2.2 (const) >> >> All UDP sockets are listen on address 0.0.0.0, that address is set as >> faked address 10.0.2.2 in line 383: >> "so->so_faddr = alias_addr;" >> >> ----------------------------------- >> devel/src/colinux/user/slirp/udp.c >> 315 int udp_output(struct socket *so, struct mbuf *m, >> 316 struct sockaddr_in *addr) >> 317 >> 318 { >> 319 struct sockaddr_in saddr, daddr; >> 320 >> 321 saddr = *addr; >> 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == >> special_addr.s_addr) { >> 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; >> 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) >> 325 saddr.sin_addr.s_addr = alias_addr.s_addr; >> 326 } >> 327 daddr.sin_addr = so->so_laddr; >> 328 daddr.sin_port = so->so_lport; >> 329 >> 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); >> 331 } > > i'd like to assist in analysis, but i'm not familiar with any of the > colinux source base, so i cant really even make an educated guess; i'd > be shooting blind. i'll gladly test any proposed changes though. > > a comment block here in the source explaining what it's supposed to be > doing would have been useful :/. Yes, I know. But is not from me. It was copied from some others. As I understand, after deep debugging with you helpful simple netcat and tcp example I would say, that the if condition wand to check if the source is from the host (localhost or the host's self ipaddress) and then it replaced the source from sender with faked 10.0.2.2 But after the change SVN rev 479/480 the address is fix as localhost or bind all times to all (0.0.0.0). In that case, this can not be use for that test any more. Have fixed. Here is the new executable. Your Netcat + tcpcopy example was working: http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080623-slirp/colinux-slirp-net-daemon-0.7.3-2.zip I don't know, what the broadcast address (10.0.2.255) should do there. Have removed. This is the new code snip: int udp_output(struct socket *so, struct mbuf *m, struct sockaddr_in *addr) { struct sockaddr_in saddr, daddr; saddr = *addr; /* Translate connections from localhost to the alias hostname */ if(is_localhost(saddr.sin_addr)) { saddr.sin_addr.s_addr = so->so_faddr.s_addr; } daddr.sin_addr = so->so_laddr; daddr.sin_port = so->so_lport; return udp_output2(so, m, &saddr, &daddr, so->so_iptos); } -- Henry N. |
From: Henry N. <hen...@ar...> - 2008-06-23 22:01:43
|
Henry Nestler wrote: > Mike Frysinger wrote: >> On Mon, Jun 23, 2008 at 4:27 PM, Henry Nestler wrote: >>> With rev 479/480 you pointed to a bigger set of changes. >>> >>> By the while I found the place where it goes wrong. Please see the >>> source snip or: >>> http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup >>> >>> file udp.c, line 323, function udp_output() >>> >>> In the line 323 the source address saddr.sin_addr (192.168.x.x) is >>> overwritten with 10.0.2.2 >>> One line before was checked the listen address (so->so_faddr). >>> I'm afraid, there should check the source address instead? But why there >>> is a check for broadcast? Is that a hack for a hack? It sems me, that it >>> would better work without the lines from 322 to 326 there? >>> >>> Background: >>> special_addr = 10.0.2.2 (const) >>> >>> All UDP sockets are listen on address 0.0.0.0, that address is set as >>> faked address 10.0.2.2 in line 383: >>> "so->so_faddr = alias_addr;" >>> >>> ----------------------------------- >>> devel/src/colinux/user/slirp/udp.c >>> 315 int udp_output(struct socket *so, struct mbuf *m, >>> 316 struct sockaddr_in *addr) >>> 317 >>> 318 { >>> 319 struct sockaddr_in saddr, daddr; >>> 320 >>> 321 saddr = *addr; >>> 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == >>> special_addr.s_addr) { >>> 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; >>> 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) >>> 325 saddr.sin_addr.s_addr = alias_addr.s_addr; >>> 326 } >>> 327 daddr.sin_addr = so->so_laddr; >>> 328 daddr.sin_port = so->so_lport; >>> 329 >>> 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); >>> 331 } >> i'd like to assist in analysis, but i'm not familiar with any of the >> colinux source base, so i cant really even make an educated guess; i'd >> be shooting blind. i'll gladly test any proposed changes though. >> >> a comment block here in the source explaining what it's supposed to be >> doing would have been useful :/. > > Yes, I know. But is not from me. It was copied from some others. > As I understand, after deep debugging with you helpful simple netcat and > tcp example I would say, that the if condition wand to check if the > source is from the host (localhost or the host's self ipaddress) and > then it replaced the source from sender with faked 10.0.2.2 > > But after the change SVN rev 479/480 the address is fix as localhost or > bind all times to all (0.0.0.0). In that case, this can not be use for > that test any more. > > Have fixed. Here is the new executable. Your Netcat + tcpcopy example > was working: > http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080623-slirp/colinux-slirp-net-daemon-0.7.3-2.zip > > I don't know, what the broadcast address (10.0.2.255) should do there. > Have removed. This is the new code snip: > > int udp_output(struct socket *so, struct mbuf *m, > struct sockaddr_in *addr) > > { > struct sockaddr_in saddr, daddr; > > saddr = *addr; > > /* Translate connections from localhost to the alias hostname */ > if(is_localhost(saddr.sin_addr)) { > saddr.sin_addr.s_addr = so->so_faddr.s_addr; > } > > daddr.sin_addr = so->so_laddr; > daddr.sin_port = so->so_lport; > > return udp_output2(so, m, &saddr, &daddr, so->so_iptos); > } > I'm afraid, we are not the only, that tries to fix this. See the last 3 changes 4402, 4267 and 4259 in Qemu: http://svn.savannah.gnu.org/viewvc/trunk/slirp/udp.c?root=qemu&view=log -- Henry N. |
From: Mike F. <vap...@gm...> - 2008-06-25 13:31:49
|
On Mon, Jun 23, 2008 at 5:42 PM, Henry Nestler wrote: > Mike Frysinger wrote: >> On Mon, Jun 23, 2008 at 4:27 PM, Henry Nestler wrote: >>> With rev 479/480 you pointed to a bigger set of changes. >>> By the while I found the place where it goes wrong. Please see the >>> source snip or: >>> http://colinux.svn.sourceforge.net/viewvc/colinux/branches/devel/src/colinux/user/slirp/udp.c?revision=677&view=markup >>> >>> file udp.c, line 323, function udp_output() >>> >>> In the line 323 the source address saddr.sin_addr (192.168.x.x) is >>> overwritten with 10.0.2.2 >>> One line before was checked the listen address (so->so_faddr). >>> I'm afraid, there should check the source address instead? But why there >>> is a check for broadcast? Is that a hack for a hack? It sems me, that it >>> would better work without the lines from 322 to 326 there? >>> >>> Background: >>> special_addr = 10.0.2.2 (const) >>> >>> All UDP sockets are listen on address 0.0.0.0, that address is set as >>> faked address 10.0.2.2 in line 383: >>> "so->so_faddr = alias_addr;" >>> >>> ----------------------------------- >>> devel/src/colinux/user/slirp/udp.c >>> 315 int udp_output(struct socket *so, struct mbuf *m, >>> 316 struct sockaddr_in *addr) >>> 317 >>> 318 { >>> 319 struct sockaddr_in saddr, daddr; >>> 320 >>> 321 saddr = *addr; >>> 322 if ((so->so_faddr.s_addr & htonl(0xffffff00)) == >>> special_addr.s_addr) { >>> 323 saddr.sin_addr.s_addr = so->so_faddr.s_addr; >>> 324 if ((so->so_faddr.s_addr & htonl(0x000000ff)) == htonl(0xff)) >>> 325 saddr.sin_addr.s_addr = alias_addr.s_addr; >>> 326 } >>> 327 daddr.sin_addr = so->so_laddr; >>> 328 daddr.sin_port = so->so_lport; >>> 329 >>> 330 return udp_output2(so, m, &saddr, &daddr, so->so_iptos); >>> 331 } >> >> i'd like to assist in analysis, but i'm not familiar with any of the >> colinux source base, so i cant really even make an educated guess; i'd >> be shooting blind. i'll gladly test any proposed changes though. >> >> a comment block here in the source explaining what it's supposed to be >> doing would have been useful :/. > > Yes, I know. But is not from me. It was copied from some others. > As I understand, after deep debugging with you helpful simple netcat and > tcp example I would say, that the if condition wand to check if the > source is from the host (localhost or the host's self ipaddress) and > then it replaced the source from sender with faked 10.0.2.2 > > But after the change SVN rev 479/480 the address is fix as localhost or > bind all times to all (0.0.0.0). In that case, this can not be use for > that test any more. > > Have fixed. Here is the new executable. Your Netcat + tcpcopy example > was working: > http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080623-slirp/colinux-slirp-net-daemon-0.7.3-2.zip sorry for the delay. this version indeed works fine for me with tftp. thanks a ton! -mike |
From: Henry N. <hen...@ar...> - 2008-06-25 17:54:57
|
Hello Mike, Mike Frysinger wrote: > On Mon, Jun 23, 2008 at 5:42 PM, Henry Nestler wrote: >> Have fixed. Here is the new executable. Your Netcat + tcpcopy example >> was working: >> http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080623-slirp/colinux-slirp-net-daemon-0.7.3-2.zip > > sorry for the delay. this version indeed works fine for me with tftp. > thanks a ton! Ok. Thanks back, for your very good problem descriptions :-) For all others: Update for coLinux SLiRP daemon have moved to: http://www.henrynestler.com/colinux/releases/0.7.3/update/ Is also available on SF file releases: http://sourceforge.net/project/showfiles.php?group_id=98788&package_id=107317&release_id=385643 -- Henry N. |
From: Mike F. <vap...@gm...> - 2008-06-27 19:46:59
|
On Wed, Jun 25, 2008 at 1:56 PM, Henry Nestler wrote: > Hello Mike, > Mike Frysinger wrote: >> On Mon, Jun 23, 2008 at 5:42 PM, Henry Nestler wrote: >>> Have fixed. Here is the new executable. Your Netcat + tcpcopy example >>> was working: >>> http://www.henrynestler.com/colinux/testing/stable-0.7.3/20080623-slirp/colinux-slirp-net-daemon-0.7.3-2.zip >> >> sorry for the delay. this version indeed works fine for me with tftp. >> thanks a ton! > > Ok. Thanks back, for your very good problem descriptions :-) > > For all others: Update for coLinux SLiRP daemon have moved to: > http://www.henrynestler.com/colinux/releases/0.7.3/update/ > > Is also available on SF file releases: > http://sourceforge.net/project/showfiles.php?group_id=98788&package_id=107317&release_id=385643 you can probably close this out then: http://sourceforge.net/tracker/index.php?func=detail&aid=1995862&group_id=98788&atid=622063 thanks again for coLinux ... it fills such a perfect niche (i personally dont use it as i dont typically run Windows, but it's perfect for the people i give it to) -mike |