Subject: [BEHAVE] Announcing an IPv4 to IPv6 multicast translator implementation

From: Behcet Sarikaya <[email-masked]>
Date: Thu, 27 May 2010 09:18:55 -0700 (PDT)

Hi,
Is there a solution for the reverse case, i.e. IPv6 to IPv4 multicast?
Isn't this case more pressing?
Regards,
Behcet
 
Hi all,

As part of my master's thesis, I've written an IPv4 to IPv6 multicast
translator implementation. The translator is implemented as a new
component of MRD6 multicast router on Linux.

The implementation follows the architectural ideas and address
translation presented in draft-venaas-behave-mcast46. IPv4 to IPv6
protocol translation is done using an adapted version of the SIIT
algorithm. IPv6 to IPv4 translation or unicast translation is not
supported.

Both any-source multicast and source-specific multicast can be
translated. The translator can be used as a simple MLD to IGMP proxy,
or the translator can provide a translation service for a larger
network with PIM.

The protocol translator handles IPv6 path MTU discovery and
fragmentation on behalf of IPv4 multicast sources. The translator
tries to avoid unnecessary fragmentation by keeping state about the
currently known IPv6 path MTU for each multicast group address. That
way most MPEG-2 TS over UDP IPTV streams can be translated without
fragmentation.

Some systems (at least Linux) seem to enable path MTU discovery on all
sockets and send IPv4 UDP packets with the Don't Fragment (DF) flag
set, even if the destination address is a multicast group. As IPv4
routers are not allowed to send ICMP error messages about multicast,
large IPv4 multicast packets are be a bit problematic.

One solution would have been to drop too large packets, like an IPv4
router. However, it would have made some IPv4 multicast unavailable to
IPv6 hosts. Another solution would have been to send ICMP error
messages anyway. At least Linux seems to respond correctly to ICMP
error messages concerning multicast, but other systems may not.

To avoid compatibility issues with existing IPv4 multicast sources and
IPv6 networks, the translator ignores the IPv4 DF flag and fragments
those packets anyway. However, IPv4 hosts may send packets with zero
fragment identification values. The problem of zero identification
values was avoided by generating IPv6 fragment identification values in
the protocol translator. The translator ensures that the high-order 16
bits of a generated fragment identification value are always non-zero,
avoiding clashes with existing IPv4 identification values.

The translator is licenced under the GNU GPL and was recently merged
to the MRD6 git repository at: http://github.com/hugosantos/mrd6

The translator implementation is described in detail in my master's
thesis. The thesis is available in PDF format here:
http://iki.fi/teemuki/translator/

-- 
Best regards,
Teemu Kiviniemi