contiki-os/contiki — pull request #364 by g-oikonomou (2013-09-30 13:27:22+00:00)
Title: Add Support for IPv6 Multicast

This Pull Request adds multicast support, with an example and some regression tests. It introduces a NETSTACK-style multicast engine driver, with two such engines already implemented.

In a nutshell, this pull does the following:
* Adds support for RPL in MOP3 (basically, multicast group membership advertisements in DAOs)
* Implements the Multicast Forwarding using Trickle (TM) internet draft (now called MPL)
* Implements an alternative multicast forwarding engine called SMRF (links to its documentation in the README)
* Adds hooks to the uIP core and build system to bring it all together

I *must* start with the big gotcha. Currently, we only support multicast traffic originating and destined within the same 6LoWPAN. In other words, traffic can not cross 6LoWPAN boundaries in either direction. In order to support this, we'd need the following additions to border routers or other gateway devices:
* Capability to add / remove the TM/MPL HBHO for datagrams entering/exiting the 6LoWPAN. This is probably not horribly complicated
* Support for MLD, so that a BR can communicate group membership to the wider internet. This may take a while...

These are in the ToDo list

I am intentionally calling the Trickle Multicast engine TM and not MPL, since it was implemented when the draft was still at version 1 (i.e. before the name MPL came along). As I've discussed in the mailing list in the past, my personal take on things is that to implement MPL one would benefit by starting from scratch, since the differences are quite significant. During discussions it was agreed that it's better to have support for the old draft soon and implement the new version in due course, rather than have nothing while working on implementing MPL.

SMRF was originally written when we had support for neither the RPL HBHO nor multiple instances. I'm currently working on SMRFv2, which will take advantage of both techniques.

As some of you already know, this implementation has been around for circa 2 years now. I recently modified it to use the new neighbour tables and uip-ds6-route-style forwarding tables.

Looking forward to feedback
Enjoy