[Xorp-hackers] Multicast routing

Pavlin Radoslavov pavlin at icir.org
Sat Feb 17 08:26:02 PST 2007

> > You need to set the source address as well.
> Yes it worked when I specified the source.
> > The UNIX kernel doesn't support (*,G) forwarding entries where the
> > source address is INADDR_ANY.
> Does this imply Unix/Linux do not support ASM? If they do support ASM
> then what should be the source address in MFC entry?

UNIX (incl. Linux) do support ASM, but not the way you expect :)
All ASM state in the routing level is mapped into (S,G) forwarding
entries into the kernel.
This is done by installing all (S,G) forwarding entries on-demand.
When the first data packet from a new (S,G) dataflow arrives, the
kernel sends IGMP_NOCACHE upcall to the userland. This upcall
contains the source and group address. The userland program (e.g.,
XORP) will calculate the (expected) incoming interface and the
outgoing interfaces and will take the appropriate action: e.g.,
install (S,G) MFC in the kernel even if the corresponding routing
entry is (*,G).

> > If the Linux kernel didn't return an error (as it appears from the
> > ip_mr_cache output), then this is a bug in the kernel.
> I am not sure about this because there should be a way of supporting
> ASM on Linux.

See above.

While on the subject.
The reason that the UNIX/Linux kernel supports only (S,G) multicast
forwarding entries is primarily historic, and it is possible to
implement (*,G) support in the kernel.
In fact, several years ago I did an experiment and it wasn't
terribly difficult to implement it (both in kernel and userland).
The kernel code is still available from
The userland code is still left in the last version of the now
obsoleted pimd.


More information about the Xorp-hackers mailing list