Open ErikSobel-TRI opened 8 years ago
LCM relies on loopback multicast. You'll want to ensure that a packet transmitted to the LCM multicast address (default is 239.255.76.67) makes it back to the same interface. The self test checks exactly that. The usual reasons that prevent this are firewall rules that kill packets, or routing table entries that cause the packets to be routed onto interfaces that don't loop the packets back.
Regards, Albert
On Mon, Apr 11, 2016 at 2:45 PM, ErikSobel-TRI notifications@github.com wrote:
Running on on Mac OS X Yosemite. The firewall is off under System Preferences/Security & Privacy
Is there a network configuration step that is needed?
./listener LCM self test failed!! Check your routing tables and firewall settings LCM self test failed!! Check your routing tables and firewall settings
— You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub https://github.com/lcm-proj/lcm/issues/60
Thanks for the reply. But the Mac's firewall is off and I'm not sure how to debug this since I'm not a network person. I tried sudo route -nv add -net 239.255.76.67 -interface lo0 which added that route but, I still got the same error. Any suggestions?
It might be an OS issue. I'm running OS X El Capitan and both the C and C++ versions work. Have you tried connecting another network interface to your machine using, for example, a USB-to-wired-ethernet adapter?
Haven't tried a USB-to-wired-ethernet adapter. Why would that help? Isn't it just looping back through localhost?
What should my router table look like? Here is my network info...
% ifconfig lo0
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1
% netstat -nr Internet: Destination Gateway Flags Refs Use Netif Expire 127.0.0.1 127.0.0.1 UH 2 1583 lo0 (extra stuff removed) 239.255.76.67/32 lo0 UmS 1 5 lo0
If I do the following it works (the udp message is received) echo TEST | socat - udp-datagram:127.0.0.1:5555
If I do the line below it does not work. (nothing is received) echo TEST | socat - udp-datagram:239.255.76.67:5555
Here's are the multicast-relevant lines in my routing table:
$ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
224.0.0 link#4 UmCS 1 0 en0
224.0.0.251 1:0:5e:0:0:fb UHmLWI 0 0 en0
The multicast routes are being sent through en0
instead of lo0
. If I disable en0
, I receive the following error when trying to launch LCM's listener
example:
$ ./listener
connect: Network is unreachable
I then add the same route as you did and it worked (even with all other network interfaces disabled):
$ sudo route -nv add -net 239.255.76.67 -interface lo0
$ netstat -nr
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
...
239.255.76.67/32 lo0 UmS 1 2 lo0
...
$ ./listener
Received message on channel "EXAMPLE":
timestamp = 0
position = (1.000000, 2.000000, 3.000000)
orientation = (1.000000, 0.000000, 0.000000, 0.000000)
ranges: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
name = 'example string'
enabled = 1
Thus, it seems like you're doing everything right, and the issue might be due to your particular OS or hardware version.
This problem persists. I'm looking for debugging suggestions.
I'm running Mac OS X El Capitan on MacBook Pro (Retina, 15-inch, Late 2013) My firewall is "Off" My router table includes:
224.0.0 link#4 UmCS 3 0 en0
224.0.0.0 1:0:5e:0:0:0 UHmLWI 1 6 en0
224.0.0.251 1:0:5e:0:0:fb UHmLWI 1 0 en0
239.255.76.67/32 lo0 UmS 1 1 lo0
UDP Multicast seems to work on this machine. When I run the following:
send.py
#!/usr/bin/python
import socket
MCAST_GRP = '239.255.76.67'
MCAST_PORT = 7667
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2)
sock.sendto("Hello World", (MCAST_GRP, MCAST_PORT))
receive.py
#!/usr/bin/python
import socket
import struct
MCAST_GRP = '239.255.76.67'
MCAST_PORT = 7667
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT)) # use MCAST_GRP instead of '' to listen only
# to MCAST_GRP, not all groups on MCAST_PORT
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
while True:
print sock.recv(10240)
Running lcm/examples /cpp% ./listen with export LCM_DBG=all generates the following output:
Initializing LCM UDPM context... Multicast 239.255.76.67:7667 LCM multicast TTL set to 0. Packets will not leave localhost LCM: setting multicast packet TTL to 0 LCM: send buffer is 9216 bytes LCM: joining multicast group registering EXAMPLE handler 0x104eba980 allocating resources for receiving messages LCM: setting SO_REUSEADDR LCM: setting SO_REUSEPORT LCM: receive buffer is 196724 bytes LCM: joining multicast group LCM: conducting self test registering LCM_SELF_TEST handler 0x104ecd5a0 transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) LCM: self test complete LCM self test failed!! Check your routing tables and firewall settings read thread received exit command read thread exiting allocating resources for receiving messages LCM: setting SO_REUSEADDR LCM: setting SO_REUSEPORT LCM: receive buffer is 196724 bytes LCM: joining multicast group LCM: conducting self test registering LCM_SELF_TEST handler 0x104ecd5a0 transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) transmitting 13 byte [LCM_SELF_TEST] payload (35 byte pkt) LCM: self test complete LCM self test failed!! Check your routing tables and firewall settings read thread received exit command read thread exiting closing lcm context
Not sure if this is still active but following the instructions here http://lcm-proj.github.io/multicast_setup.html fixed it for me.
Site updated to: http://lcm-proj.github.io/lcm/content/multicast-setup.html
I think perhaps as of Ubuntu 22.04, multicast on loopback might be off by default?
One way to turn it on permanently would be to create the file /etc/network/if-up.d/lo-multicast
with this content ...
#!/bin/sh
ip link set lo multicast on
... and chmod 755
on it (to make it executable).
The above fix (adding the lo-multicast file) did not work on my Ubuntu 22.04 machine. However, the one linked to above did:
sudo ifconfig lo multicast
sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
The above fix (adding the file) requires either a reboot or sudo /etc/network/if-up.d/lo-multicast
to put it into effect.
The above fix (adding the file) requires either a reboot or sudo /etc/network/if-up.d/lo-multicast to put it into effect.
I did both to no effect. Also, replacing the ip link
command in the file with the ifconfig
and route
commands did not work after a reboot making me think the lo-multicast file didn't get executed. (Running that by hand did work.)
Weird. Did you chmod 755 /etc/network/if-up.d/lo-multicast
to mark it as executable?
The TRI Anzu team has been using this exact file fix for several years, with no complains.
Yes: -rwxr-xr-x
Running on on Mac OS X Yosemite. The firewall is off under System Preferences/Security & Privacy
Is there a network configuration step that is needed?
./listener LCM self test failed!! Check your routing tables and firewall settings LCM self test failed!! Check your routing tables and firewall settings