ssmping

Introduction

ssmping is a tool for checking whether one can receive SSM from a given host. If a host runs ssmpingd, users on other hosts can use the ssmping client tool to test whether they can receive SSM from the host. Another tool called asmping is also provided to check whether can receive ASM. Finally, since version 0.9 there is also a tool called mcfirst to check whether one can receive any given multicast session.

How it works

ssmpingd listens for ssmping requests at UDP port 4321, both IPv4 and IPv6. ssmping is run as "ssmping <host>". ssmping will look up addresses for hostname if necessary (both IPv4 and IPv6 addresses) and then join (S,G) where S is the IP address, and G is either 232.43.211.234 for IPv4 or ff3e::4321:1234 for IPv6. Next it will once per second (until interrupted) send a unicast UDP ssmping request to the host. If ssmpingd is running on the host, it will respond by sending each request packet back (only changing type from request to reply). The reply is sent back both by unicast, and by multicast to the multicast group G that the client joined.

asmping works pretty much the same way, except that the group to use is specified on the command line. It will then join this group, and in the requests it will tell ssmpingd which group to respond to. In order to partly prevent ssmpingd being told to send to random groups (which could be used as some sort of attack), the last octet of an IPv4 group address is forced to end with 234, and the last 4 octets of an IPv6 group address to 4321:1234.

Example ssmping output:

$ ssmping ssmping.uninett.no
ssmping joined (S,G) = (2001:700:1:7:211:d8ff:fe8f:1f9b,ff3e::4321:1234)
pinging S from 2001:630:d0:111:250:fcff:fe6a:42b3
  unicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=0 dist=20 time=57.106 ms
  unicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=1 dist=20 time=56.929 ms
  unicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=2 dist=20 time=62.466 ms
multicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=2 dist=12 time=65.706 ms
  unicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=3 dist=20 time=57.226 ms
multicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=3 dist=12 time=59.455 ms
  unicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=4 dist=20 time=56.090 ms
multicast from 2001:700:1:7:211:d8ff:fe8f:1f9b, seq=4 dist=12 time=58.956 ms

--- 2001:700:1:7:211:d8ff:fe8f:1f9b ssmping statistics ---
5 packets transmitted, time 4744 ms
unicast:
   5 packets received, 0% packet loss
   rtt min/avg/max/std-dev = 56.090/57.963/62.466/2.296 ms
multicast:
   3 packets received, 40% packet loss
      0% loss since first multicast packet received (after 2067 ms)
   rtt min/avg/max/std-dev = 58.956/61.372/65.706/3.077 ms
$

This shows that it took about 2s for the multicast tree to be established. The first two multicast packets got lost. It also shows the round-trip time for the unicast and multicast (note that the multicast is really unicast in one direction). This shows here that there is roughly 3-4ms additional delay for the multicast packets. It also shows that the unicast packets have travelled 20 hops, while multicast only 12 hops. This shows that there probably is some tunneling for multicast. This is measured by having ssmpingd send all packets with a TTL/hop-limit of 64.

mcfirst

This is a tool to check whether you can receive a given multicast transmission. It supports both ASM and SSM, and IPv4 and IPv6. You run it specifying multicast group (and source if SSM) and port number. It will then run until it receives a single multicast packet, and tell you how long it took. Optionally you may specify how many packets and/or for how many seconds it shall run. If you specify how long to run, it will also tell you how many bits and packets per second were received.

System requirements

In order to use ssmping (the client that is), you must have a system that allows you to do source-specific joins. BSD based systems, including Mac OS X, typically don't support it. Also the multicast routers on the network must support IGMPv3 (IPv4) and/or MLDv2 (IPv6). There are no special requirements for the server since it only sends multicast. Also asmping and mcfirst should work on most systems with no need for SSM support.

Building and usage

See README enclosed with the sources.

Reporting bugs, asking for features

There is an issue tracker for ssmping where you might report bugs, file feature requests etc. You can also see what other people have reported. To report you need to create an account. If you prefer, you might mail me instead.

Sources, binaries and packages

For sources and windows binaries, see releases below. For Linux it's available in Gentoo Portage, as a Debian package (currently in Debian testing), and also as Fedora Core RPMs. A port is available for FreeBSD.

