From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6823 invoked by alias); 10 Jan 2008 14:53:54 -0000 Received: (qmail 6809 invoked by uid 22791); 10 Jan 2008 14:53:53 -0000 X-Spam-Check-By: sourceware.org Received: from londo.lunn.ch (HELO londo.lunn.ch) (80.238.139.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Thu, 10 Jan 2008 14:53:32 +0000 Received: from lunn by londo.lunn.ch with local (Exim 3.36 #1 (Debian)) id 1JCymW-000227-00; Thu, 10 Jan 2008 15:53:20 +0100 Date: Thu, 10 Jan 2008 14:53:00 -0000 From: Andrew Lunn To: Chad Handrich Cc: ecos-discuss@ecos.sourceware.org Message-ID: <20080110145320.GA7464@lunn.ch> Mail-Followup-To: Chad Handrich , ecos-discuss@ecos.sourceware.org References: <47862BB1.2030409@weldtechcorp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <47862BB1.2030409@weldtechcorp.com> User-Agent: Mutt/1.5.17 (2007-11-01) X-IsSubscribed: yes Mailing-List: contact ecos-discuss-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: ecos-discuss-owner@ecos.sourceware.org Subject: Re: [ECOS] Cannot sendto multicast using FreeBSD stack X-SW-Source: 2008-01/txt/msg00047.txt.bz2 On Thu, Jan 10, 2008 at 09:29:05AM -0500, Chad Handrich wrote: > Hello, > > I wrote about this problem previously, but still have not found a solution > (see the subject "Problem with multicast using FreeBSD stack" from > 11/29/07) > > I have eCos configured with the FreeBSD stack. Everything is working > except a portion where I have to SEND multicast UDP packets using sendto(). > In these instances, sendto() returns -1, and errno == EHOSTUNREACH. > > Here is my test multicast code that is failing: > > struct in_addr interface_addr; > > // eth0 is configured to be 89.89.200.181 > inet_aton("89.89.200.181", &interface_addr); > setsockopt(skt, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, > sizeof(interface_addr)); > struct in_addr multi_iface; > getsockopt(skt, IPPROTO_IP, IP_MULTICAST_IF, &multi_iface, > sizeof(multi_iface)); > diag_printf("getsockopt specifies %s as multicast interface\n", > inet_ntoa(multi_iface)); > // This outputs the string: getsockopt specifies 89.89.200.181 as > multicast interface > > // Sample data to send via multicast > char buf[5]; buf[0] = 0; buf[1] = 1; buf[2] = 2; buf[3] = 3; buf[4] = 4; > struct sockaddr_in to; > to.sin_family = AF_INET; > to.sin_port = htons(2222); > inet_aton("239.192.23.160", &(to.sin_addr)); > int retval = sendto(skt, buf, 5, 0, (struct sockaddr *)&to, > sizeof(to)); > diag_printf("post-sendto: errno=%d retval=%d\n", errno, retval); > // This outputs the string: post-sendto: errno=365 retval=-1 > // errno=365 corresponds to EHOSTUNREACH > > > Any help to get this multicast sendto() to succeed would be greatly > appreciated. Do you also add a multicast route? Typically on Linux you have to add a route: route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0 Andrew -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss