Archive for April, 2009

olsrd mdns plugin

Saturday, April 4th, 2009


I’m glad to announce the release of the olsr mdns plugin ! :)

The plugin goal is the distribution of multicast DNS messages over an OLSR Wireless Mesh Network.

But why ?? what is multicast DNS ?? Isn’t it the same to use the olsr bmf plugin ?

Well most of you probably heard about a IETF standard called ZeroConf. This standard is implemented on Linux/Unix systems with the name of Avahi and on Mac OS X with the name of Bonjour. To discover services in the network applications exchange multicast DNS packets. This means that we are able to discover services offered in the network within our multicast domain.

In a wireless mesh network, the usage of wireless interfaces in ad-hoc mode and the OLSR routing protocol prevent
multicast messages to be distributed all over the network.

We are especially interested in the distribution of Multicast DNS (mDNS) messages, used for host-based service discovery, and not of all the multicast traffic. The key idea is to extend the multicast domain of the networks that do not directly partecipate in the OLSR mesh cloud but that are fully routable and announced via HNA.

This task is achieved in the following way:
1. the local router picks up from the local non-OLSR (HNA) network mDNS messages and encapsulates them in a new type of OLSR messages
2. the OLSR infrastructure is exploited for the transport of these messages
3. remote routers decapsulate mDNS messages from received OLSR messages and send them over their attached non-OLSR networks.

The plugin has its practical and immediate application in all the wireless network communities that employ the OLSR protocol.

The plugin captures the traffic (only IPv4 if OLSR is running IPv4 and only IPv6 if OLSR is running IPv6)
and encapsulates this traffic in OLSR messages that are forwarded to all the other nodes in the mesh.

Other nodes running the plugin will decapsulate the packets and will send them to the interfaces specified in the configuration file

Let’s get this example topology

pc1->eth0 —– eth0<-r1->ath0 ——-ath0<-r2->eth0 ———eth0<-pc2

r1 and r2 are OLSR routers with mdns plugin enabled. pc1 will be able to receive mdns traffic generated at pc2 and vice versa

The most interesting feature is that messages are forwarded also by OLSR routers without the plugin. For example:

pc1->eth0 —– eth0<-r1->ath0 —r3—-ath0<-r2->eth0 ———eth0<-pc2

also in this topology mdns traffic between pc1 and pc2 is possible because r3 forwards mdns plugin OLSR packets even if it is not aware of the new application.
After a couple of weeks of hard work me and Claudio Pisa finished up the first version of the olsr mdns plugin :)

You can already find the code within the olsrd distribution or in the olsrd-luci OpenWRT package

Also internal Mercurial Repository for dirty coding are open to the public :)

Happy Hacking !