[ros-dev] ping -t 127.0.0.1

art yerkes ayerkes at speakeasy.net
Thu May 26 17:09:32 CEST 2005


On Thu, 26 May 2005 20:45:49 +0100
Gedi <gedi at ntlworld.com> wrote:

> Gedi wrote:
> 
> > ea wrote:
> >
> >> Run it twice, in two console windows.
> >> This exposes a bug (it seems packets get corrupted).
> >>
> >> Emanuele Aliberti
> >>
> > The ICMP packets are being picked up by the wrong process and thus the 
> > ICMP id field isn't maatching up with the process ID.
> >
> > Busy at the mo, but if no one has sorted it by Wednesday, I'll have a 
> > look at it.
> >
> >
> 
> OK, I've had a look at this and I'm struggling to come up with decent
> solution.
> After getting a severe headache, I contacted Warren Young who runs the
> Winsock FAQ and he suggested there is a weakness in the MS stack.
> 
> As the bug ea spoke about is evident on Windows, this would support that
> theory.
> However as our stack has derived from Linux, and Linux doesn't replicate
> this bug, I'm at a loss.

Our TCP component is imported from FreeBSD.  Everything else was written
originally by Casper and heavily revised by me.  This includes all code
related to datagram oriented protocols such as ICMP.  I can visualize the
bug but unfortunately, my house is torn apart for the move and I may not
be able to spend any time on it before June.

> 
> My only 2 thoughts to get around this problem at the moment at to write
> all ICMP packets into a buffer and tell ping, tracert, etc to check the
> ID field before removing them, or possibly polling recvfrom with MSG_PEEK.
> 
> Both of these are obviously nasty hacks, the first more so than the second.
> 

We need better infrastructure to support what would be equivalent to ICMP
ports; treating the ID field as a port number effectively.  I'm wondering
if by fixing this we'll be breaking any existing apps that rely on loose
handling of ICMP sockets.

> 
> This will become a problem in the future, so I'd welcome any thoughts /
> ideas to rectify this now.
> 
> Regards,
> Ged.

Thanks for looking into it.  It's a really sticky problem since ICMP is
really meant to be a system-level protocol, not an application protocol.
As such, I'm not aware of firm rules regarding delivery of ICMP datagrams
to applications, only rules regarding how they're received and dealt with
at the system level.
-- 
Here's a simple experiment. Stand on a train track between two locomotives
which are pushing on you with equal force in opposite directions. You will
exhibit no net motion. None the less, you may soon begin to notice that
something important is happening.
-- Robert Stirniman


More information about the Ros-dev mailing list