lcm-proj / lcm

Lightweight Communications and Marshalling
GNU Lesser General Public License v2.1
977 stars 388 forks source link

LCM self test failed. #60

Open ErikSobel-TRI opened 8 years ago

ErikSobel-TRI commented 8 years ago

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

ashuang commented 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

ErikSobel-TRI commented 8 years ago

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?

liangfok commented 8 years ago

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?

ErikSobel-TRI commented 8 years ago

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

liangfok commented 8 years ago

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.

ErikSobel-TRI commented 8 years ago

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

manuelli commented 7 years ago

Not sure if this is still active but following the instructions here http://lcm-proj.github.io/multicast_setup.html fixed it for me.

amcastro-tri commented 1 year ago

Site updated to: http://lcm-proj.github.io/lcm/content/multicast-setup.html

jwnimmer-tri commented 1 year ago

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).

sherm1 commented 1 year ago

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
jwnimmer-tri commented 1 year ago

The above fix (adding the file) requires either a reboot or sudo /etc/network/if-up.d/lo-multicast to put it into effect.

sherm1 commented 1 year ago

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.)

jwnimmer-tri commented 1 year ago

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.

sherm1 commented 1 year ago

Yes: -rwxr-xr-x