Date: Tue, 3 Feb 2009 07:27:37 -0500 From: Derek Tattersall <dlt@mebtel.net> To: Robert Watson <rwatson@FreeBSD.org> Cc: freebsd-net@FreeBSD.org Subject: Re: Multicast source address in recvfrom() Message-ID: <20090203122737.GA62874@oriental.arm.org> In-Reply-To: <alpine.BSF.2.00.0902031011380.46498@fledge.watson.org> References: <20090201183057.GA47405@oriental.arm.org> <alpine.BSF.2.00.0902021827470.77103@fledge.watson.org> <20090202222414.GA59860@oriental.arm.org> <alpine.BSF.2.00.0902031011380.46498@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
* Robert Watson <rwatson@FreeBSD.org> [090203 06:17]: > > >* Robert Watson <rwatson@FreeBSD.org> [090202 17:06]: > >>On Sun, 1 Feb 2009, Derek Tattersall wrote: > >> > >>>In order to become familiar with multicast implementation using FreeBSD, > >>>I found via Google a pair of test programs which multicast sent a simple > >>>text message and received the text message. I added some code to report > >>>the source address, because none of the references that I looked at > >>>specified the source IP address in the frame. > >>> > >>>I ran the sender on A -current system, AMD64 vintage last week. The > >>>receiver was on a -current system I386 vintage last week. TCPDUMP shows > >>>the source IP address in the frame as (correctly) 192.168.0.15. The > >>>receiver reports the source IP address as 200.231.191.191. I have also > >>>run the same test with an OpenBSD 4.4 Release I386 system as the > >>>receiver. The openBSD system reports the sender as 192.168.0.15. A > >>>Fedora 10 system reported the source IP address as 0.0.0.0. > >>> > >>>Googling the RFCs and other information and referring to Comer's and > >>>Stevens' books on TCPIP I can't determine what should be reported. Does > >>>anybody have clue for me? > >> > >>It might depend on how you're querying the source address. Could you > >>post a code excerpt? > > > >It's a straightforward test program. > > Your assumption, that the address returned from recvfrom(2) should be > correct, seems generally right to me. However, it looks like you may not > be initializing senderLen to the size of senderAddr, which means that the > size getting passed in may be random stack garbage. In which case what you > find in the sockaddr_in might also be random stack garbage, or might be the > address, depending on whether the uninitialized length was long enough to > fit an IP address in. Could you try adding something like: > > senderLen = sizeof(senderAddr); > > before the call to recvfrom(2)? > > Thanks, > > Robert N M Watson > Computer Laboratory > University of Cambridge > -------------------------------- Snip test program --------------- You nailed it! Initializing the length of the sockaddr stucture was the answer. Thanks very much for pointing out the flaw. -- Best regards, Derek Tattersall dlt@mebtel.net dlt666@yahoo.com dtatters@gmail.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090203122737.GA62874>