You may also obtain current sources from subversion. To check out the sources, do "svn co https://svn.testnett.uninett.no/ssmping". There is also a web interface.

Releases

2008-04-18
The latest release is ssmping 0.9.1. The only useful change from 0.9 is a fix to mcfirst. mcfirst in 0.9 goes into a busy wait using 100% cpu if you don't specify a timeout. This is fixed in this release. There is no need to upgrade unless you are a mcfirst user. 2006-06-13
The latest major release is ssmping 0.9. This release contains a new tool called mcfirst. The tools should work on most platforms, although ssmping obviously requires SSM support. New ssmping and asmping features include an option for specifying the size of replies, and an option for querying server version and features. The Windows support is improved, in particular the new versions are able to display number of hops for IPv6.

Binaries for Windows XP and Vista are also available. You can get them zipped or individually: zip - ssmping - asmping - ssmpingd - mcfirst

2005-11-29
Release of ssmping-0.8.1. The main change from 0.8 is the Windows code, which now also supports IPv6 SSM on Vista. This means you now can do IPv6 SSM on Vista. Also asmping is now available for Windows.

Binaries of the ssmping and asmping clients are available for Windows XP and Vista. Note that Vista supports IPv6 SSM, while Windows XP does not.
Windows ssmping client - Windows asmping client

2005-10-18
Release of ssmping-0.8. The only new feature is ASM support, but large parts of the code have been rewritten. ASM is supported by a separate client called asmping. ssmpingd has been extended to serve as a server for both ASM and SSM.

2005-07-28
ssmping-0.7 has no new functionality. A minor bug related to the statistics output has been fixed. The main difference is that this source supports both UNIX and Windows systems. There are a number of changes in the code, but the intention is that it should work as 0.6. It needs more testing on Windows. There are also some limitations on Windows. It does not display number of hops, and also the RTT time granularity is not so good. If you know how to fix this, please let me know. For Windows there is also a binary available.

2005-05-19
Release of ssmping-0.6. The only change is that the client now has an option "-I" for specifying which interface to join. On some broken systems ssmping will fail to join the multicast channel unless interface is specified.

2005-05-16
Release of ssmping-0.5. The client now prints out statistics, mostly similar to standard ping. The server is identical to 0.3 (and 0.4).

2005-04-23
Release of ssmping-0.4. The client now has options for forcing IPv4 or IPv6, and also an option for number of requests to send. The server is identical to 0.3.

2005-04-20
Release ssmping-0.3 should work properly on Solaris. To use ssmping the system must support SSM. I believe you need a patched Solaris 10 for that. Also the latest server now makes sure it sends responses from the address it receives queries on. The client expects this.

Previous versions 0.2 and 0.1 are also available.

Public ssmping servers

For testing you are free to use the ssmping servers below. To set up your own server, just run the ssmpingd tool. If you are willing to run a public server, please contact me. This might help you verify that other people can actually receive you.
hostname/addressIPv6IPv4ASM
ssmping.uninett.noxxx
noctv.funet.fixxx
ssmping.erg.abdn.ac.ukxxx
ssmping.net.switch.chxxx
ssmping.beacon.ja.netxx
ssmping.nysernet.orgx
ssmping.ecs.soton.ac.ukx
flo.nrc.cax
canet.u-strasbg.frx

Note that the multicast beacon dbeacon can also act as an ssmping server (but only SSM, not with asmping). For some additional IPv6 ssmping servers, see this beacon matrix. At the bottom of the page the beacon clients are listed. There is a column for ssmping servers there.

Looking glass

There is an ssmping looking glass where you might check if others can receive multicast from you.

Acknowledgments

The ssmping idea was proposed by Pavan Namburi, Kamil Sarac and Kevin C. Almeroth in the paper SSM-Ping: A Ping Utility for Source Specific Multicast. See also the Internet Draft draft-sarac-mping-00.txt. I was also inspired to work on this by discussions with Mickaël Hoerdt who has contributed with several ideas. Many thanks to Nick Lamb for the windows porting, and to Alexander Gall for great help with the Solaris port. I also wish to thank all those setting up public ssmping servers. And finally, thanks to Hugo Santos for implementing ssmping server support in dbeacon.
2006-06-13 Stig Venaas home