Skip site navigation (1)Skip section navigation (2)
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>