OLSRd mDNS Plug-in
Description
This plugin goal is the distribution of multicast DNS messages over an OLSR Wireless Mesh Network.
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, over the networks that do not directly partecipate in the OLSR mesh cloud.
This task is achieved in the following way:
- the local router picks up from the local non-OLSR (HNA) network mDNS messages and encapsulates them in a new type of OLSR messages,
- the OLSR infrastructure is exploited for the transport of these messages,
- remote routers decapsulate mDNS messages from received OLSR messages and send them over their attached non-OLSR networks.
The work could have 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.
Configuration
To enable the Plugin use the following syntax
LoadPlugin "olsrd_mdns.so.1.0.0" { PlParam "NonOlsrIf" "eth0" PlParam "NonOlsrIf" "eth1" }
Where eth0 and eth1 are the names of the interfaces where you want to capture traffic (and decapsulate incoming traffic).
Note that this interfaces must not talk OLSR and also the subnets on this interfaces must be announced with an appropriate HNA entry. This version of the plugin will not chech this stuff to be properly configured!
To receive mDNS messages on an host running olsrd, then put "lo" as NonOlsrIf.
How to compile on OpenWRT
$ svn co svn://svn.openwrt.org/openwrt/branches/8.09 openwrt $ cd openwrt $ echo "src-svn zzzninux https://svn.ninux.org/svn/ninuxdeveloping/packages" >> feeds.conf.default $ ./scripts/feeds update $ ./scripts/feeds install -a $ ./scripts/feeds uninstall olsrd $ ./scripts/feeds install -p zzzninux olsrd $ make menuconfig
References
Multicast DNS: IETF draft-cheshire-dnsext-multicastdns-07
OLSR Optimized Link State Routing: IETF RFC 3626