Multicast source address in recvfrom()
Derek Tattersall
dlt at mebtel.net
Tue Feb 3 04:27:41 PST 2009
* Robert Watson <rwatson at FreeBSD.org> [090203 06:17]:
>
> >* Robert Watson <rwatson at 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 at mebtel.net dlt666 at yahoo.com dtatters at gmail.com
More information about the freebsd-net
mailing list