[Olsr-dev] mtu problem with multicast ipv6 packets

Henning Rogge (spam-protected)
Tue Mar 24 18:11:35 CET 2009


On Dienstag 24 März 2009 15:03:41 Roar Bjørgum Rotvik wrote:
> Henning Rogge wrote:
>
> >> You know that Freifunk was considered for GSoC and one of the projects
> >> is porting the OBAMP protocol (Overlay Multicast for MANET) from Java
> >> to C and make an olsr plugin out of it ??
> >
> > No, I did not know about it.
> >
> > I'm looking (at the moment) for ways to let the kernel do our multicast
> > traffic forwarding, instead of doing it in userspace. Maybe I will just
> > discover "it cannot be done for mesh networks". ^^
>
> Just wanted you to know that I have written a simple multicast forwarding
> program for Linux, that uses the kernel multicast routing tables. The
> application takes a list of interfaces and forward each incoming multicast
> packet to all other interfaces except for the incoming interface. This
> behavior is simple to change in the codebase.
>
> Basically your user space program have to do these steps to make the kernel
> route multicast between two or more interfaces:
> 1: Open an IGMP socket and tell the kernel that your application is
> responsible for populating the kernel multicast forwarding cache (MFC).
> This is done with the setsockopt (MRT_INIT). Only one application at a time
> can hold this "flag" and one application must be running with this "flag"
> set for MFC to work.
>
> 2: Add your interfaces that will participate in mcast forwarding (these
> interfaces is called VIF - Virtual InterFace). See setsockopt
> (MRT_ADD_VIF).
>
> 3: Wait for events (poll()/select()) from IGMP socket in point 1, and read
> out packet as "struct iphdr".
> if iphdr->protocol == 0, then parse received packet as "struct igmpmsg",
> this header contains info like incoming VIF and src/dst for mcast packet.
> After "struct igmpmsg" follows an "struct igmphdr" header with member
> im_msgtype. If this member is 1 then the multicast packet was not found in
> the kernel MFC table and is passed to your application so that it can be
> handled.
> Most likely you would want to add an MFC entry based on this packet, so
> other packet with same src/dst is forwarded by the kernel.
>
> 4: Add an MFC entry, to make kernel forward mcast packets to a given
> interface (or more interfaces).
> Use "struct mfcctl" here. Fill out with source IP, mcast destination,
> incoming VIF and an array of outgoing VIF's (enable those VIF indexes in
> this array that matches the wanted outgoing interfaces). Set MFC with
> setsockopt (MRT_ADD_MFC).
>
> This is the basic routine just to enable kernel mcast forwarding, and
> populate the forward cache from an user space application.
>
> Was it information like this you wanted? (I saw your message on the
> linux-net/netdev mailing list) :)
Yes, something like this.

Unfortunately this is not enough for 802.11 based mesh networks, because we 
have no well defined broadcast domains. We need some kind of duplicate 
detection when the same package is received a second time, and the linux 
kernel cannot do this.

Henning
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.olsr.org/pipermail/olsr-dev/attachments/20090324/337f48ba/attachment.sig>


More information about the Olsr-dev mailing list