The IPv4 multicast space is embedded into IPv6 using this /96 prefix. The IPv4 address is simply appended to the /96 to construct the respective IPv6 multicast address. An application on a host in the domain, can send traffic to any IPv4 multicast group (might be limited by scope) a.b.c.d by sending to the respectve IPv6 group PREFIX:a.b.c.d. That is, the /96 prefix with a.b.c.d appended. The application may also join the group PREFIX:a.b.c.d to receive all IPv4 multicast sent to a.b.c.d. Also note that if multiple hosts are sending to or joining PREFIX:a.b.c.d they will be able to send to and receive from eachother as usual.
Since the gateway is the RP for the chosen /96 prefix, it will be able to receive all data sent to PREFIX:a.b.c.d so that it can resend it as IPv4 multicast to a.b.c.d. It will also know whether there are any hosts interested in receiving traffic from PREFIX:a.b.c.d. If that is the case, it will join the IPv4 group a.b.c.d and resend all traffic received from it. Note that IPv6 hosts can send without joining. And also that this allows communications in both directions, and you might have say a video conference with multiple IPv6 participants all using PREFIX:a.b.c.d and multiple IPv4 participants all using a.b.c.d. Everyone should be able to send to and/or receive from all others.
Seen from IPv4, the gateway is just a normal host using IGMP. It might join and send to a large number of IPv4 groups. In IPv6 it acts as a PIM router and is an RP for some /96 prefix.
In this example, an IPv6 host somewhere in the PIM domain wants to receive data from the IPv4 multicast group 224.2.240.176. The gateway is here deployed using the prefix ff3e:30:2001:700:1:ffff::/96, and is an RP for this prefix. This RP must be defined on all the routers on the path from the IPv6 host to the RP. To join the IPv4 group, the IPv6 host joins ff3e:30:2001:700:1:ffff:224.2.240.176, or written the usual way it becomes ff3e:30:2001:700:1:ffff:e002:f0b0. PIM joins are being propagated towards the gateway as usual, building a shared tree or RPT. When the RP (gateway) detects that there are listeners, it will look at the last 32 bits of the address, and see that it's the multicast group 224.2.240.176. It will then join this IPv4 group as a normal IPv4 host. The data received is being resent. In IPv6 the source of the packets will appear to be the gateway.
Here we look at what happens when the IPv6 host sends packets to the group. The first-hop router will as usual encapsulate the packets into PIM register messages, and send them to the RP, which is the gateway. The gateway will then send the data to the respective IPv4 group, using its IPv4 address as source address. As usual the gateway will also forward the data packets towards IPv6 listeners. Also, as usual, the gateway might build shortest path tree (SPT) towards the source, and receive packets natively.
The current implementation is available here.
Let's look at an example.
Here we are using sdr, and we're looking at the announcement for the IPv4 group "Places all over the world".
Here we're still in sdr, at an IPv6 host looking at the translated announcement. Unfortunately the entire group address isn't visible, but it's been rewritten as the corresponding IPv6 address, and we see that the source of the announcement is an IPv6 address. That's the address of the host running the SAP translator.
The source for the SAP translator is available here. Instructions are in the beginning of the file.
Since the SAP translator is also deployed. You can find all the IPv4 announcements by running sdr for IPv6. They will be prefixed by "zmcgw". You should find e.g. "zmcgw: Places all over the world". So simply click on this and you should be able receive as usual.
| testnett-gruppe@uninett.no | 2004-05-05 |