From mboxrd@z Thu Jan 1 00:00:00 1970 Date: Mon, 29 Feb 2016 22:08:42 +0100 From: Gilles Chanteperdrix Message-ID: <20160229210842.GD26312@hermes.click-hack.org> References: <56d4b0f131fc36.79352149@wp.pl> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <56d4b0f131fc36.79352149@wp.pl> Subject: Re: [Xenomai] RTnet -- receive broadcast frame at the local machine List-Id: Discussions about the Xenomai project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Mariusz Janiak Cc: Xenomai On Mon, Feb 29, 2016 at 09:58:25PM +0100, Mariusz Janiak wrote: > Dnia Poniedzia=B3ek, 29 Lutego 2016 21:29 Gilles Chanteperdrix napisa=B3(a)=20 > > On Mon, Feb 29, 2016 at 09:24:11PM +0100, Mariusz Janiak wrote: > > > Dear Xenomai users, > > >=20 > > > Since RTnet has been integrated with Xenomai I address this question = to you. The question is, how to receive a broadcast frame at the local mach= ine without using the localhost? The issue is following, we have two proces= s with separate rtsockets at the single machine (of course we have differen= t machines in the network but this is not a case). One process send a broad= cast UDP frame to the specified UDP port -- we have one rteth device on the= machine. The second process listen on that port=20 > > > (receivefrom) and does not receive the broadcast frame sent by first = process. I have found the following thread on the RTnet mailing list=20 > > >=20 > > > https://sourceforge.net/p/rtnet/mailman/message/6787561/ > > >=20 > > > Could you please point me the place which should be hacked to duplica= te outgoing packets if there are multiple > > > matching routes? > >=20 > > I ma not sure I understand what you are looking for, but to receive > > on a host the frames sent by that host, you need to enable and load > > the loopback module. When you do that, no hack should be needed. > >=20 > > --=20 > > Gilles. > > https://click-hack.org >=20 > Hi Gilles, >=20 > I am pretty sure that loopback module has been loaded, this is standard R= Tnet configuration that has not been changed by me. Beside that, there is r= tlo (127.0.0.1) device which is created when RT_LOOPBACK=3D"yes" in rtnet.c= onf.=20 >=20 > Below you will find simple testcase. Compile this using Xenomai posix ski= n.=20 >=20 > 1) receiver.c > #include > #include > #include > #include > #include > #include > #include > #include > #define DEF_REC_PORT 1883 >=20 > int sock; > struct sockaddr_in rec_addr; >=20 > int main() > { > int enable =3D 1; > int buffer[100]; > socklen_t len =3D sizeof(rec_addr); >=20 > mlockall(MCL_CURRENT|MCL_FUTURE); 1-> >=20 > sock =3D socket(AF_INET, SOCK_DGRAM, 0); 2-> > setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &enable, sizeof(enable)); 3-> >=20 > memset(&rec_addr, 0, sizeof(struct sockaddr_in)); > rec_addr.sin_family =3D AF_INET; > rec_addr.sin_port =3D htons(DEF_REC_PORT); > rec_addr.sin_addr.s_addr =3D INADDR_ANY; > bind(sock, (struct sockaddr *) &rec_addr, sizeof(struct > sockaddr_in)); 4-> >=20 > while (1) { > memset(buffer, 0, 100); > recvfrom(sock, buffer, 100, 0, &rec_addr, &len); 5-> > printf("%s\n", buffer); > } > close(sock); > return 0; > } >=20 >=20 > 2. sender.c > #include > #include > #include > #include > #include > #include > #include > #include > #define DEF_SND_PORT 1883 > #define DEF_SND_IP "10.0.0.255" >=20 > int sock; > struct sockaddr_in snd_addr; > int ret, size; >=20 > int main() > { > int enable =3D 1; > struct in_addr snd_ip; > char buffer[] =3D "Hello"; > socklen_t len =3D sizeof(snd_addr); >=20 > mlockall(MCL_CURRENT|MCL_FUTURE); 6-> >=20 > inet_aton(DEF_SND_IP, &snd_ip); 7-> > sock =3D socket(AF_INET, SOCK_DGRAM, 0); 8-> > setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &enable, > sizeof(enable)); 9-> >=20 > memset(&snd_addr, 0, sizeof(struct sockaddr_in)); > snd_addr.sin_family =3D AF_INET; > snd_addr.sin_port =3D htons(DEF_SND_PORT); > snd_addr.sin_addr =3D snd_ip; >=20 > while (1) { > ret =3D sendto(sock, buffer, 6, 0 , &snd_addr, len); 10-> So, that is 10 function calls without checking the return value. Please check the function return values. --=20 Gilles. https://click-hack.org