<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML ><HEAD ><TITLE >OLSR for Linux</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="Linux Optimized Link State Routing Protocol (OLSR) IPv6 HOWTO" HREF="index.html"><LINK REL="PREVIOUS" TITLE="IPv6" HREF="ipv6.html"><LINK REL="NEXT" TITLE="FAQ" HREF="faq.html"></HEAD ><BODY CLASS="sect1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Linux Optimized Link State Routing Protocol (OLSR) IPv6 HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="ipv6.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="faq.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="sect1" ><H1 CLASS="sect1" ><A NAME="OLSRLinux" ></A >3. OLSR for Linux</H1 ><P > There are several OLSR implementation for Linux, but not all of them support IPv6. You should know how to enable and use IPv6 on Linux. Peter Bieringer has written an excellent <A HREF="http://ldp.linux.no/HOWTO/Linux+IPv6-HOWTO/" TARGET="_top" >Linux IPv6 HOWTO</A >. </P ><P > There is one OLSR implementation that is becoming the <SPAN CLASS="QUOTE" >"standard"</SPAN > and most widely used. It goes by the descriptive name <SPAN CLASS="QUOTE" >"OLSRd"</SPAN > (old Unik-OLSR). </P ><P > OLSRd is an implementation based on the INRA C code, but has been almost completely rewritten, so there is not much left of the original INRA code (that mean it almost GPL). OLSRd also is under very rapid development, and if you report in a bug, it is usually fixed in a matter of hours. </P ><P > OLSRd <A HREF="http://www.olsr.org/index.cgi?action=comp" TARGET="_top" >fully comply</A > to the OLSR RFC, support for plugins, and it has an optional GUI interface (to see what's going on). The implementation also has a informative <SPAN CLASS="QUOTE" >"up-to-date"</SPAN > <A HREF="http://www.olsr.org" TARGET="_top" >web-page</A > with links to mailing lists and papers. </P ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="installing" ></A >3.1. Installing OLSRd</H2 ><P >There are up-to multiple new releases of OLSRd each month, so check the OLSRd <A HREF="http://www.olsr.org" TARGET="_top" >web-site</A > for the newest release.</P ><P > <P ></P ><OL TYPE="1" ><LI ><P > The latest release as of this writing is 0.4.3, but by the time you read this there is almost certain a new release. Fetch the latest release from <A HREF="http://www.olsr.org/index.cgi?action=download" TARGET="_top" > http://www.olsr.org/index.cgi?action=download</A >.</P ></LI ><LI ><P >Unpack, compile and install the source code:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >tar</B > jxvf uolsrd-x.y.z</B ></TT > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >cd</B > unik-olsrd-x.y.z</B ></TT > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >make</B ></B ></TT > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >make install</B ></B ></TT > </PRE ></FONT ></TD ></TR ></TABLE ></LI ><LI ><P >The <TT CLASS="userinput" ><B >olsrd</B ></TT > gets installed to <TT CLASS="filename" >/usr/bin/</TT > and a default config file, <TT CLASS="filename" >olsrd.conf</TT > can be found under <TT CLASS="filename" >/etc</TT ></P ></LI ></OL > </P ><P >Check out the <TT CLASS="filename" >/etc/olsrd.conf</TT > config file, and change values to fit your system. All values in this file can be overridden with command line options to <TT CLASS="userinput" ><B >olsrd</B ></TT >. The main options to change are:</P ><P > <TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > # Debug level(0-9) # If set to 0 the daemon runs in the background DEBUG 1 # IP version to use (4 or 6) IPVERSION 6 # A list of whitespace separated interface names INTERFACES eth1 </PRE ></FONT ></TD ></TR ></TABLE > </P ><P > Later on, when you know OLSRd is configured correctly, you may set <SPAN CLASS="QUOTE" >"DEBUG"</SPAN > to <TT CLASS="userinput" ><B >0</B ></TT > to make it run in the background. You may then also add it to your init scripts. But to test that everything first, set this to at least <TT CLASS="userinput" ><B >1</B ></TT > (setting this higher will produce a lot more info messages on APM, forwarding, parsing of the config file etc.) </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="using" ></A >3.2. Using OLSRd</H2 ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="onehost" ></A >3.2.1. On one host</H3 ><P >When OLSRd is installed and configured, it can be started as root with:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >olsrd</B ></B ></TT > </PRE ></FONT ></TD ></TR ></TABLE ><P >All the settings in <TT CLASS="filename" >/etc/olsrd.conf</TT > can be overridden by command line options:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="programlisting" > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >olsrd</B > -i eth1 -ipv6 -d 1</B ></TT > </PRE ></FONT ></TD ></TR ></TABLE ><P >Would start <TT CLASS="userinput" ><B >olsrd</B ></TT > listening on interface <TT CLASS="userinput" ><B >eth1</B ></TT > using IPv6 and with debug messages.</P ><P >We start olsrd:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >olsrd</B > -i eth1 -d 1 -ipv6</B ></TT > *** UniK olsrd-0.4.3 *** hello interval = 2.00 hello int nonwireless: = 4.00 <A NAME="tuning" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A > tc interval = 5.00 polling interval = 0.10 neighbor_hold_time = 6.00 neighbor_hold_time_nw = 12.00 topology_hold_time = 15.00 tos setting = 16 hna_interval = 15.00 mid_interval = 5.00 Willingness set to 3 - next update in 20.000000 secs Using IP version 6 Using multicast address ff05::15 ---- Interface configuration ---- eth1: <A NAME="interface" ><IMG SRC="../images/callouts/2.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(2)"></A > Address: fec0:106:2700::10 Multicast: ff05::15 Interface eth1 set up for use with index 0 Main address: fec0:106:2700::10 <A NAME="adr" ><IMG SRC="../images/callouts/3.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(3)"></A > NEIGHBORS: l=linkstate, m=MPR, w=willingness Thread created - polling every 0.10 seconds <A NAME="list" ><IMG SRC="../images/callouts/4.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(4)"></A > neighbor list: 11:43:17.214807 neighbor list: 11:43:19.194967 neighbor list: 11:43:21.395046 neighbor list: 11:43:23.604800 neighbor list: 11:43:25.694875 </PRE ></FONT ></TD ></TR ></TABLE ><DIV CLASS="calloutlist" ><DL COMPACT="COMPACT" ><DT ><A HREF="olsrlinux.html#tuning" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A ></DT ><DD >This shows all the settings OLSRd is using. You may override these by either specifying it in the config file (<TT CLASS="filename" >/etc/olsrd.conf</TT >) or specify it at the command line. Read the <A HREF="http://www.ietf.org/rfc/rfc3626.txt" TARGET="_top" >OLSR RFC</A > for a description on what all these settings means.</DD ><DT ><A HREF="olsrlinux.html#interface" ><IMG SRC="../images/callouts/2.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(2)"></A ></DT ><DD >OLSRd found our interface. If you are using OLSRd with multiple interfaces, <SPAN CLASS="QUOTE" >"Multiple Interface Declaration"</SPAN > (MID) messages will be generated.</DD ><DT ><A HREF="olsrlinux.html#adr" ><IMG SRC="../images/callouts/3.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(3)"></A ></DT ><DD >If you are using OLSRd with multiple interfaces, it will pick the first interface specified as the <SPAN CLASS="QUOTE" >"main"</SPAN > address.</DD ><DT ><A HREF="olsrlinux.html#list" ><IMG SRC="../images/callouts/4.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(4)"></A ></DT ><DD >Since no other hosts are running OLSRd, this list is empty.</DD ></DL ></DIV ><P >Another thing worth noticing, is that an entry is added to our routing table:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >route</B > -A inet6</B ></TT > Destination: Next Hop Flags Metric Ref Use Iface ... ff05::15/128 ff05::15 UAC 0 1 1 eth1 ... </PRE ></FONT ></TD ></TR ></TABLE ><P >This is the IPv6 multicast address OLSR is using to talk to other nodes running OLSR.</P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="addhosts" ></A >3.2.2. Adding other hosts</H3 ><P >There is no point in using OLSRd on only one node, so we add some nodes. You will then see the <SPAN CLASS="QUOTE" >"neighbor list"</SPAN > gets updated:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > neighbor list: 12:55:14.733586 neighbor list: 12:55:18.803585 Willingness for fec0:106:2700::11 changed from 0 to 3 - UPDATING <A NAME="will" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A > neighbor list: 12:55:22.763585 fec0:106:2700::11:l=0:m=0:w=3[2hlist:] <A NAME="newhost" ><IMG SRC="../images/callouts/2.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(2)"></A > neighbor list: 12:55:26.833589 fec0:106:2700::11:l=1:m=0:w=3[2hlist:] Willingness for fec0:106:2700::12 changed from 0 to 2 - UPDATING <A NAME="thirdhost" ><IMG SRC="../images/callouts/3.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(3)"></A > neighbor list: 12:55:30.903585 fec0:106:2700::12:l=0:m=0:w=2[2hlist:] fec0:106:2700::11:l=1:m=0:w=3[2hlist:] neighbor list: 12:55:34.863585 fec0:106:2700::12:l=0:m=0:w=2[2hlist:] fec0:106:2700::11:l=1:m=0:w=3[2hlist:] neighbor list: 12:55:39.153586 fec0:106:2700::12:l=1:m=0:w=2[2hlist:fec0:106:2700::11:] <A NAME="triangle" ><IMG SRC="../images/callouts/4.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(4)"></A > fec0:106:2700::11:l=1:m=0:w=3[2hlist:fec0:106:2700::12:] <A NAME="triangle2" ><IMG SRC="../images/callouts/5.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(5)"></A > neighbor list: 12:55:43.443605 fec0:106:2700::12:l=1:m=0:w=2[2hlist:fec0:106:2700::11:] fec0:106:2700::11:l=1:m=0:w=3[2hlist:fec0:106:2700::12:] </PRE ></FONT ></TD ></TR ></TABLE ><DIV CLASS="calloutlist" ><DL COMPACT="COMPACT" ><DT ><A HREF="olsrlinux.html#will" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A ></DT ><DD > Another node detected (node B). This specifies the willingness of a node to carry and forward traffic for other nodes. Here the new node <TT CLASS="userinput" ><B >fec0:106:2700::11</B ></TT > is willing to forward traffic. A host with low battery may not be willing to forward large amount of traffic, - so it will proclaim a lower willingness value (routing based on powerstatus is available as a plugin). </DD ><DT ><A HREF="olsrlinux.html#newhost" ><IMG SRC="../images/callouts/2.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(2)"></A ></DT ><DD > The node has been added to our routing table. We can not (yet) reach any other node by way of this node, since the 2-hop neighbor list (<TT CLASS="userinput" ><B >[2hlist:]</B ></TT >) is empty. A 2-hop neighbor is a node heard by a neighbor. </DD ><DT ><A HREF="olsrlinux.html#thirdhost" ><IMG SRC="../images/callouts/3.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(3)"></A ></DT ><DD > Here is a third node (node C) running OLSRd. </DD ><DT ><A HREF="olsrlinux.html#triangle" ><IMG SRC="../images/callouts/4.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(4)"></A ></DT ><DD > After a short time, when all nodes have been updated and routes calculated, we may also reach any of the other nodes via the other. The 2-hop neighbor list (<TT CLASS="userinput" ><B >[2hlist:]</B ></TT >) is populated: We can reach node <TT CLASS="userinput" ><B > B</B ></TT > via <TT CLASS="userinput" ><B >C</B ></TT >. </DD ><DT ><A HREF="olsrlinux.html#triangle2" ><IMG SRC="../images/callouts/5.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(5)"></A ></DT ><DD > Here we can reach node <TT CLASS="userinput" ><B >C</B ></TT > via <TT CLASS="userinput" ><B >B</B ></TT >. </DD ></DL ></DIV ><P >You will also see the routing table is updated with the new hosts:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >route</B > -A inet6</B ></TT > Destination: Next Hop Flags Metric Ref Use Iface ... fec0:106:2700::11/128 :: UH 1 0 0 eth1 fec0:106:2700::12/128 :: UH 1 0 0 eth1 ... </PRE ></FONT ></TD ></TR ></TABLE ><P > The real beauty of OLSR is when you add a bunch of nodes and move them around. You can still reach each one of them either directly (if they are close), or through other nodes. </P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="movement" ></A >3.2.3. Movement</H3 ><P > When every node can reach every other node, it's no fun. Let's start moving the nodes, so that node <SPAN CLASS="QUOTE" >"A"</SPAN > and <SPAN CLASS="QUOTE" >"B"</SPAN > are out of (radio) range of each other. So when we move node <SPAN CLASS="QUOTE" >"A"</SPAN > far enough away so that it can't hear node <SPAN CLASS="QUOTE" >"C"</SPAN >, all traffic must go through node <SPAN CLASS="QUOTE" >"B"</SPAN >: </P ><DIV CLASS="mediaobject" ><P ><IMG SRC="images/movement.png" ALIGN="center" WIDTH="450"><DIV CLASS="caption" ><P >We move our three nodes so that node <TT CLASS="userinput" ><B >A</B ></TT > and <TT CLASS="userinput" ><B >C</B ></TT > must speak through node <TT CLASS="userinput" ><B >B</B ></TT > to reach each other. </P ></DIV ></P ></DIV ><P > Tip: Instead of physically moving the nodes around, you can use <TT CLASS="userinput" ><B >ip6tables</B ></TT >. You can drop all packet using the MAC-address. You just need to block on one node: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" ># </TT ><TT CLASS="userinput" ><B ><B CLASS="command" >ip6tables</B > -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP</B ></TT > </PRE ></FONT ></TD ></TR ></TABLE ><P > The output from OLSRd on host A is then: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > neighbor list: 13:22:35.693587 fec0:106:2700::11:l=1:m=1:w=3[2hlist:fec0:106:2700::12:] <A NAME="onlyone" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A > neighbor list: 13:22:40.093588 fec0:106:2700::11:l=1:m=1:w=3[2hlist:fec0:106:2700::12:] neighbor list: 13:22:44.053594 fec0:106:2700::11:l=1:m=1:w=3[2hlist:fec0:106:2700::12:] neighbor list: 13:22:48.233594 fec0:106:2700::11:l=1:m=1:w=3[2hlist:fec0:106:2700::12:] neighbor list: 13:22:52.193605 fec0:106:2700::11:l=1:m=1:w=3[2hlist:fec0:106:2700::12:] </PRE ></FONT ></TD ></TR ></TABLE ><DIV CLASS="calloutlist" ><DL COMPACT="COMPACT" ><DT ><A HREF="olsrlinux.html#onlyone" ><IMG SRC="../images/callouts/1.gif" HSPACE="0" VSPACE="0" BORDER="0" ALT="(1)"></A ></DT ><DD > We can reach node <TT CLASS="userinput" ><B >B</B ></TT > directly, and via node <TT CLASS="userinput" ><B >B</B ></TT > we can reach node <TT CLASS="userinput" ><B >C</B ></TT >. </DD ></DL ></DIV ><P > The routing table also gets updated. For node <TT CLASS="userinput" ><B >A</B ></TT > to reach node <TT CLASS="userinput" ><B >C</B ></TT > it must go through node <TT CLASS="userinput" ><B >B</B ></TT >:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >route</B > -A inet6</B ></TT > Destination: Next Hop Flags Metric Ref Use Iface ... fec0:106:2700::11/128 :: UH 1 1 0 eth1 fec0:106:2700::12/128 fec0:106:2700::11 UGH 2 0 0 eth1 ... </PRE ></FONT ></TD ></TR ></TABLE ></DIV ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="hna" ></A >3.3. What about HNA messages?</H2 ><P ><SPAN CLASS="QUOTE" >" In order to provide this capability of injecting external routing information into an OLSR MANET, a node with such non-MANET interfaces periodically issues a Host and Network Association (HNA) message, containing sufficient information for the recipients to construct an appropriate routing table."</SPAN > </P ><P ><SPAN CLASS="QUOTE" >" An example of such a situation could be where a node is equipped with a fixed network (e.g., an Ethernet) connecting to a larger network as well as a wireless network interface running OLSR."</SPAN > --- <A HREF="http://www.ietf.org/rfc/rfc2501.txt" TARGET="_top" >RFC3626: OLSR, section 12 (page 51).</A > </P ><DIV CLASS="mediaobject" ><P ><IMG SRC="images/HNA.png" ALIGN="center" WIDTH="550"><DIV CLASS="caption" ><P >OLSR with a gateway (GW), that sends out HNA messages. All the other nodes may then be accessing the <SPAN CLASS="QUOTE" >"Internet"</SPAN ></P ></DIV ></P ></DIV ><P > To have one node, act as a gateway and send out HNA messages, you must change the <TT CLASS="userinput" ><B >HNA6</B ></TT > in <TT CLASS="filename" >/etc/olsrd.conf</TT >: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > # HNA IPv6 routes # syntax: netaddr prefix # Example Internet gateway HNA6 :: 0 </PRE ></FONT ></TD ></TR ></TABLE ><P > When you start <TT CLASS="userinput" ><B >OLSRd</B ></TT >, you will see the node is sending out HNA messages periodically:</P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > ... Sending HNA (48 bytes)... ... </PRE ></FONT ></TD ></TR ></TABLE ><P > When the other nodes receives a HNA message, they update their routing table: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >route</B > -A inet6</B ></TT > Destination: Next Hop Flags Metric Ref Use Iface ... ::/0 fec0:106:2700::1 UG 1 0 0 eth1 ... </PRE ></FONT ></TD ></TR ></TABLE ><P > You may also have multiple nodes in a MANET to act as gateways (sending out HNA messages). Each mobile node then use the nearest gateway. </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="plugins" ></A >3.4. Plugin support</H2 ><P >As of version 0.4.3 OLSRd also support plugins. Plugins may be used to add extended functionality in a MANET. If only a subset of the nodes knows how to interpret the messagetype, it will be forwarded by all the nodes by the <SPAN CLASS="QUOTE" >"default forwarding algorithm"</SPAN > (see section 3.4.1 in the <A HREF="http://ietf.org/rfc/rfc3626.txt" TARGET="_top" >OLSR RFC</A >). This way certain nodes may add special functionlity into OLSR.</P ><P >As of this writing, two example plugins is included in the OLSRd release. One of these plugins add routing based on powerstatus. If one node has low battery, it can set its willingness lower and traffic may be routed through other nodes.</P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="gui" ></A >3.5. Optional GUI</H2 ><P > OLSRd also has an optional GUI, which can show a list of available nodes and grab packets. To compile the GUI front end, you must have GTK2. In <TT CLASS="filename" >unik-olsrd-x.y.z</TT > directory do: </P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="screen" > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >cd</B > front-end</B ></TT > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >make</B ></B ></TT > <TT CLASS="prompt" >#</TT > <TT CLASS="userinput" ><B ><B CLASS="command" >make</B > install</B ></TT > </PRE ></FONT ></TD ></TR ></TABLE ><DIV CLASS="note" ><P ></P ><TABLE CLASS="note" WIDTH="100%" BORDER="0" ><TR ><TD WIDTH="25" ALIGN="CENTER" VALIGN="TOP" ><IMG SRC="../images/note.gif" HSPACE="5" ALT="Note"></TD ><TD ALIGN="LEFT" VALIGN="TOP" ><P > Remember to start OLSRd with the <TT CLASS="userinput" ><B >-ipc</B ></TT > switch or set <TT CLASS="userinput" ><B >IPC-CONNECT yes</B ></TT > in <TT CLASS="userinput" ><B >/etc/olsrd.conf</B ></TT > to enable the GUI to chat with OLSRd. </P ></TD ></TR ></TABLE ></DIV ><P > To see some examples of the use of GUI, check out <A HREF="http://www.olsr.org/index.cgi?action=gui" TARGET="_top" > http://www.olsr.org/index.cgi?action=gui</A > </P ></DIV ><DIV CLASS="sect2" ><H2 CLASS="sect2" ><A NAME="other" ></A >3.6. Other OLSR implementations</H2 ><P >There is also other OLSR implementations, none have gained as much popularity as OLSRd, and none of them (except <A HREF="http://qolsr.lri.fr/" TARGET="_top" >QOLSR</A >?) are fully RFC compliant.</P ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="inria" ></A >3.6.1. INRIA</H3 ><P >INRIA was one of the first(?) implementation of OLSR <A HREF="http://hipercom.inria.fr/olsr/#code" TARGET="_top" >http://hipercom.inria.fr/olsr/#code</A >. Their web-site has not been updated for quite a while, and the OLSR code you can download only complies to draft-ietf-manet-olsr-03.txt (it's now an RFC). There is suppose to be another more up-to-date version of INRIA olsr, but I have not found it. INRIA OLSR does not support IPv6.</P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="nr" ></A >3.6.2. NROLSR</H3 ><P >The <SPAN CLASS="QUOTE" >"US Naval Research Laboratory"</SPAN > (NRL) also has an OLSR implementation. It is written in C++, and has IPv6 support. <A HREF="http://pf.itd.nrl.navy.mil/projects/olsr/" TARGET="_top" > http://pf.itd.nrl.navy.mil/projects/olsr/</A > </P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="crc" ></A >3.6.3. CRCOLSR</H3 ><P >CRCOLSR is a implementation based on the French INRIA code. It is is supposed to be maintained by <SPAN CLASS="QUOTE" >"Communication Research Center"</SPAN > (CRC) in Canada. But as of this writing, there have been no new releases since April 3, 2003. <A HREF="http://pf.itd.nrl.navy.mil/projects/olsr/" TARGET="_top" > http://pf.itd.nrl.navy.mil/projects/olsr/</A ></P ></DIV ><DIV CLASS="sect3" ><H3 CLASS="sect3" ><A NAME="qolsr" ></A >3.6.4. QOLSR</H3 ><P >QOLSR is aiming to provide <SPAN CLASS="QUOTE" >"Quality of Service"</SPAN > routing in wireless mobile ad hoc networks. There is no QoS support at the time of this writing, and support for ipv4/ipv6 is triggered at compile time. Written in C++.</P ></DIV ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="ipv6.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="faq.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >IPv6</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >FAQ</TD ></TR ></TABLE ></DIV ></BODY ></HTML >