<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://oldwiki.funkfeuer.at/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://oldwiki.funkfeuer.at/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bernd</id>
		<title>FunkFeuer Wiki - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://oldwiki.funkfeuer.at/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bernd"/>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Spezial:Beitr%C3%A4ge/Bernd"/>
		<updated>2026-04-05T03:32:56Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.5</generator>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OSLiNK_GPL_violation</id>
		<title>OSLiNK GPL violation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OSLiNK_GPL_violation"/>
				<updated>2008-06-01T19:02:48Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* OSLiNK GPL violation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OSLiNK GPL violation==&lt;br /&gt;
 OSLiNK Sp. z o.o.&lt;br /&gt;
 ul. Jana Pawła II 6c&lt;br /&gt;
 89-604 Chojnice&lt;br /&gt;
 Poland&lt;br /&gt;
 &lt;br /&gt;
 Phone:+48 52 396 25 00 and +48 52 395 12 75&lt;br /&gt;
 Fax: +48 52 396 25 01&lt;br /&gt;
 &lt;br /&gt;
 Sales E-mail:sales@osbridge.com &amp;lt;mailto:sales@osbridge.com&amp;gt;&lt;br /&gt;
 Skype:osbridge_sales &amp;lt;callto:osbridge_sales&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 Support E-mail:support@osbridge.com &amp;lt;mailto:support@osbridge.com&amp;gt;&lt;br /&gt;
 Skype: osbridge_support &amp;lt;callto:osbridge_support&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Repair service E-mail: service@osbridge.com &amp;lt;mailto:service@osbridge.com&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
produces a WLAN bridge called [http://www.osbridge.com/?q=en/node/68/ OSBRiDGE 5GXi].&lt;br /&gt;
&lt;br /&gt;
Clemens HOPFER from [http://www.funkfeuer.at FunkFeuer] found that the firmware versions 3.39, 3.50, 3.52, 3.54 and [[http://www.osbridge.com/download/OSBRiDGE_5XLi_4.01R.zip 4.01R]], as &lt;br /&gt;
binary downloadable from their [http://www.osbridge.com/?q=en/software website] &lt;br /&gt;
contain busybox, rrd-tools and the linux kernel.&lt;br /&gt;
&lt;br /&gt;
===Firmware version 4.01R===&lt;br /&gt;
The firmware 4.01R contains the following versions of busybox and the linux kernel:&lt;br /&gt;
====busybox version====&lt;br /&gt;
 # busybox&lt;br /&gt;
 BusyBox v1.01 (2008.04.14-09:29+0000) multi-call binary&lt;br /&gt;
 &lt;br /&gt;
 Usage: busybox [function] [arguments]...&lt;br /&gt;
 or: [function] [arguments]...&lt;br /&gt;
 &lt;br /&gt;
 BusyBox is a multi-call binary that combines many common Unix&lt;br /&gt;
 utilities into a single executable. Most people will create a&lt;br /&gt;
 link to busybox for each function they wish to use and BusyBox&lt;br /&gt;
 will act like whatever it was invoked as!&lt;br /&gt;
 &lt;br /&gt;
 Currently defined functions:&lt;br /&gt;
 [, ash, basename, bunzip2, busybox, bzcat, cat, chmod, cp, cut,&lt;br /&gt;
 date, df, echo, expr, getty, grep, head, ifconfig, init, insmod,&lt;br /&gt;
 ip, kill, killall, linuxrc, logger, ls, lsmod, mkdir, mount, ping,&lt;br /&gt;
 printf, ps, rdate, reboot, rm, rmmod, route, sh, sleep, syslogd,&lt;br /&gt;
 tail, test, touch, tr, traceroute, udhcpc, uname, uptime, vconfig,&lt;br /&gt;
 wget&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
====linux kernel version====&lt;br /&gt;
 &lt;br /&gt;
 # uname -a&lt;br /&gt;
 Linux OSBRiDGE 2.6.22.4 #134 Tue Apr 15 21:44:17 CEST 2008 mips unknown&lt;br /&gt;
&lt;br /&gt;
====rrd-tools====&lt;br /&gt;
The Firmware contains rrd-tools as you can see in the screen shot from the web interface of the OSBRiDGE 5GXi (look at the right border of the graphs - there you can still see the rrd-tools text)&lt;br /&gt;
[[image:osbridgerrd.png|thumb|Screen shot of the OSBRiDGE web interface with rrd-tools graphs]]&lt;br /&gt;
&lt;br /&gt;
===GPL Violations===&lt;br /&gt;
* The source code to build the firmware is not available as download. &lt;br /&gt;
* No copyright notice about GPL anywhere on their [http://www.osbridge.com website].&lt;br /&gt;
* The source code is not available if you ask for it (see email &lt;br /&gt;
conversation below).&lt;br /&gt;
&lt;br /&gt;
===support@osbride.com denied to deliver the source code===&lt;br /&gt;
 Forwarded conversation&lt;br /&gt;
 Subject: *Is the source code to build the firmware for the Osbridge 5GXi &lt;br /&gt;
 available?*&lt;br /&gt;
 ------------------------&lt;br /&gt;
 &lt;br /&gt;
 From: *Dieter Hofrichter* &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 Date: Sat, Apr 19, 2008 at 3:34 PM&lt;br /&gt;
 To: support@osbridge.com&lt;br /&gt;
 &lt;br /&gt;
 Dear OSBRiDGE support,&lt;br /&gt;
 is the source code to build the firmware for the Osbridge 5GXi available?&lt;br /&gt;
 Where can I download it?&lt;br /&gt;
 Best regards&lt;br /&gt;
 Dieter&lt;br /&gt;
 ----------&lt;br /&gt;
&lt;br /&gt;
 From: *Leszek Olszewski* &amp;lt;leszek.olszewski@osbridge.com&amp;gt;&lt;br /&gt;
 Date: Sat, Apr 19, 2008 at 9:09 PM&lt;br /&gt;
 To: Dieter Hofrichter &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Hello, &lt;br /&gt;
 &lt;br /&gt;
 We do not provide source code for the firmware.&lt;br /&gt;
 &lt;br /&gt;
 Regards,&lt;br /&gt;
 Leszek Olszewski&lt;br /&gt;
 OSLiNK Sp. z o.o.&lt;br /&gt;
&lt;br /&gt;
===further e-mail conversation with OSLiNK===&lt;br /&gt;
 Leszek Olszewski wrote:&lt;br /&gt;
 &amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Yes, we are still waiting for an advice from our legal counsel regarding this situation.&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; As soon as we get a positive opinion from our legal counsel then we'll post the required parts of   the firmware that is licensed under GPL on our web site (that is Linux Kernel, Busybox and others, if there are any).&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Regards,&lt;br /&gt;
 &amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Dieter Hofrichter wrote:&lt;br /&gt;
 &amp;gt;&amp;gt; Dear Mr. Olszewski,&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; three weeks passed by and I have heard no news about where I can download the sourcecode for the OSBRiDGE 5GXi.&lt;br /&gt;
 &amp;gt;&amp;gt; Is there any progress?&lt;br /&gt;
 &amp;gt;&amp;gt; Are there any doubts on your side that the firmware contains software with the GPL license and the resulting consequences?&lt;br /&gt;
 &amp;gt;&amp;gt; Why is there still no possibility to download the sourcecode?&lt;br /&gt;
 &amp;gt;&amp;gt; Why do you not mention that the firmware of the OSBRiDGE 5GXi contains software with GPL license on your webpage?&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; Dieter Hofrichter schrieb:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Dear Mr. Olszewski,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; thank you for your fast reply.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; If you want to verify, that your! devices use code under GPL license you have several  possibilities:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; - Ask your software provider for access to the shell and execute the commands I wrote below (&amp;quot;uname - a&amp;quot; and/or &amp;quot;busybox&amp;quot;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; - go to the webinterface of an OSBRiDGE 5GXi, login as admin and look at the network graphs on  the bottom of the page. You will find on the right edge &amp;quot;RRDTOOL / TOBI OETIKER&amp;quot; -&amp;gt; and on http://oss.oetiker.ch/rrdtool/license.en.html you can find the license of rrd-tools.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Thank you again for your cooperation. We are looking forward to see the sourcecode of the OSBRiDGE 5GXi soon on your web site.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Dieter Hofrichter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Leszek Olszewski wrote:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Thank You for the notification. We actually use a 3rd party company to provide the software for us and as a rule that software should not contain any code under GPL license if we are not notified about that fact upfront. We have not been notified about that in this case. If you could provide me information on how we can verify this fact ourselves then that'd be really great.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; In any way, we'll seek our legal counsel advice on this situation and if there's no word against it, we'll get all relevant source code released and posted on our web site within next couple of days in order to fully comply with the license terms.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Once again, Thank You for the notification.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter Hofrichter wrote:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ul. Jana PawÄšďż˝a II 6c&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 89-604 Chojnice&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Poland&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Phone:+48 52 396 25 00 and +48 52 395 12 75&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Fax: +48 52 396 25 01&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Sales E-mail:sales@osbridge.com &amp;lt;mailto:sales@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Skype:osbridge_sales &amp;lt;callto:osbridge_sales&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Support E-mail:support@osbridge.com &amp;lt;mailto:support@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Skype: osbridge_support &amp;lt;callto:osbridge_support&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Repair service E-mail: service@osbridge.com &amp;lt;mailto:service@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; produces a WLAN bridge called OSBRiDGE 5GXi.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The latest firmware version as of April 20th 2008 is version 4.01R, as binary downloadable from their webpage at http://www.osbridge.com/download/OSBRiDGE_5XLi_4.01R.zip&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This firmware contains busybox:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; # busybox&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BusyBox v1.01 (2008.04.14-09:29+0000) multi-call binary&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Usage: busybox [function] [arguments]...&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; or: [function] [arguments]...&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BusyBox is a multi-call binary that combines many common Unix&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; utilities into a single executable. Most people will create a&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; link to busybox for each function they wish to use and BusyBox&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; will act like whatever it was invoked as!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Currently defined functions:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [, ash, basename, bunzip2, busybox, bzcat, cat, chmod, cp, cut,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; date, df, echo, expr, getty, grep, head, ifconfig, init, insmod,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ip, kill, killall, linuxrc, logger, ls, lsmod, mkdir, mount, ping,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; printf, ps, rdate, reboot, rm, rmmod, route, sh, sleep, syslogd,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tail, test, touch, tr, traceroute, udhcpc, uname, uptime, vconfig,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wget&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and the linux kernel&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; # uname -a&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Linux OSBRiDGE 2.6.22.4 #134 Tue Apr 15 21:44:17 CEST 2008 mips unknown&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; but the source code to build the firmware is not available as download. I could not find any copyright notice about GPL anywhere on there webpage.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I asked via email to support@osbride.com for the source code but got the answer, that the source code is not distributed (see attached email conversation).&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If you need any further information please don't hesitate to contact me.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Forwarded conversation&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Subject: *Is the source code to build the firmware for the Osbridge 5GXi available?*&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ------------------------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; From: *Dieter Hofrichter* &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Date: Sat, Apr 19, 2008 at 3:34 PM&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To: support@osbridge.com&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dear OSBRiDGE support,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is the source code to build the firmware for the Osbridge 5GXi available?&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Where can I download it?&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ----------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; From: *Leszek Olszewski* &amp;lt;leszek.olszewski@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Date: Sat, Apr 19, 2008 at 9:09 PM&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To: Dieter Hofrichter &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; We do not provide source code for the firmware.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OSLiNK_GPL_violation</id>
		<title>OSLiNK GPL violation</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OSLiNK_GPL_violation"/>
				<updated>2008-06-01T19:02:20Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* OSLiNK GPL violation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==OSLiNK GPL violation==&lt;br /&gt;
 OSLiNK Sp. z o.o.&lt;br /&gt;
 ul. Jana Pawła II 6c&lt;br /&gt;
 89-604 Chojnice&lt;br /&gt;
 Poland&lt;br /&gt;
 &lt;br /&gt;
 Phone:+48 52 396 25 00 and +48 52 395 12 75&lt;br /&gt;
 Fax: +48 52 396 25 01&lt;br /&gt;
 &lt;br /&gt;
 Sales E-mail:sales@osbridge.com &amp;lt;mailto:sales@osbridge.com&amp;gt;&lt;br /&gt;
 Skype:osbridge_sales &amp;lt;callto:osbridge_sales&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 Support E-mail:support@osbridge.com &amp;lt;mailto:support@osbridge.com&amp;gt;&lt;br /&gt;
 Skype: osbridge_support &amp;lt;callto:osbridge_support&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Repair service E-mail: service@osbridge.com &amp;lt;mailto:service@osbridge.com&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
produces a WLAN bridge called [[http://www.osbridge.com/?q=en/node/68/][OSBRiDGE 5GXi]].&lt;br /&gt;
&lt;br /&gt;
Clemens HOPFER from [http://www.funkfeuer.at FunkFeuer] found that the firmware versions 3.39, 3.50, 3.52, 3.54 and [[http://www.osbridge.com/download/OSBRiDGE_5XLi_4.01R.zip 4.01R]], as &lt;br /&gt;
binary downloadable from their [http://www.osbridge.com/?q=en/software website] &lt;br /&gt;
contain busybox, rrd-tools and the linux kernel.&lt;br /&gt;
&lt;br /&gt;
===Firmware version 4.01R===&lt;br /&gt;
The firmware 4.01R contains the following versions of busybox and the linux kernel:&lt;br /&gt;
====busybox version====&lt;br /&gt;
 # busybox&lt;br /&gt;
 BusyBox v1.01 (2008.04.14-09:29+0000) multi-call binary&lt;br /&gt;
 &lt;br /&gt;
 Usage: busybox [function] [arguments]...&lt;br /&gt;
 or: [function] [arguments]...&lt;br /&gt;
 &lt;br /&gt;
 BusyBox is a multi-call binary that combines many common Unix&lt;br /&gt;
 utilities into a single executable. Most people will create a&lt;br /&gt;
 link to busybox for each function they wish to use and BusyBox&lt;br /&gt;
 will act like whatever it was invoked as!&lt;br /&gt;
 &lt;br /&gt;
 Currently defined functions:&lt;br /&gt;
 [, ash, basename, bunzip2, busybox, bzcat, cat, chmod, cp, cut,&lt;br /&gt;
 date, df, echo, expr, getty, grep, head, ifconfig, init, insmod,&lt;br /&gt;
 ip, kill, killall, linuxrc, logger, ls, lsmod, mkdir, mount, ping,&lt;br /&gt;
 printf, ps, rdate, reboot, rm, rmmod, route, sh, sleep, syslogd,&lt;br /&gt;
 tail, test, touch, tr, traceroute, udhcpc, uname, uptime, vconfig,&lt;br /&gt;
 wget&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
====linux kernel version====&lt;br /&gt;
 &lt;br /&gt;
 # uname -a&lt;br /&gt;
 Linux OSBRiDGE 2.6.22.4 #134 Tue Apr 15 21:44:17 CEST 2008 mips unknown&lt;br /&gt;
&lt;br /&gt;
====rrd-tools====&lt;br /&gt;
The Firmware contains rrd-tools as you can see in the screen shot from the web interface of the OSBRiDGE 5GXi (look at the right border of the graphs - there you can still see the rrd-tools text)&lt;br /&gt;
[[image:osbridgerrd.png|thumb|Screen shot of the OSBRiDGE web interface with rrd-tools graphs]]&lt;br /&gt;
&lt;br /&gt;
===GPL Violations===&lt;br /&gt;
* The source code to build the firmware is not available as download. &lt;br /&gt;
* No copyright notice about GPL anywhere on their [http://www.osbridge.com website].&lt;br /&gt;
* The source code is not available if you ask for it (see email &lt;br /&gt;
conversation below).&lt;br /&gt;
&lt;br /&gt;
===support@osbride.com denied to deliver the source code===&lt;br /&gt;
 Forwarded conversation&lt;br /&gt;
 Subject: *Is the source code to build the firmware for the Osbridge 5GXi &lt;br /&gt;
 available?*&lt;br /&gt;
 ------------------------&lt;br /&gt;
 &lt;br /&gt;
 From: *Dieter Hofrichter* &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 Date: Sat, Apr 19, 2008 at 3:34 PM&lt;br /&gt;
 To: support@osbridge.com&lt;br /&gt;
 &lt;br /&gt;
 Dear OSBRiDGE support,&lt;br /&gt;
 is the source code to build the firmware for the Osbridge 5GXi available?&lt;br /&gt;
 Where can I download it?&lt;br /&gt;
 Best regards&lt;br /&gt;
 Dieter&lt;br /&gt;
 ----------&lt;br /&gt;
&lt;br /&gt;
 From: *Leszek Olszewski* &amp;lt;leszek.olszewski@osbridge.com&amp;gt;&lt;br /&gt;
 Date: Sat, Apr 19, 2008 at 9:09 PM&lt;br /&gt;
 To: Dieter Hofrichter &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Hello, &lt;br /&gt;
 &lt;br /&gt;
 We do not provide source code for the firmware.&lt;br /&gt;
 &lt;br /&gt;
 Regards,&lt;br /&gt;
 Leszek Olszewski&lt;br /&gt;
 OSLiNK Sp. z o.o.&lt;br /&gt;
&lt;br /&gt;
===further e-mail conversation with OSLiNK===&lt;br /&gt;
 Leszek Olszewski wrote:&lt;br /&gt;
 &amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Yes, we are still waiting for an advice from our legal counsel regarding this situation.&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; As soon as we get a positive opinion from our legal counsel then we'll post the required parts of   the firmware that is licensed under GPL on our web site (that is Linux Kernel, Busybox and others, if there are any).&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Regards,&lt;br /&gt;
 &amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&lt;br /&gt;
 &amp;gt; Dieter Hofrichter wrote:&lt;br /&gt;
 &amp;gt;&amp;gt; Dear Mr. Olszewski,&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; three weeks passed by and I have heard no news about where I can download the sourcecode for the OSBRiDGE 5GXi.&lt;br /&gt;
 &amp;gt;&amp;gt; Is there any progress?&lt;br /&gt;
 &amp;gt;&amp;gt; Are there any doubts on your side that the firmware contains software with the GPL license and the resulting consequences?&lt;br /&gt;
 &amp;gt;&amp;gt; Why is there still no possibility to download the sourcecode?&lt;br /&gt;
 &amp;gt;&amp;gt; Why do you not mention that the firmware of the OSBRiDGE 5GXi contains software with GPL license on your webpage?&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt; Dieter Hofrichter schrieb:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Dear Mr. Olszewski,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; thank you for your fast reply.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; If you want to verify, that your! devices use code under GPL license you have several  possibilities:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; - Ask your software provider for access to the shell and execute the commands I wrote below (&amp;quot;uname - a&amp;quot; and/or &amp;quot;busybox&amp;quot;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; - go to the webinterface of an OSBRiDGE 5GXi, login as admin and look at the network graphs on  the bottom of the page. You will find on the right edge &amp;quot;RRDTOOL / TOBI OETIKER&amp;quot; -&amp;gt; and on http://oss.oetiker.ch/rrdtool/license.en.html you can find the license of rrd-tools.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Thank you again for your cooperation. We are looking forward to see the sourcecode of the OSBRiDGE 5GXi soon on your web site.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Dieter Hofrichter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; Leszek Olszewski wrote:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Thank You for the notification. We actually use a 3rd party company to provide the software for us and as a rule that software should not contain any code under GPL license if we are not notified about that fact upfront. We have not been notified about that in this case. If you could provide me information on how we can verify this fact ourselves then that'd be really great.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; In any way, we'll seek our legal counsel advice on this situation and if there's no word against it, we'll get all relevant source code released and posted on our web site within next couple of days in order to fully comply with the license terms.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Once again, Thank You for the notification.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter Hofrichter wrote:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ul. Jana PawÄšďż˝a II 6c&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; 89-604 Chojnice&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Poland&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Phone:+48 52 396 25 00 and +48 52 395 12 75&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Fax: +48 52 396 25 01&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Sales E-mail:sales@osbridge.com &amp;lt;mailto:sales@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Skype:osbridge_sales &amp;lt;callto:osbridge_sales&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Support E-mail:support@osbridge.com &amp;lt;mailto:support@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Skype: osbridge_support &amp;lt;callto:osbridge_support&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Repair service E-mail: service@osbridge.com &amp;lt;mailto:service@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; produces a WLAN bridge called OSBRiDGE 5GXi.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; The latest firmware version as of April 20th 2008 is version 4.01R, as binary downloadable from their webpage at http://www.osbridge.com/download/OSBRiDGE_5XLi_4.01R.zip&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; This firmware contains busybox:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; # busybox&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BusyBox v1.01 (2008.04.14-09:29+0000) multi-call binary&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Usage: busybox [function] [arguments]...&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; or: [function] [arguments]...&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; BusyBox is a multi-call binary that combines many common Unix&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; utilities into a single executable. Most people will create a&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; link to busybox for each function they wish to use and BusyBox&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; will act like whatever it was invoked as!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Currently defined functions:&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; [, ash, basename, bunzip2, busybox, bzcat, cat, chmod, cp, cut,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; date, df, echo, expr, getty, grep, head, ifconfig, init, insmod,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ip, kill, killall, linuxrc, logger, ls, lsmod, mkdir, mount, ping,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; printf, ps, rdate, reboot, rm, rmmod, route, sh, sleep, syslogd,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; tail, test, touch, tr, traceroute, udhcpc, uname, uptime, vconfig,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; wget&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; #&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; and the linux kernel&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; # uname -a&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Linux OSBRiDGE 2.6.22.4 #134 Tue Apr 15 21:44:17 CEST 2008 mips unknown&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; but the source code to build the firmware is not available as download. I could not find any copyright notice about GPL anywhere on there webpage.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; I asked via email to support@osbride.com for the source code but got the answer, that the source code is not distributed (see attached email conversation).&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; If you need any further information please don't hesitate to contact me.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards from Vienna&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Forwarded conversation&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Subject: *Is the source code to build the firmware for the Osbridge 5GXi available?*&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ------------------------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; From: *Dieter Hofrichter* &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Date: Sat, Apr 19, 2008 at 3:34 PM&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To: support@osbridge.com&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dear OSBRiDGE support,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; is the source code to build the firmware for the Osbridge 5GXi available?&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Where can I download it?&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Best regards&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Dieter&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ----------&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; From: *Leszek Olszewski* &amp;lt;leszek.olszewski@osbridge.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Date: Sat, Apr 19, 2008 at 9:09 PM&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; To: Dieter Hofrichter &amp;lt;dieter.hofrichter@gmail.com&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Hello,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; We do not provide source code for the firmware.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Regards,&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Leszek Olszewski&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; OSLiNK Sp. z o.o.&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-11-26T01:05:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who is working on what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
Our mission is simple. Build the most scalable and usable routing daemon routing wireless and fixed line segments.&lt;br /&gt;
The routing daemon shall scale up to&lt;br /&gt;
&lt;br /&gt;
# 10000 (10K) nodes and&lt;br /&gt;
# 20000 (20K) routes&lt;br /&gt;
running on low-cost hardware (200 Mhz RISC CPUs / 32MB of memory).&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conformed to the implementation of OLSR from www.olsr.org ('''before''' the OLSR-NG project). OLSR-NG reduced the complexity to the green level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the level of calculating the dijkstra (shortes path) algorithm so far).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For achieving that we first want to&lt;br /&gt;
&lt;br /&gt;
# fix the existing olsrd and add new data structures and algorithms.&lt;br /&gt;
# Once olsrd is running fast we focus on protocol issues like&lt;br /&gt;
## measuring better links metrics, like including the bandwidth (ETT)&lt;br /&gt;
## link-state db synchronization issues (rather then brute force retransmission).&lt;br /&gt;
All protocol extensions shall be documented as an internet-draft and submitted to the IETF MANET working group http://www.ietf.org/html.charters/manet-charter.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next we want to improve the management tools of olsrd like the&lt;br /&gt;
&lt;br /&gt;
# http_info plugin or&lt;br /&gt;
# txt_info plugins or&lt;br /&gt;
# building a new XMLinfo plugin&lt;br /&gt;
&lt;br /&gt;
such that that large clouds consisting of thousands of nodes&lt;br /&gt;
can be troubleshooted in an effective way.&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5.4 was released! Thx everybody a lot! Big credits go out to Hannes and Bernd.&lt;br /&gt;
* UML test server is being worked on. This will allow us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= Sub projects =&lt;br /&gt;
&lt;br /&gt;
==[[SPF refactoring]]==&lt;br /&gt;
==[[LSDB refactoring]]==&lt;br /&gt;
==[[RIB refactoring]]==&lt;br /&gt;
==[[miscellaneous improvements]]==&lt;br /&gt;
==[[UML test server]]==&lt;br /&gt;
==[[Data Structures and Algorithms]]==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org, mailto:hannes@gredler.at or mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
== Bounties ==&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf and get in contact with us directly.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| Aaron&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP/stalled due to work in other areas&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc/free thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid ''malloc()'' and ''free()''. Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch/Hannes Gredler/???&lt;br /&gt;
| supersede all of the ''*_chgestruct()'' functions: All of them are called in exactly one place. So one can inline them there and use the ''pkg_get_*()'' functions to check and use the data. This also avoids more malloc/free thrashing and reduces the amount of code.&lt;br /&gt;
| WIP&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
| theory tells that fibonacci heaps are best, practise tells that an AVL tree as a minheap implementation fits the complexity of frequent re-keyings better&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan, Hannes&lt;br /&gt;
| draft. write a draft about LQ extensions&lt;br /&gt;
| OPEN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, reworked ip address copying and comparison to get it type-safe,&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| LinkQuality / metrics (e.g. ETX/ETT) improvements&lt;br /&gt;
| OPEN/WIP (no code yet committed)&lt;br /&gt;
| evaluate best current practice; &lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| FishEye improvements&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice;&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| effect of OLSR parameters on the mesh&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice; spot and (maybe) eliminate dangers/instabilities&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| selfish nodes / malicious nodes&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| risk assessments&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
* [http://ieeexplore.ieee.org/iel5/7693/4381387/04381410.pdf?isnumber=4381387&amp;amp;prod=JNL&amp;amp;arnumber=4381410&amp;amp;arSt=4014&amp;amp;ared=4024&amp;amp;arAuthor=Hamdaoui%2C+B.%3B+Ramanathan%2C+P. A Cross-Layer Admission Control Framework] for Wireless Ad-Hoc Networks using Multiple Antennas, Bechir Hamdaoui and Parameswaran Ramanathan&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-11-26T01:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who is working on what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
Our mission is simple. Build the most scalable and usable routing daemon routing wireless and fixed line segments.&lt;br /&gt;
The routing daemon shall scale up to&lt;br /&gt;
&lt;br /&gt;
# 10000 (10K) nodes and&lt;br /&gt;
# 20000 (20K) routes&lt;br /&gt;
running on low-cost hardware (200 Mhz RISC CPUs / 32MB of memory).&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conformed to the implementation of OLSR from www.olsr.org ('''before''' the OLSR-NG project). OLSR-NG reduced the complexity to the green level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the level of calculating the dijkstra (shortes path) algorithm so far).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For achieving that we first want to&lt;br /&gt;
&lt;br /&gt;
# fix the existing olsrd and add new data structures and algorithms.&lt;br /&gt;
# Once olsrd is running fast we focus on protocol issues like&lt;br /&gt;
## measuring better links metrics, like including the bandwidth (ETT)&lt;br /&gt;
## link-state db synchronization issues (rather then brute force retransmission).&lt;br /&gt;
All protocol extensions shall be documented as an internet-draft and submitted to the IETF MANET working group http://www.ietf.org/html.charters/manet-charter.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next we want to improve the management tools of olsrd like the&lt;br /&gt;
&lt;br /&gt;
# http_info plugin or&lt;br /&gt;
# txt_info plugins or&lt;br /&gt;
# building a new XMLinfo plugin&lt;br /&gt;
&lt;br /&gt;
such that that large clouds consisting of thousands of nodes&lt;br /&gt;
can be troubleshooted in an effective way.&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5.4 was released! Thx everybody a lot! Big credits go out to Hannes and Bernd.&lt;br /&gt;
* UML test server is being worked on. This will allow us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= Sub projects =&lt;br /&gt;
&lt;br /&gt;
==[[SPF refactoring]]==&lt;br /&gt;
==[[LSDB refactoring]]==&lt;br /&gt;
==[[RIB refactoring]]==&lt;br /&gt;
==[[miscellaneous improvements]]==&lt;br /&gt;
==[[UML test server]]==&lt;br /&gt;
==[[Data Structures and Algorithms]]==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org, mailto:hannes@gredler.at or mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
== Bounties ==&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf and get in contact with us directly.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| Aaron&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP/stalled due to other&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc/free thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid ''malloc()'' and ''free()''. Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch/Hannes Gredler/???&lt;br /&gt;
| supersede all of the ''*_chgestruct()'' functions: All of them are called in exactly one place. So one can inline them there and use the ''pkg_get_*()'' functions to check and use the data. This also avoids more malloc/free thrashing and reduces the amount of code.&lt;br /&gt;
| WIP&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
| theory tells that fibonacci heaps are best, practise tells that an AVL tree as a minheap implementation fits the complexity of frequent re-keyings better&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan, Hannes&lt;br /&gt;
| draft. write a draft about LQ extensions&lt;br /&gt;
| OPEN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, reworked ip address copying and comparison to get it type-safe,&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| LinkQuality / metrics (e.g. ETX/ETT) improvements&lt;br /&gt;
| OPEN/WIP (no code yet committed)&lt;br /&gt;
| evaluate best current practice; &lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| FishEye improvements&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice;&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| effect of OLSR parameters on the mesh&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice; spot and (maybe) eliminate dangers/instabilities&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| selfish nodes / malicious nodes&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| risk assessments&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
* [http://ieeexplore.ieee.org/iel5/7693/4381387/04381410.pdf?isnumber=4381387&amp;amp;prod=JNL&amp;amp;arnumber=4381410&amp;amp;arSt=4014&amp;amp;ared=4024&amp;amp;arAuthor=Hamdaoui%2C+B.%3B+Ramanathan%2C+P. A Cross-Layer Admission Control Framework] for Wireless Ad-Hoc Networks using Multiple Antennas, Bechir Hamdaoui and Parameswaran Ramanathan&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-11-26T01:03:08Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who is working on what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
Our mission is simple. Build the most scalable and usable routing daemon routing wireless and fixed line segments.&lt;br /&gt;
The routing daemon shall scale up to&lt;br /&gt;
&lt;br /&gt;
# 10000 (10K) nodes and&lt;br /&gt;
# 20000 (20K) routes&lt;br /&gt;
running on low-cost hardware (200 Mhz RISC CPUs / 32MB of memory).&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conformed to the implementation of OLSR from www.olsr.org ('''before''' the OLSR-NG project). OLSR-NG reduced the complexity to the green level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the level of calculating the dijkstra (shortes path) algorithm so far).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For achieving that we first want to&lt;br /&gt;
&lt;br /&gt;
# fix the existing olsrd and add new data structures and algorithms.&lt;br /&gt;
# Once olsrd is running fast we focus on protocol issues like&lt;br /&gt;
## measuring better links metrics, like including the bandwidth (ETT)&lt;br /&gt;
## link-state db synchronization issues (rather then brute force retransmission).&lt;br /&gt;
All protocol extensions shall be documented as an internet-draft and submitted to the IETF MANET working group http://www.ietf.org/html.charters/manet-charter.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next we want to improve the management tools of olsrd like the&lt;br /&gt;
&lt;br /&gt;
# http_info plugin or&lt;br /&gt;
# txt_info plugins or&lt;br /&gt;
# building a new XMLinfo plugin&lt;br /&gt;
&lt;br /&gt;
such that that large clouds consisting of thousands of nodes&lt;br /&gt;
can be troubleshooted in an effective way.&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5.4 was released! Thx everybody a lot! Big credits go out to Hannes and Bernd.&lt;br /&gt;
* UML test server is being worked on. This will allow us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= Sub projects =&lt;br /&gt;
&lt;br /&gt;
==[[SPF refactoring]]==&lt;br /&gt;
==[[LSDB refactoring]]==&lt;br /&gt;
==[[RIB refactoring]]==&lt;br /&gt;
==[[miscellaneous improvements]]==&lt;br /&gt;
==[[UML test server]]==&lt;br /&gt;
==[[Data Structures and Algorithms]]==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org, mailto:hannes@gredler.at or mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
== Bounties ==&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides http://marvin.funkfeuer.at/~aaron/olsr-ng.pdf and get in contact with us directly.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| Aaron&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP/stalled due to other&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc/free thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid malloc() and free(). Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch/Hannes Gredler/???&lt;br /&gt;
| supersede all of the *_chgestruct() functions: All of them are called in exactly one place. So one can inline them there and use the pkg_get_* functions to check and use the data. This also avoids more malloc/free thrashing and reduces the amount of code.&lt;br /&gt;
| WIP&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
| theory tells that fibonacci heaps are best, practise tells that an AVL tree as a minheap implementation fits the complexity of frequent re-keyings better&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan, Hannes&lt;br /&gt;
| draft. write a draft about LQ extensions&lt;br /&gt;
| OPEN&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, reworked ip address copying and comparison to get it type-safe,&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| LinkQuality / metrics (e.g. ETX/ETT) improvements&lt;br /&gt;
| OPEN/WIP (no code yet committed)&lt;br /&gt;
| evaluate best current practice; &lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| FishEye improvements&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice;&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| effect of OLSR parameters on the mesh&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| evaluate best current practice; spot and (maybe) eliminate dangers/instabilities&lt;br /&gt;
|-&lt;br /&gt;
| Sebastian Sauer&lt;br /&gt;
| selfish nodes / malicious nodes&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
| risk assessments&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
* [http://ieeexplore.ieee.org/iel5/7693/4381387/04381410.pdf?isnumber=4381387&amp;amp;prod=JNL&amp;amp;arnumber=4381410&amp;amp;arSt=4014&amp;amp;ared=4024&amp;amp;arAuthor=Hamdaoui%2C+B.%3B+Ramanathan%2C+P. A Cross-Layer Admission Control Framework] for Wireless Ad-Hoc Networks using Multiple Antennas, Bechir Hamdaoui and Parameswaran Ramanathan&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:41:10Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid malloc() and free(). Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| Well, the thing doesn't boot ATM. God knows why ....&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/tracing/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the bmf plugin uses it right now, the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** The incoming and outgoing packets are deserialized and serialized via pointers to packed ''struct''s. This is somewhat dangerous as other compilers or the same compielr for other architectures may or may not behave the same. And - '''worse''' - it misleads people to copy the same data various times around or play with pointers so no one can easily see ehat'e going on. I (Bernd) started with a more direct approach in src/lq_packet.c where we have one &amp;quot;unsigned char *&amp;quot; which walks sequentially through the incoming packet and gets the value with small inline functions into where one needs it later on - mostly some simple ''struct'' which is a normal C struct and used by the core code.&lt;br /&gt;
** '''net_outbuffer_push()'' memcpy()es the packet from the caller supplied buffer into another buffer. Well, that's one more copy operation for every outgoinf packet.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:40:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid malloc() and free(). Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| Well, the thing doesn't boot ATM. God knows why ....&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/tracing/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the bmf plugin uses it, the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** The incoming and outgoing packets are deserialized and serialized via pointers to packed ''struct''s. This is somewhat dangerous as other compilers or the same compielr for other architectures may or may not behave the same. And - '''worse''' - it misleads people to copy the same data various times around or play with pointers so no one can easily see ehat'e going on. I (Bernd) started with a more direct approach in src/lq_packet.c where we have one &amp;quot;unsigned char *&amp;quot; which walks sequentially through the incoming packet and gets the value with small inline functions into where one needs it later on - mostly some simple ''struct'' which is a normal C struct and used by the core code.&lt;br /&gt;
** '''net_outbuffer_push()'' memcpy()es the packet from the caller supplied buffer into another buffer. Well, that's one more copy operation for every outgoinf packet.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who is working on what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the LQ-TC and LQ-HELLO input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
| The output side can also be avoid malloc() and free(). Alas, the code is more complicated there.&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
| Well, the thing doesn't boot ATM. God knows why ....&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| Variuos '''Cleanup''' Mini- Projects&lt;br /&gt;
| DONE/WIP&lt;br /&gt;
| reworked floating point ops in src/mantissa.[ch] to minimize run-time impact, fixed dependencies, &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/tracing/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the bmf plugin uses it, the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:33:14Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
|Bernd Petrovitsch&lt;br /&gt;
| rework the TC-LQ input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/tracing/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the bmf plugin uses it, the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:29:28Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
|Bernd Petrovitsch&lt;br /&gt;
| rework the TC-LQ input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the bmf plugin uses it, the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** dependencies do not work - '''done'''&lt;br /&gt;
** merge quagga-svn - '''done'''&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-08-30T16:28:02Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who is working on what? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Comments&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
| OPEN&lt;br /&gt;
| freifunk FW is done by Sven-Ola Tücke, .rpm and .deb by various people on olsr-dev@lists.olsr.org, Windows: ???&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvements&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation, best path selection)&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| rework the logging/tracing/error reporting&lt;br /&gt;
| WIP&lt;br /&gt;
|&lt;br /&gt;
|-|-&lt;br /&gt;
|Bernd Petrovitsch&lt;br /&gt;
| rework the TC-LQ input parsing, avoiding malloc thrashing&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** dependencies do not work - '''done'''&lt;br /&gt;
** merge quagga-svn and svan-ola quagga-patch and test it.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere.&lt;br /&gt;
'''However, practice shows that'''...&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)). Hannes tested the fibheap package from gcc and found out that in our networks (~ 200 nodes) the AVL tree heap implementation still beats the fibonacci heap by 60%. &lt;br /&gt;
&lt;br /&gt;
fibonacci heap:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- SPF-stats for 203 nodes, 335 routes (total/init/run/route/kern/cleanup):,, 237, &lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 337 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 339 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 240,&lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 236, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 341 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 345 routes (total/init/run/route/kern/cleanup):,, 239, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 238, &lt;br /&gt;
                                                                                                                                         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AVL heap:&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 143,&lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 144, &lt;br /&gt;
--- SPF-stats for 203 nodes, 346 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 203 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 145, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 142, &lt;br /&gt;
--- SPF-stats for 202 nodes, 347 routes (total/init/run/route/kern/cleanup):,, 146, &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-07-26T21:38:49Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** dependencies do not work - '''done'''&lt;br /&gt;
** merge quagga-svn and svan-ola quagga-patch and test it.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* &amp;lt;font color=red&amp;gt;especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere&amp;lt;/font&amp;gt;.&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)).&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-07-26T21:37:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** dependencies do not work - &amp;lt;it&amp;gt;done&amp;lt;/it&amp;gt;&lt;br /&gt;
** merge quagga-svn and svan-ola quagga-patch and test it.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* &amp;lt;font color=red&amp;gt;especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere&amp;lt;/font&amp;gt;.&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)).&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!</id>
		<title>Willkommen bei Funkfeuer!</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!"/>
				<updated>2007-07-25T19:08:32Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;WIKI&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Willkommen bei FunkFeuer!&lt;br /&gt;
*** [[Freifunk Firmware|'''Freifunk config &amp;amp; Firmware Tweaking und andere praktische Dinge]]'''&lt;br /&gt;
&lt;br /&gt;
FunkFeuer ist die Plattform unter der in Österreich mehrere freie Netze entstehen bzw. organisiert sind. Die Grundidee dabei ist, dass Mitglieder jeweils einen eigenen Netzwerkknoten basierend auf Wireless-LAN Technologie betreiben und entsprechend dem [http://www.funkfeuer.at/PicoPeeringAgreement.59.0.html PicoPeering Agreement] anderen Netzteilnehmern freien Daten-Transit garantieren. Im Zusammenspiel mit dem dynamischen Routing Protokoll [http://www.olsr.org OLSR] entsteht so relativ einfach ein gemeinschaftliches Netzwerk im Besitz jedes einzelnen Users.&lt;br /&gt;
&lt;br /&gt;
Wenn du Informationen zu FunkFeuer suchst, stehen dir folgende Quellen zur Verfügung:&lt;br /&gt;
&lt;br /&gt;
* Die [http://www.funkfeuer.at Homepage]. Sie ist das &amp;quot;Aushängeschild&amp;quot; des Vereins und stellt Links zu den einzelnen örtlichen Initiativen und den wichtigsten Diensten (hauptsächlich des Wiener Teils) des Vereins zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
* Dieses [http://wiki.funkfeuer.at Wiki]. Es soll eine möglichst umfangreiche technische Dokumentation des Projektes bilden. Teile der Dokumentation ändern sich jedoch läufig. Informationen, die zumindest für einige Wochen bis Monate interessant sind, sind deshalb ebenfalls hier zu finden. Wenn du der Meinung bist, hier etwas beitragen zu können, bist du herzlich eingeladen es jederzeit zu tun. Wenn du dabei vorhandenen Inhalt veränderst oder löschst so schreibe deine Ideen bitte zuerst auf die entsprechende Diskussionsseite und hol auf der Mailingliste (siehe unten) Feedback ein.&lt;br /&gt;
&lt;br /&gt;
* Das [http://forum.funkfeuer.at Forum]. Wenn du Probleme mit der Software oder Fragen zur Konfiguration hast oder neue Ideen intensiv diskutiert werden sollen, ist das Forum die richtige Anlaufstelle dafür.&lt;br /&gt;
&lt;br /&gt;
* Die [https://lists.funkfeuer.at/mailman/listinfo Mailinglisten]. Sie dienen hauptsächlich zur kurzfristigen Kontaktaufnahme, zum Beispiel um Treffen zu vereinbaren, bestimmte Ansprechpartner (z.B. Knotenbesitzer) zu suchen etc. Wenn du Knotenbetreiber bist, wird deine Mail-Adresse auf die Liste gesetzt, so erhältst du automatisch alle wichtigen Nachrichten.&lt;br /&gt;
&lt;br /&gt;
Viel Spaß am sozialen Kontakt mit anderen FunkFeuer-Teilnehmern! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[FunkfeuerBeschreibung|Allgemeines]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* Dokumentation&lt;br /&gt;
** [[Erste Schritte]]&lt;br /&gt;
*** [[Linksys_flashen_mit_OpenWRT,_Freifunk-Firmware_und_retour|Linksys flashen]] &lt;br /&gt;
*** [[Frontend]]&lt;br /&gt;
*** [[Freifunk Firmware|'''Freifunk config &amp;amp; Firmware Tweaking und andere praktische Dinge]]'''&lt;br /&gt;
*** [[Troubleshooting]]&lt;br /&gt;
*** [[VoIP Client Konfiguration]]&lt;br /&gt;
*** [[Alternative Hardware]]&lt;br /&gt;
**** [[OSBRiDGE 5GXi]]&lt;br /&gt;
***** [[5GHz_IP_assignment|5GHz IP assignment]]&lt;br /&gt;
**** [[Buffalo_WHR-G54S]]&lt;br /&gt;
**** [[Fonera]]&lt;br /&gt;
**** [[PCI-Karten]]&lt;br /&gt;
*** [[Tunnel Setup]]&lt;br /&gt;
*** [[Richtfunkstrecken]]&lt;br /&gt;
** [[&amp;quot;Zweite Schritte&amp;quot; - Weitere Möglichkeiten und technische Dinge]]&lt;br /&gt;
** [[MobileNodes]]&lt;br /&gt;
&lt;br /&gt;
* [[Montagstreff]]&lt;br /&gt;
* [[Chat]]&lt;br /&gt;
** [[IRC]] die    [http://de.wikipedia.org/wiki/Wikipedia:Chat Wikipedia und Programme] dazu&lt;br /&gt;
** [[JABBER]]: http://funkfeuer.at/Jabber.340.0.html&lt;br /&gt;
&lt;br /&gt;
* [[unix tips]] small stuff that makes our world go round&lt;br /&gt;
&lt;br /&gt;
* Infrastruktur&lt;br /&gt;
** [[Infrastruktur der einzelnen Knoten]]&lt;br /&gt;
*** [[Muel3|Vorstellung des Knoten Muel3]]&lt;br /&gt;
*** [[ast35|Status Aufbau ast35]]&lt;br /&gt;
*** [[dg16]]&lt;br /&gt;
*** [[kre24]]&lt;br /&gt;
*** ...&lt;br /&gt;
** [[Infrastruktur: Technology Review]]&lt;br /&gt;
** [[Infrastrukture: Blitzschutz/Sturmschutz]]&lt;br /&gt;
** [[Chello und Funkfeuer zusammenrouten|Chello und FunkFeuer zusammenrouten]]&lt;br /&gt;
** [[Kauf-/Tauschplattform]]&lt;br /&gt;
** [[Wlan Antennen/Zubehör Linkz]]&lt;br /&gt;
** [[Hardwareberichte]]&lt;br /&gt;
** [[Housing]]&lt;br /&gt;
** [[OLSR-NG]]&lt;br /&gt;
* [[Arbeitsgruppen]]&lt;br /&gt;
&lt;br /&gt;
* [[Konferenz]]&lt;br /&gt;
&lt;br /&gt;
* Presse - siehe auch http://www.funkfeuer.at/Presse.256.0.html&lt;br /&gt;
** [[KurierArtikel20060802|Artikel im Kurier vom 2.8.2006]]&lt;br /&gt;
** [[Artikel im profil:profil.jpg|Artikel]] im profil über FunkFeuer vom 27. Juni 2005&lt;br /&gt;
** [[Interview|Interview]] mit Armin Medosch im profil vom 2. Juni 2006&lt;br /&gt;
** [http://tema.lo-res.org/~aaron/Breitband-Loch2.pdf  Walter Groebchen's Breitbandloch]&lt;br /&gt;
&lt;br /&gt;
* Theorie&lt;br /&gt;
** [[Signale und Nachrichtentechnik]] Signale und Nachrichtentechnik&lt;br /&gt;
** [[Die Konstruktion der Netzwerk-Allmende]]  Artikel von Armin Medosch&lt;br /&gt;
** [[MIMO]]&lt;br /&gt;
** [[802.11]]&lt;br /&gt;
** [[MANET |mobile ad-hoc networking allgemein]]&lt;br /&gt;
&lt;br /&gt;
* ''Alte Dokumentation, nicht mehr aktuell!''&lt;br /&gt;
** veraltet: [[Firmware Tweaking|Alte Firmware Tweaking und andere praktische Dinge]]&lt;br /&gt;
** veraltet: [[Client IPs und HNA konfigurieren]]&lt;br /&gt;
** veraltet: [[Freifunk Firmware over 0xFF Firmware|Freifunkfirmware über 0xFF Firmware flashen]]&lt;br /&gt;
&lt;br /&gt;
* [[Ideen und Verbesserungsvorschläge]]&lt;br /&gt;
* [[Geschäftsideen]]&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-07-23T09:06:35Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;/tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around.&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;/tt&amp;gt;free()&amp;lt;tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling.&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long and there too many ''olsr_'' perfixed types and functions right now.)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors). ''Work in progress''&lt;br /&gt;
** dependencies do not work&lt;br /&gt;
** merge quagga-svn and svan-ola quagga-patch and test it.&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* &amp;lt;font color=red&amp;gt;especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere&amp;lt;/font&amp;gt;.&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)).&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-07-03T09:58:46Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|200px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* DONE(aka) update texas's BIOS - FIXED &lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| spurious neighbor loss on nodes with high neighbor count&lt;br /&gt;
| OPEN/investigating&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;/tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;/tt&amp;gt;free()&amp;lt;tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors)&lt;br /&gt;
** merge quagga-svn and svan-ola quagga-patch and test it&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Theory section =&lt;br /&gt;
&lt;br /&gt;
== data structures ==&lt;br /&gt;
* [[Wikipedia:Heap (data_structure)|Heap]] ... We need good heaps/priority queues for A*-Search / Dijkstra&lt;br /&gt;
* &amp;lt;font color=red&amp;gt;especially the [[Wikipedia:Fibonacci_heap|Fibonacci Heap]] has a to my knowledge the very best asymptotic complexity of O(1) almost everywhere&amp;lt;/font&amp;gt;.&lt;br /&gt;
Currently as of 0.51pre we use a AVL tree which has complexity O(log(n)).&lt;br /&gt;
&lt;br /&gt;
The following complexities&amp;lt;ref&amp;gt;&lt;br /&gt;
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest (1990): Introduction to algorithms.&lt;br /&gt;
MIT Press / McGraw-Hill.&lt;br /&gt;
&amp;lt;/ref&amp;gt; are worst-case for binary and binomial heaps and [[Wikipedia:Amortized analysis|amortized complexity]] for Fibonacci heap. O(f) gives asymptotic upper bound and Θ(f) is asymptotically tight bound (see [[Wikipedia:Big O notation]]). Function names assume a min-heap.&lt;br /&gt;
&lt;br /&gt;
{|  class=&amp;quot;toccolours&amp;quot; border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; style=&amp;quot;border-collapse:collapse&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#e9e9e9&amp;quot; |&lt;br /&gt;
! Operation &lt;br /&gt;
! [[Wikipedia:Binary heap|Binary]]&lt;br /&gt;
! [[Wikipedia:Binomial heap|Binomial]] &lt;br /&gt;
! [[Wikipedia:Fibonacci heap|Fibonacci]]&lt;br /&gt;
|-&lt;br /&gt;
| createHeap&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| findMin &lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|| O(lg ''n'') or Θ(1)&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| deleteMin &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|-&lt;br /&gt;
| insert &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| decreaseKey &lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|-&lt;br /&gt;
| merge&lt;br /&gt;
|| Θ(''n'')&lt;br /&gt;
|| O(lg ''n'')&lt;br /&gt;
|| Θ(1)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== other interesting data structures not directly related ==&lt;br /&gt;
* [[Wikipedia:Data_Structures]] general overview. Good entry point for trees: [[Wikipedia:Binary_tree]]&lt;br /&gt;
* [http://www.nist.gov/dads/ NIST Directory of Data Structures] has a very extensive overview&lt;br /&gt;
* [http://www.google.com/search?client=safari&amp;amp;rls=en&amp;amp;q=Optimal+Worst-Case+Operations+for+Implicit+Cache-Oblivious+Search+Trees&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8 succinct datastructures (trees)]&lt;br /&gt;
* [http://blogs.msdn.com/devdev/archive/2005/12/05/500171.aspx succinct datastructures overview]&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Trie Tries]&lt;br /&gt;
* [http://www-users.cs.umn.edu/~saad/PS/iter1.pdf sparse matrices]&lt;br /&gt;
* look at [http://users.footprints.net/~kaz/kazlib.html kazlib] from IS-IS ??&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
*[[Wikibooks:Data Structures/Min and Max Heaps|Heaps at wikibooks]]&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-06-23T19:39:14Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|800px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* update texas's BIOS&lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| WIP&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing '''lots of''' &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;s and &amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt;s - use &amp;lt;/tt&amp;gt;ltrace&amp;lt;/tt&amp;gt; to see this.&lt;br /&gt;
*** review &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around&lt;br /&gt;
*** are there very frequently &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;ed and &amp;lt;/tt&amp;gt;free()&amp;lt;tt&amp;gt;d ''struct''? Perhaps a free list can help to avoid lots of &amp;lt;tt&amp;gt;malloc()&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;free()&amp;lt;/tt&amp;gt; handling&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. ''x'' is used for this often as in &amp;lt;tt&amp;gt;xmalloc()&amp;lt;/tt&amp;gt;, ''olsr_'' is IMHO quite long)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors)&lt;br /&gt;
** ....&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-06-23T19:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|800px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* update texas's BIOS&lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| WIP&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing *lots of* malloc()s and free()s - use &amp;quot;ltrace&amp;quot; to see this.&lt;br /&gt;
*** review malloc()/free() if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around&lt;br /&gt;
*** are there very frequently malloc()ed and free() _struct_? Perhaps a free list can help to avoid lots of malloc()/free() handling&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. &amp;quot;x&amp;quot; is used for this often as in _xmalloc()_, &amp;quot;olsr_&amp;quot; is IMHO quite long)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors)&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-06-23T19:34:13Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Who wants to contribute? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|800px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* update texas's BIOS&lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovitsch&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| WIP&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing *lots of* malloc()s and free()s - use &amp;quot;ltrace&amp;quot; to see this.&lt;br /&gt;
*** review malloc()/free() if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around&lt;br /&gt;
*** are there very frequently malloc()ed and free() _struct_? Perhaps a free list can help to avoid lots of malloc()/free() handling&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. &amp;quot;x&amp;quot; is used for this often as in _xmalloc()_)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors)&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2007-06-23T19:24:15Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Next Steps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;google&amp;gt;OLSR&amp;lt;/google&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=  NEWS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;We have released our first set of improvements to the olsrd SPF calculation module.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SPF implementation ==&lt;br /&gt;
When executing the [http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm SPF calculation]&lt;br /&gt;
upon every iteration the least cost path needs to be extracted and put on the result list.&lt;br /&gt;
For that purpose olsrd-current does keep a linear list which has O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] to traverse.&lt;br /&gt;
Every node needs to be visited, which&lt;br /&gt;
has again O(N) [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity]. This results in a total behavior of O(N^2) which can eat a lot&lt;br /&gt;
of CPU where N is large (for example when there are hundreds of olsrd nodes in a network).&lt;br /&gt;
&lt;br /&gt;
== speed by efficient sorting ==&lt;br /&gt;
modern SPF implementations use data structures which are efficient at sorting the preliminary path costs like&lt;br /&gt;
[http://en.wikipedia.org/wiki/Min_heap min_heaps] or [http://en.wikipedia.org/wiki/AVL_tree AVL_trees]. Since olsrd already&lt;br /&gt;
had a nice and efficient AVL tree implementation, the two SPF related data structures (the candidate and path tree) are implemented using&lt;br /&gt;
AVL trees with the path etx metric as the key. Determining the minimal path cost in an AVL tree comes at a cost of O(log(N)) which results&lt;br /&gt;
in a total [http://en.wikipedia.org/wiki/Asymptotic_complexity asymptotic_complexity] of O(N * log(N)), which scales much nicer now in large networks.&lt;br /&gt;
&lt;br /&gt;
== Results ==&lt;br /&gt;
In the [http://www.funkfeuer.at funkfeuer.at] network topology of 190 nodes the raw SPF execution was reduced by 45%. Note that the raw SPF execution represents only about 20% of the CPU cost in a running olsrd. At funkfeuer.at we have observed an overall decrease in the CPU load of about 12% on the embedded routers.&lt;br /&gt;
&lt;br /&gt;
== Outlook ==&lt;br /&gt;
10-20% (depending on network size) in the route-handling module is admittedly not exciting. During refactoring the SPF implementation the olsrd-ng development team, has spotted further bottlenecks in the existing implementation. We are tackling this one by one, and would need active participation of the wireless communities to test our improvements and verify if we have added any undesired regressions. so stay tuned and report bugs to the [mailto:olsr-dev@lists.olsr.org olsrd-dev] mailing list.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
please check out the [http://tema.lo-res.org/~aaron/spf-refactoring.diff.gz patch]&lt;br /&gt;
&lt;br /&gt;
= sponsor =&lt;br /&gt;
&lt;br /&gt;
[[Bild:netideelogo.png|800px|supported by IPA]] made possible by a grant from [http://www.netidee.at IPA].  Thanks we really appreciate your help and your courage to support us!&lt;br /&gt;
&lt;br /&gt;
= main links =&lt;br /&gt;
&lt;br /&gt;
Main OLSR-NG project blog: http://olsr.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
Slides from the OLSR-NG kickoff presentation: http://outpost.funkfeuer.at/~aaron/olsr-ng.pdf&lt;br /&gt;
&lt;br /&gt;
We communicate on the olsr-dev mailinglist: https://www.olsr.org/mailman/listinfo/olsr-dev . All commit messages can be seen on the olsr-cvs list&lt;br /&gt;
&lt;br /&gt;
= Goals =&lt;br /&gt;
&lt;br /&gt;
# Clean up the code of OLSR (http://www.olsr.org), &lt;br /&gt;
# improve the algorithms of OLSR and make it more scalable.&lt;br /&gt;
# Furthermore, produce a new RFC for a (potential) new mesh routing protocol which is based on the experiences of OLSR coding (at the moment the most promising candidate for this RFC is [http://open-mesh.net/batman B.A.T.M.A.N])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLSR-NG is a open source project. Meaning everybody is invited to join in and help. &lt;br /&gt;
We do have some bounties for the best solutions. If you want to participate, drop us an email: mailto:aaron@lo-res.org and mailto:bernd@firmix.at&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
One of the main goals is to make OLSR more scalable '''in practice'''.&lt;br /&gt;
[[Bild:O-Dijkstra.gif|350px|right|Complexity for n=1000 nodes of different data structures in the Dijkstra shortest path (SPF) algorithm. ]]&lt;br /&gt;
&lt;br /&gt;
In the this picture you can see the different complexity graphs for the SPF under the assumption that every node has 10 edges . As you can see, the red line has O(n^2) complexity. This conforms to the current implementation of OLSR from www.olsr.org. OLSR-NG plans to reduce the complexity to the green or even the yellow level. This will allow the mesh network clouds to become larger by a factor ~ 1000 (on the routing layer / layer 3).&lt;br /&gt;
&lt;br /&gt;
= Current Status =&lt;br /&gt;
&lt;br /&gt;
* olsrd 0.5 was released! Thx everybody a lot!&lt;br /&gt;
* UML test server is being worked on. This will allow the B.A.T.M.A.N team to test their protocol and us to test our scalability ideas with 1000nd of olsr instances.&lt;br /&gt;
* Ongoing code cleanups&lt;br /&gt;
* AVL tree optimizations&lt;br /&gt;
&lt;br /&gt;
== [http://www.user-mode-linux.org UML] test server ==&lt;br /&gt;
&lt;br /&gt;
current load and statistics: http://texas.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
[[Bild:Texas.funkfeuer.at.png|right|300px|our UML server]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:Topology-1-small.png|center|600px|topo map 1500 UML instances running in parallel. Note the packetloss!]]&lt;br /&gt;
(check out the [[TopologyPics archive]] also)&lt;br /&gt;
&lt;br /&gt;
topo map 1500 UML instances running in parallel. Note the packetloss! &lt;br /&gt;
&lt;br /&gt;
We have already been running 2000 instances and there was still  plenty of RAM left. So 1000 is a very safe bet. However according to the UML docu we can probably safely assume that we can scale up miuch higher because UML will only take the RAM that each instance actually needs. &lt;br /&gt;
UML actually has other shortcomings: high CPU overhead, lots of context swiches. Trying to increase the performance at the moment...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== current open todos UML server ===&lt;br /&gt;
Next important (*) things to do:&lt;br /&gt;
* update texas's BIOS&lt;br /&gt;
* add the packet loss tc rules (zethix already prepared it)&lt;br /&gt;
* create random netowkrs (easy)&lt;br /&gt;
* create network topologies based on a power law distribution ( a bit harder, but realistic for the internet)&lt;br /&gt;
* DONE(zethix) create scripts to find out which olsrd instances crashed&lt;br /&gt;
* create scripts to find out if a UML instance is not responsive anymore&lt;br /&gt;
* find better measurement tools . Look into sar&lt;br /&gt;
* DONE(aka) recompile host kernel and get rid of the &amp;quot;BUG: soft lockup detected on CPU#0!&amp;quot; messages&lt;br /&gt;
* DONE(aka) recompile host kernel and enable the preemtion patch&lt;br /&gt;
* DONE(zethix,aka) make hostfs so that developers can easily upload a new olsrd version to all uml instances. They should see the difference easily. Look into hostfs&lt;br /&gt;
* DONE(ake) increase performance of the UML simulator itself (decrease HZ, look into SKAS3 patch again, 32 bit recompile, talk with jeff etc)&lt;br /&gt;
* find more meaningful topology visualization tools (http://www.caida.org)&lt;br /&gt;
* add b.a.t.m.a.n to the root filesystem. (?)&lt;br /&gt;
* compare the scheduling / scalability of the test with [http://openvz.org/ OpenVZ] and [http://www.olsr.org/docs/README-Olsr-Switch.html olsr_switch]&lt;br /&gt;
&lt;br /&gt;
=== User HOWTO ===&lt;br /&gt;
&lt;br /&gt;
  NOTE! You are root on the system. Effectively we need lots of sudo privs. So... use it wisely.&lt;br /&gt;
&lt;br /&gt;
# log in&lt;br /&gt;
# make clean&lt;br /&gt;
# edit common.sh and adapt the parameters to your needs&lt;br /&gt;
  #!/bin/sh&lt;br /&gt;
  #&lt;br /&gt;
  # VARS&lt;br /&gt;
  #&lt;br /&gt;
  MAX_INSTANCES=1500&lt;br /&gt;
  ROOT_FS=root_fs&lt;br /&gt;
  NICELVL=&amp;quot;-n 5&amp;quot;&lt;br /&gt;
  u=$USER&lt;br /&gt;
  #SINGLE=1&lt;br /&gt;
We supply you with a good working root filesystem (root_fs) so no need to change that. The SINGLE  parameter just says that you want to start a single instance and be logged in (needed for debugging purposes)&lt;br /&gt;
# the UML instance can read files and programs from &lt;br /&gt;
  $HOME/public_uml/share&lt;br /&gt;
This is where you can put your programs or your version of olsrd (and its libs) or the B.A.T.M.A.N. binaries.&lt;br /&gt;
&lt;br /&gt;
  N.B. This directory is shared between all UML instances that you will &lt;br /&gt;
  start in your simulation, so, they all have read-only access to it. &lt;br /&gt;
  It will appear inside each UML as /mnt/share/. There is also another, &lt;br /&gt;
  per-instance, read-write directory that you can use to save data for &lt;br /&gt;
  later analysis (e.g. redirect olsrd stdout to a file and print some &lt;br /&gt;
  debugging info there). This second directory will be under &lt;br /&gt;
  $HOME/public_uml/exp/&amp;lt;UML IP&amp;gt; (where UML IP is the ip address of each &lt;br /&gt;
  UML instance). It will also appear as /mnt/exp inside UML's environment.&lt;br /&gt;
&lt;br /&gt;
# put your special rcS file into $HOME/public_uml/share/etc/init.d/ . This rcS file will be called from the UML instances /etc/init.d/rcS startup script. Starting olsrd etc must be done from this user supplied rcS. In case there is no user supplied rcS, then the standard olsrd with the standard settings of the root_fs (/etc/olsrd.conf) us started.&lt;br /&gt;
&lt;br /&gt;
# make&lt;br /&gt;
&lt;br /&gt;
This will start the simulation.&lt;br /&gt;
&lt;br /&gt;
  N.B. When the simulation is started, an olsrd instance is started on &lt;br /&gt;
  the host as well. You can use it if you need to interact with the &lt;br /&gt;
  olsrd network - for instance, topology maps are generated through this&lt;br /&gt;
  instance (see below). &lt;br /&gt;
&lt;br /&gt;
# Issuing commands inside UML manually - the 'make' command creates a screen session for every UML process it creates, and redirects its input and output there. You can use screen to attach to a particular session. Use&lt;br /&gt;
  screen -ls              (as root)&lt;br /&gt;
to list all available sessions, and&lt;br /&gt;
  screen -S blabla.10.0.x.y -d -RR&lt;br /&gt;
to attach to a session. This will give you shell access to the system.&lt;br /&gt;
&lt;br /&gt;
  N.B. All modifications to the root filesystem will be preserved only &lt;br /&gt;
  for the duration of the simulation! Once it is stopped, changes will &lt;br /&gt;
  be lost!&lt;br /&gt;
&lt;br /&gt;
# observe the success on http://texas.funkfeuer.at or create a new topo map via ( cd /var/www/topo; ./doit.sh ). If you see a [http://en.wikipedia.org/wiki/Complete_graph complete graph], then your version has little packetloss!&lt;br /&gt;
&lt;br /&gt;
# stop it via &lt;br /&gt;
  make clean &lt;br /&gt;
or &lt;br /&gt;
  make stop&lt;br /&gt;
&lt;br /&gt;
Please make sure (by looking at http://texas.funkfeuer.at) if you are the only person running a simulation at the moment!&lt;br /&gt;
&lt;br /&gt;
'''Some things to note'''&lt;br /&gt;
&lt;br /&gt;
* the topology visualisation scripts run with nice level +5&lt;br /&gt;
the UML instances with nicelevel +10 (see run.sh)&lt;br /&gt;
-&amp;gt; Never ever go higher than nicelevel 0 because then you will disturb the system monitoring (munin) tools and we will not be able to see what the seimulation is doing.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
=== Open questions/bug reports? ===&lt;br /&gt;
&lt;br /&gt;
= Who wants to contribute? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Who is willing to work on something&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Contact info&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| mailto:aaron@lo-res.org&lt;br /&gt;
|-&lt;br /&gt;
| Roman Steiner&lt;br /&gt;
| mailto:roman.steiner@gmx.at&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Petrovich&lt;br /&gt;
| mailto:bernd@firmix.at&lt;br /&gt;
|-&lt;br /&gt;
| Andrej Rursev (zethix)&lt;br /&gt;
| mailto:zethix@gmail.com&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| mailto:hannes@gredler.at&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Who is working on what? =&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;80%&amp;quot; class=&amp;quot;events&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!align=&amp;quot;left&amp;quot;  | Who&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | What&lt;br /&gt;
!align=&amp;quot;left&amp;quot; | Status&lt;br /&gt;
|-  class=&amp;quot;oeffentlich&amp;quot;&lt;br /&gt;
| Bernd Petrovitsch, Thomas Lopatic, Hannes Gredler&lt;br /&gt;
| release 0.5&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| release 0.5 make packages for  freifunk FW, DD-WRT, etc, windows (XP, Vista), ... and test them&lt;br /&gt;
|  OPEN&lt;br /&gt;
|-&lt;br /&gt;
| ???&lt;br /&gt;
| analyze IP autoconfig mechanisms and find the best one&lt;br /&gt;
| OPEN&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| tcpdump parses olsr packets, &lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| SPF improvments&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| reduce malloc thrashing during SPF computation&lt;br /&gt;
| not yet started&lt;br /&gt;
|-&lt;br /&gt;
| Hannes Gredler&lt;br /&gt;
| improve post-SPF handling (route table conciliation)&lt;br /&gt;
| WIP&lt;br /&gt;
|- &lt;br /&gt;
| Aaron Kaplan,Bernd Petrovitsch&lt;br /&gt;
| olsr-ng test server&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Aaron Kaplan&lt;br /&gt;
| theory, complexity analysis. Goal: find the best complexity on the algorithmic side.&lt;br /&gt;
| DONE&lt;br /&gt;
|-&lt;br /&gt;
| Zethix, Aaron Kaplan&lt;br /&gt;
| UML cluster setup&lt;br /&gt;
| WIP, currently we can start around 2000 UML instances. But the uml_switch software still drops packets between virtual interfaces. http://www.openvz.org seems also like a promising solution&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mm&amp;gt;[[olsr-ng.mm|flash]]&amp;lt;/mm&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
contact mailto:aaron@lo-res.org  or Bernd if you are interested in participating!&lt;br /&gt;
&lt;br /&gt;
= Next Steps =&lt;br /&gt;
&lt;br /&gt;
* TU Wien lecture [http://tuwis.tuwien.ac.at/lva/tuwien/384090 &amp;quot;Verteilte systeme&amp;quot;], 20.4.2007 will present our ideas about optimizing complexity. Aaron also wants to adress more students from the TU to participate. DONE. Let's see if new participants want to join.&lt;br /&gt;
* finalize the UML test server&lt;br /&gt;
* try out the optimization ideas and document the speedup&lt;br /&gt;
* more cleanups&lt;br /&gt;
** olsrd is doing *lots of* malloc()s and free()s - use &amp;quot;ltrace&amp;quot; to see this.&lt;br /&gt;
*** review malloc()/free() if it theys are superflous and can be implemented with buffers on the stack or just moving pointers around&lt;br /&gt;
*** are there very frequently malloc()ed and free() _struct_? Perhaps a free list can help to avoid lots of malloc()/free() handling&lt;br /&gt;
** we have several coding styles in there&lt;br /&gt;
** add wrappers to hide type casts for Windows (and perhaps others). Reserve some prefix (e.g. &amp;quot;x&amp;quot; is used for this often as in _xmalloc()_)&lt;br /&gt;
** fixup error reporting/logging&lt;br /&gt;
** add synchronization and make the daemon multi-threading (e.g. the httpinfo plugin could benefit from such a thing)&lt;br /&gt;
** make the parameter parsing of the plugins more consistent (some are case-sensitive, some are not, most do not check syntax errors)&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
= Bounties =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
please take a look at the slides and get in contact with us directly at the moment!&lt;br /&gt;
&lt;br /&gt;
= Source code =&lt;br /&gt;
* CVS repos:  &lt;br /&gt;
  (as user &amp;quot;ipo23&amp;quot; ) &lt;br /&gt;
     export CVS_RSH=ssh&lt;br /&gt;
     cvs -z3 -d:ext:ipo23@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
  as anonymous user) &lt;br /&gt;
      cvs -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd login &lt;br /&gt;
      cvs -z3 -d:pserver:anonymous@olsrd.cvs.sourceforge.net:/cvsroot/olsrd co -P olsrd-current&lt;br /&gt;
&lt;br /&gt;
= Links =&lt;br /&gt;
== Papers, Theory ==&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: the &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
** http://olsrv2.online.fr/blog/ OLSRv2 Development Blog&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
* [http://folk.uio.no/kenneho/index.php?page=studies&amp;amp;subpage=wospf WOSPF-OR] Uni Oslo Wireless OSPF with Overlapping Relays&lt;br /&gt;
* [http://hipserver.mct.phantomworks.org/ietf/ospf/ W-OSPF] INRA/Boing Wireless OSPF&lt;br /&gt;
&lt;br /&gt;
== misc ==&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;br /&gt;
* NATO C3 Agency (NC3A) Radio Protocols Lab https://elayne.nc3a.nato.int/&lt;br /&gt;
* commercial INRIA HIPERCOM spin-off http://www.luceor.com/&lt;br /&gt;
* commercial MIT Roofnet spin-off http://www.meraki.net/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-04-24T12:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Grundlegendes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
   Beispiel:&lt;br /&gt;
   &lt;br /&gt;
   eth0:     193.238.156.126&lt;br /&gt;
   tap0:     193.238.157.127&lt;br /&gt;
   tapX:     193.238.158.128&lt;br /&gt;
   sandwich: 193.239.188.20&lt;br /&gt;
   port:     5026&lt;br /&gt;
   &lt;br /&gt;
      ((Oo.oO))     ((Oo.oO))&lt;br /&gt;
          v             v&lt;br /&gt;
    eth0-&amp;gt; \           /                    sandwich:5026      #---&amp;lt;-&amp;gt; 0xFF 193.238.156.0/22&lt;br /&gt;
            \_________/                       |  ____________ /&lt;br /&gt;
            | linksys |                       \ |            /|&lt;br /&gt;
            |         |         openvpn        \|           / |&lt;br /&gt;
            |____tap0============================tapX &amp;lt;-&amp;gt;OLSR |&lt;br /&gt;
                  |                             |___________\_|&lt;br /&gt;
                  |                                          \         &lt;br /&gt;
                OLSR routed!                                  #---&amp;lt;--&amp;gt; internet 0.0.0.0/0&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Im [https://marvin.funkfeuer.at/frontend_wien/ Funkfeuer Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file richtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-02-08T09:21:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Redeemer] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file richtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:55:35Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* FAQs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file richtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:55:24Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* FAQs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file richtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://dg38v13.funkfeuer.at dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:53:39Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* AbschluÃ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file richtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:52:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am ''sandwich.funkfeuer.at'' heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file fichtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:51:20Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Node-seitig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, um Routingprobleme möglichts zu vermeiden. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am sandwich.funkfeuer.at heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file fichtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2007-01-29T13:49:00Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* Grundlegendes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare (sogenannte) Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, weil es sonst Routingprobleme gibt. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am sandwich.funkfeuer.at heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
entweder dem OLSRd direkt mitteilen, dass er nun auch auf dem Tunnelinterface lauschen soll mit&lt;br /&gt;
 olsrd -i tap0&lt;br /&gt;
bei 1.2.5 hat mir (datacop) damit der olsrd automatisch auch das config file fichtig verändert, somit muss man das nach jedem neustarten nicht nochmal eingeben, wie das bei neueren Versionen ist weis ich (noch) nicht wie das ist&lt;br /&gt;
&lt;br /&gt;
wenn es nicht funktioniert kann man noch immer das local.olsrd.conf file ändern wie folgt:&lt;br /&gt;
 # Add your addons (e.g. plugins) to olsrd.conf here,&lt;br /&gt;
 # addons for interfaces in /etc/local.olsrd.conf.eth1&lt;br /&gt;
 Interface &amp;quot;tap0&amp;quot;&lt;br /&gt;
 {&lt;br /&gt;
         HelloInterval           5.0&lt;br /&gt;
         HelloValidityTime       90.0&lt;br /&gt;
         TcInterval              2.0&lt;br /&gt;
         TcValidityTime          270.0&lt;br /&gt;
         MidInterval             15.0&lt;br /&gt;
         MidValidityTime         90.0&lt;br /&gt;
         HnaInterval             15.0&lt;br /&gt;
         HnaValidityTime         90.0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;br /&gt;
&lt;br /&gt;
 datacop meint: ich habe das dadurch (anscheinend) gelöst, dass ich nicht ein NAT in alle Netze mache, sondern nur in das Heimnetz,&lt;br /&gt;
 dadurch kann er nicht die direkte route nehmen, sondern muss über die sandwich-default-route gehen.&lt;br /&gt;
 [http://2dg38v13.funkfeuer.at 2dg38v13.funkfeuer.at] ist von aussen über dg38v13.funkfeuer.at ansprechbar.&lt;br /&gt;
 &amp;lt;strong&amp;gt;hat jemand mehr Erfahrung damit??&amp;lt;/strong&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-30T12:05:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ist jetzt auf [[olsrd-ng]] zu finden!&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!</id>
		<title>Willkommen bei Funkfeuer!</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!"/>
				<updated>2006-10-30T12:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Willkommen - Die Funkfeuer-Homepage findet sich unter http://www.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
   --&amp;gt; WICHTIG! Die aktuellsten infos sind immer auf der [https://lists.funkfeuer.at/mailman/listinfo mailingliste]!&lt;br /&gt;
   Bei Fragen, bitte dort nachfragen. Hier tendiert immer alles , etwas schnell&lt;br /&gt;
   zu veraltern. &lt;br /&gt;
       &lt;br /&gt;
 wichtig [https://wiki.funkfeuer.at/index.php/Ideen_und_Verbesserungsvorschl%C3%A4ge#L.C3.B6sung_des_BSSID-Split_Problems     Lösung des BSSID-Split Problems]&lt;br /&gt;
&lt;br /&gt;
FunkFeuer ist die Plattform unter der ein Freies Netz (in Wien) entsteht bzw. organisiert ist. Die Grundidee dabei ist, dass Mitglieder jeweils einen eigenen Netzwerkknoten basierend auf 802.11b/g/a Technologie (aber auch andere frei nutzbare Übertragungstechnologien wie FSO usw.) betreiben und entsprechend dem PicoPeering Agreement freien Daten-Transit garantieren.&lt;br /&gt;
Im Zusammenspiel mit dem dynamischen Routing Protokoll OLSR ( http://www.olsr.org ) entsteht so relativ einfach ein gemeinschaftliches Netzwerk im Besitz der User!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Wiki steht allen Besuchern zur Information zur Verfügung. Es ist möglich und sogar erwünscht, dass jeder der vorbeischaut (egal ob angemeldet oder nicht) seinen Senf dazugibt, damit eine möglichst komplette Dokumentation entsteht. Einfach oben eine Idee in die '''Diskussion''' schreiben oder die Seite '''bearbeiten'''. &lt;br /&gt;
&lt;br /&gt;
* [[FunkfeuerBeschreibung|Allgemeines]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* Dokumentation&lt;br /&gt;
** [[Erste Schritte]]&lt;br /&gt;
*** [[Client IPs und HNA konfigurieren]]&lt;br /&gt;
*** [[Troubleshooting]]&lt;br /&gt;
*** [[Freifunk Firmware|'''Freifunk config &amp;amp; Firmware Tweaking und andere praktische Dinge]]'''&lt;br /&gt;
*** [[Freifunk Firmware over 0xFF Firmware|Freifunkfirmware über 0xFF Firmware flashen]]&lt;br /&gt;
*** [[Alternative Hardware]]&lt;br /&gt;
*** [[Tunnel Setup]]&lt;br /&gt;
*** [[Richtfunkstrecken]]&lt;br /&gt;
** [[&amp;quot;Zweite Schritte&amp;quot; - Weitere Möglichkeiten und technische Dinge]]&lt;br /&gt;
**[[Frontend]]&lt;br /&gt;
**[[MobileNodes]]&lt;br /&gt;
**[[OSBRiDGE 5GXi]]&lt;br /&gt;
***[[5GHz_IP_assignment|5GHz IP assignment]]&lt;br /&gt;
*** obsolet: [[Firmware Tweaking|Alte Firmware Tweaking und andere praktische Dinge]]&lt;br /&gt;
&lt;br /&gt;
* [[Konferenz]]&lt;br /&gt;
&lt;br /&gt;
* [[Chat]]&lt;br /&gt;
** [[IRC]] die    [http://de.wikipedia.org/wiki/Wikipedia:Chat Wikipedia und Programme] dazu&lt;br /&gt;
** [[JABBER]]: http://funkfeuer.at/Jabber.340.0.html&lt;br /&gt;
&lt;br /&gt;
* Infrastruktur&lt;br /&gt;
** [[Infrastruktur der einzelnen Knoten]]&lt;br /&gt;
*** [[Muel3|Vorstellung des Knoten Muel3]]&lt;br /&gt;
*** [[ast35|Status Aufbau ast35]]&lt;br /&gt;
*** ...&lt;br /&gt;
** [[Infrastruktur: Technology Review]]&lt;br /&gt;
** [[Infrastrukture: Blitzschutz/Sturmschutz]]&lt;br /&gt;
** [[Chello und Funkfeuer zusammenrouten]]&lt;br /&gt;
** [[Kauf-/Tauschplattform]]&lt;br /&gt;
** [[Wlan Antennen/Zubehör Linkz]]&lt;br /&gt;
** [[Hardwareberichte]]&lt;br /&gt;
** [[Housing]]&lt;br /&gt;
** [[olsrd-ng]]&lt;br /&gt;
* [[Arbeitsgruppen]]&lt;br /&gt;
&lt;br /&gt;
* Presse&lt;br /&gt;
** [[KurierArtikel20060802|Artikel im Kurier vom 2.8.2006]]&lt;br /&gt;
** [[Artikel im profil:profil.jpg|Artikel]] im profil über FunkFeuer vom 27. Juni 2005&lt;br /&gt;
** [[Interview|Interview]] mit Armin Medosch im profil vom 2. Juni 2006&lt;br /&gt;
** [http://tema.lo-res.org/~aaron/Breitband-Loch2.pdf  Walter Groebchen's Breitbandloch]&lt;br /&gt;
&lt;br /&gt;
* Theorie&lt;br /&gt;
** [[Signale und Nachrichtentechnik]] Signale und Nachrichtentechnik&lt;br /&gt;
** [[Die Konstruktion der Netzwerk-Allmende]]  Artikel von Armin Medosch&lt;br /&gt;
** [[MIMO]]&lt;br /&gt;
** [[802.11]]&lt;br /&gt;
** [[MANET |mobile ad-hoc networking allgemein]]&lt;br /&gt;
&lt;br /&gt;
* [[Ideen und Verbesserungsvorschläge]]&lt;br /&gt;
* [[Geschäftsideen]]&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2006-10-30T12:03:29Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== olsrd-ng ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: der &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-olsrv2-02.txt&lt;br /&gt;
** http://www.ietf.org/internet-drafts/draft-ietf-manet-packetbb-02.txt&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/OLSR-NG</id>
		<title>OLSR-NG</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/OLSR-NG"/>
				<updated>2006-10-30T11:59:24Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== olsrd-ng ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: der &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!</id>
		<title>Willkommen bei Funkfeuer!</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!"/>
				<updated>2006-10-30T11:58:40Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Willkommen - Die Funkfeuer-Homepage findet sich unter http://www.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
   --&amp;gt; WICHTIG! Die aktuellsten infos sind immer auf der [https://lists.funkfeuer.at/mailman/listinfo mailingliste]!&lt;br /&gt;
   Bei Fragen, bitte dort nachfragen. Hier tendiert immer alles , etwas schnell&lt;br /&gt;
   zu veraltern. &lt;br /&gt;
       &lt;br /&gt;
 wichtig [https://wiki.funkfeuer.at/index.php/Ideen_und_Verbesserungsvorschl%C3%A4ge#L.C3.B6sung_des_BSSID-Split_Problems     Lösung des BSSID-Split Problems]&lt;br /&gt;
&lt;br /&gt;
FunkFeuer ist die Plattform unter der ein Freies Netz (in Wien) entsteht bzw. organisiert ist. Die Grundidee dabei ist, dass Mitglieder jeweils einen eigenen Netzwerkknoten basierend auf 802.11b/g/a Technologie (aber auch andere frei nutzbare Übertragungstechnologien wie FSO usw.) betreiben und entsprechend dem PicoPeering Agreement freien Daten-Transit garantieren.&lt;br /&gt;
Im Zusammenspiel mit dem dynamischen Routing Protokoll OLSR ( http://www.olsr.org ) entsteht so relativ einfach ein gemeinschaftliches Netzwerk im Besitz der User!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Wiki steht allen Besuchern zur Information zur Verfügung. Es ist möglich und sogar erwünscht, dass jeder der vorbeischaut (egal ob angemeldet oder nicht) seinen Senf dazugibt, damit eine möglichst komplette Dokumentation entsteht. Einfach oben eine Idee in die '''Diskussion''' schreiben oder die Seite '''bearbeiten'''. &lt;br /&gt;
&lt;br /&gt;
* [[FunkfeuerBeschreibung|Allgemeines]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* Dokumentation&lt;br /&gt;
** [[Erste Schritte]]&lt;br /&gt;
*** [[Client IPs und HNA konfigurieren]]&lt;br /&gt;
*** [[Troubleshooting]]&lt;br /&gt;
*** [[Freifunk Firmware|'''Freifunk config &amp;amp; Firmware Tweaking und andere praktische Dinge]]'''&lt;br /&gt;
*** [[Freifunk Firmware over 0xFF Firmware|Freifunkfirmware über 0xFF Firmware flashen]]&lt;br /&gt;
*** [[Alternative Hardware]]&lt;br /&gt;
*** [[Tunnel Setup]]&lt;br /&gt;
*** [[Richtfunkstrecken]]&lt;br /&gt;
** [[&amp;quot;Zweite Schritte&amp;quot; - Weitere Möglichkeiten und technische Dinge]]&lt;br /&gt;
**[[Frontend]]&lt;br /&gt;
**[[MobileNodes]]&lt;br /&gt;
**[[OSBRiDGE 5GXi]]&lt;br /&gt;
***[[5GHz_IP_assignment|5GHz IP assignment]]&lt;br /&gt;
*** obsolet: [[Firmware Tweaking|Alte Firmware Tweaking und andere praktische Dinge]]&lt;br /&gt;
&lt;br /&gt;
* [[Konferenz]]&lt;br /&gt;
&lt;br /&gt;
* [[Chat]]&lt;br /&gt;
** [[IRC]] die    [http://de.wikipedia.org/wiki/Wikipedia:Chat Wikipedia und Programme] dazu&lt;br /&gt;
** [[JABBER]]: http://funkfeuer.at/Jabber.340.0.html&lt;br /&gt;
&lt;br /&gt;
* Infrastruktur&lt;br /&gt;
** [[Infrastruktur der einzelnen Knoten]]&lt;br /&gt;
*** [[Muel3|Vorstellung des Knoten Muel3]]&lt;br /&gt;
*** [[ast35|Status Aufbau ast35]]&lt;br /&gt;
*** ...&lt;br /&gt;
** [[Infrastruktur: Technology Review]]&lt;br /&gt;
** [[Infrastrukture: Blitzschutz/Sturmschutz]]&lt;br /&gt;
** [[Chello und Funkfeuer zusammenrouten]]&lt;br /&gt;
** [[Kauf-/Tauschplattform]]&lt;br /&gt;
** [[Wlan Antennen/Zubehör Linkz]]&lt;br /&gt;
** [[Hardwareberichte]]&lt;br /&gt;
** [[Housing]]&lt;br /&gt;
** [[olsrd]]&lt;br /&gt;
** [[olsrd-ng]]&lt;br /&gt;
* [[Arbeitsgruppen]]&lt;br /&gt;
&lt;br /&gt;
* Presse&lt;br /&gt;
** [[KurierArtikel20060802|Artikel im Kurier vom 2.8.2006]]&lt;br /&gt;
** [[Artikel im profil:profil.jpg|Artikel]] im profil über FunkFeuer vom 27. Juni 2005&lt;br /&gt;
** [[Interview|Interview]] mit Armin Medosch im profil vom 2. Juni 2006&lt;br /&gt;
** [http://tema.lo-res.org/~aaron/Breitband-Loch2.pdf  Walter Groebchen's Breitbandloch]&lt;br /&gt;
&lt;br /&gt;
* Theorie&lt;br /&gt;
** [[Signale und Nachrichtentechnik]] Signale und Nachrichtentechnik&lt;br /&gt;
** [[Die Konstruktion der Netzwerk-Allmende]]  Artikel von Armin Medosch&lt;br /&gt;
** [[MIMO]]&lt;br /&gt;
** [[802.11]]&lt;br /&gt;
** [[MANET |mobile ad-hoc networking allgemein]]&lt;br /&gt;
&lt;br /&gt;
* [[Ideen und Verbesserungsvorschläge]]&lt;br /&gt;
* [[Geschäftsideen]]&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-30T11:56:58Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== olsrd-ng ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: der &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:29:19Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: der &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:25:38Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]: der &amp;quot;OLSR RFC&amp;quot;&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:25:11Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective&lt;br /&gt;
   will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability&lt;br /&gt;
   and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate&lt;br /&gt;
   nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:24:38Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
   AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:23:56Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
&amp;lt;blockquote&amp;gt;AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:23:43Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:23:31Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:22:06Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:21:18Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-11T21:20:54Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
* http://www.adhocsys.org/&lt;br /&gt;
--[[Benutzer:Bernd|Bernd]] 23:20, 11. Okt 2006 (CEST)&lt;br /&gt;
AdHocSys is a two-year European project to provide reliable broadband services in rural and mountain regions. This objective will be achieved by means of the creation of a wireless ad hoc broadband network, with special enhancements to reliability and availability. The network consists of one or several gateways connecting to the global Internet and several intermediate nodes which provide multihop connections between the gateways and end users.&lt;br /&gt;
--[[Benutzer:Bernd|Bernd]] 23:20, 11. Okt 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-09T09:06:38Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 01 at hipercom]&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-09T09:06:05Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=60&amp;amp;Itemid=50 OLSR-v2 Draft 1]&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-09T09:02:57Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006]&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-09T09:02:40Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* [http://www.lix.polytechnique.fr/hipercom/index.php?option=com_content&amp;amp;task=view&amp;amp;id=152&amp;amp;Itemid=1 Workshop at Hipercom Oct 2006&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Olsrd</id>
		<title>Olsrd</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Olsrd"/>
				<updated>2006-10-09T08:53:45Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{olsrd_Navigation}}&lt;br /&gt;
&lt;br /&gt;
== olsrd ==&lt;br /&gt;
&lt;br /&gt;
=== Papers, Theorie ===&lt;br /&gt;
* [http://ietfreport.isoc.org/idref/rfc3626/ RFC-3626]&lt;br /&gt;
* http://www.lix.polytechnique.fr/hipercom/index.php?option=com_frontpage&amp;amp;Itemid=1&lt;br /&gt;
&lt;br /&gt;
=== Sonstiges===&lt;br /&gt;
* Homepage: http://www.olsr.org/&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!</id>
		<title>Willkommen bei Funkfeuer!</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Willkommen_bei_Funkfeuer!"/>
				<updated>2006-10-09T08:50:13Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Willkommen - Die Funkfeuer-Homepage findet sich unter http://www.funkfeuer.at&lt;br /&gt;
&lt;br /&gt;
   --&amp;gt; WICHTIG! Die aktuellsten infos sind immer auf der [https://lists.funkfeuer.at/mailman/listinfo mailingliste]!&lt;br /&gt;
   Bei Fragen, bitte dort nachfragen. Hier tendiert immer alles , etwas schnell&lt;br /&gt;
   zu veraltern. &lt;br /&gt;
       &lt;br /&gt;
 wichtig [https://wiki.funkfeuer.at/index.php/Ideen_und_Verbesserungsvorschl%C3%A4ge#L.C3.B6sung_des_BSSID-Split_Problems     Lösung des BSSID-Split Problems]&lt;br /&gt;
&lt;br /&gt;
FunkFeuer ist die Plattform unter der ein Freies Netz (in Wien) entsteht bzw. organisiert ist. Die Grundidee dabei ist, dass Mitglieder jeweils einen eigenen Netzwerkknoten basierend auf 802.11b/g/a Technologie (aber auch andere frei nutzbare Übertragungstechnologien wie FSO usw.) betreiben und entsprechend dem PicoPeering Agreement freien Daten-Transit garantieren.&lt;br /&gt;
Im Zusammenspiel mit dem dynamischen Routing Protokoll OLSR ( http://www.olsr.org ) entsteht so relativ einfach ein gemeinschaftliches Netzwerk im Besitz der User!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dieser Wiki steht allen Besuchern zur Information zur Verfügung. Es ist möglich und sogar erwünscht, dass jeder der vorbeischaut (egal ob angemeldet oder nicht) seinen Senf dazugibt, damit eine möglichst komplette Dokumentation entsteht. Einfach oben eine Idee in die '''Diskussion''' schreiben oder die Seite '''bearbeiten'''. &lt;br /&gt;
&lt;br /&gt;
* [[FunkfeuerBeschreibung|Allgemeines]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[Chat]]&lt;br /&gt;
** [[IRC]] die    [http://de.wikipedia.org/wiki/Wikipedia:Chat Wikipedia und Programme] dazu&lt;br /&gt;
** [[JABBER]]: http://funkfeuer.at/Jabber.340.0.html&lt;br /&gt;
* [[ToDo| TODOs, deine Chance, mitzuhelfen!]]&lt;br /&gt;
* Dokumentation&lt;br /&gt;
** [[Erste Schritte]]&lt;br /&gt;
*** [[Client IPs und HNA konfigurieren]]&lt;br /&gt;
*** [[Troubleshooting]]&lt;br /&gt;
*** [[Freifunk Firmware|'''Freifunk config &amp;amp; Firmware Tweaking und andere praktische Dinge]]'''&lt;br /&gt;
*** [[Freifunk Firmware over 0xFF Firmware|Freifunkfirmware über 0xFF Firmware flashen]]&lt;br /&gt;
*** [[Alternative Hardware]]&lt;br /&gt;
*** [[Tunnel Setup]]&lt;br /&gt;
*** [[Richtfunkstrecken]]&lt;br /&gt;
** [[&amp;quot;Zweite Schritte&amp;quot; - Weitere Möglichkeiten und technische Dinge]]&lt;br /&gt;
**[[Frontend]]&lt;br /&gt;
**[[MobileNodes]]&lt;br /&gt;
**[[OSBRiDGE 5GXi]]&lt;br /&gt;
***[[5GHz_IP_assignment|5GHz IP assignment]]&lt;br /&gt;
*** obsolet: [[Firmware Tweaking|Alte Firmware Tweaking und andere praktische Dinge]]&lt;br /&gt;
* [[Konferenz]]&lt;br /&gt;
* Infrastruktur&lt;br /&gt;
** [[Infrastruktur der einzelnen Knoten]]&lt;br /&gt;
*** [[Muel3|Vorstellung des Knoten Muel3]]&lt;br /&gt;
*** [[ast35|Status Aufbau ast35]]&lt;br /&gt;
*** ...&lt;br /&gt;
** [[Infrastruktur: Technology Review]]&lt;br /&gt;
** [[Infrastrukture: Blitzschutz/Sturmschutz]]&lt;br /&gt;
** [[Chello und Funkfeuer zusammenrouten]]&lt;br /&gt;
** [[Kauf-/Tauschplattform]]&lt;br /&gt;
** [[Wlan Antennen/Zubehör Linkz]]&lt;br /&gt;
** [[Hardwareberichte]]&lt;br /&gt;
** [[Housing]]&lt;br /&gt;
** [[olsrd]]&lt;br /&gt;
* [[Arbeitsgruppen]]&lt;br /&gt;
&lt;br /&gt;
* Presse&lt;br /&gt;
** [[KurierArtikel20060802|Artikel im Kurier vom 2.8.2006]]&lt;br /&gt;
** [[Artikel im profil:profil.jpg|Artikel]] im profil über FunkFeuer vom 27. Juni 2005&lt;br /&gt;
** [[Interview|Interview]] mit Armin Medosch im profil vom 2. Juni 2006&lt;br /&gt;
** [http://tema.lo-res.org/~aaron/Breitband-Loch2.pdf  Walter Groebchen's Breitbandloch]&lt;br /&gt;
&lt;br /&gt;
* Theorie&lt;br /&gt;
** [[Signale und Nachrichtentechnik]] Signale und Nachrichtentechnik&lt;br /&gt;
** [[Die Konstruktion der Netzwerk-Allmende]]  Artikel von Armin Medosch&lt;br /&gt;
** [[MIMO]]&lt;br /&gt;
** [[802.11]]&lt;br /&gt;
** [[MANET |mobile ad-hoc networking allgemein]]&lt;br /&gt;
&lt;br /&gt;
* [[Ideen und Verbesserungsvorschläge]]&lt;br /&gt;
* [[Geschäftsideen]]&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	<entry>
		<id>https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup</id>
		<title>Tunnel Setup</title>
		<link rel="alternate" type="text/html" href="https://oldwiki.funkfeuer.at/wiki/Tunnel_Setup"/>
				<updated>2006-09-06T21:53:34Z</updated>
		
		<summary type="html">&lt;p&gt;Bernd: /* FAQs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wie setz' ich eine Tunnel auf?&lt;br /&gt;
&lt;br /&gt;
== Grundlegendes ==&lt;br /&gt;
&lt;br /&gt;
* Wozu ein Tunnel?&lt;br /&gt;
** Primär um anders nicht erreichbare Teile des Netzes über das Internet anzubinden, z.B. funkmäßig nicht erreichbare Inseln.&lt;br /&gt;
** Aber auch um redundante Verbindungen zu schaffen.&lt;br /&gt;
&lt;br /&gt;
* Was wird eingesetzt?&lt;br /&gt;
** [http://www.openvpn.net/ OpenVPN] ist die Implementierung der Wahl. Es kann alles, was man brauchen kann, ist leidlich einfach aufgesetzt und es existieren Implementierungen für alle relevante Betriebssysteme.&lt;br /&gt;
** Als Routing-Deamon wird [http://www.olsr.org/ olsrd] eingesetzt. Das hat mit [http://www.openvpn.net/ OpenVPN] nur insoweit etwas zu tun, als daß wir &amp;quot;tap&amp;quot; Interfaces verwenden (müssen), damit der [http://www.olsr.org/ olsrd] drüber broadcasten kann.&lt;br /&gt;
&lt;br /&gt;
* Wie funktioniert das?&lt;br /&gt;
** Ein Tunnelendpunkt ist konkret am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (genauer: 193.239.188.20), der andere auf einem beliebigen lokalen Host. Die einzige Voraussetzung ist eine &amp;quot;normale&amp;quot; Internet-Verbindung vom Host zu &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; (bzw. eigentlich 193.239.188.20). Dabei sind ppp, Masquerading/NAT und ähnliche Besonderheiten kein Problem oder besondere Einschränkung.&lt;br /&gt;
&lt;br /&gt;
* Sonstiges&lt;br /&gt;
** Der Tunnel ist ein unverschlüsselter IP-Tunnel, d.h. man kann drüber alles mitsniffen. Das liegt daran, daß &lt;br /&gt;
*** am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; nicht genug Rechenpower für viele bis alle verschlüsselte Tunnels zur Verfügung steht und&lt;br /&gt;
*** auf einem typischen LinkSys nicht genug Rechenpower für einen verschlüsselten Tunnel zur Verfügung steht (wenn man auf nennenswerte Bandbreite nicht verzichten will) und&lt;br /&gt;
*** ein verschlüsselter Tunnel ein falsches Gefühl der Sicherheit erzeugen könnte: Der Tunnel terminiert am anderen Tunnelendpunkt und nicht erst am Zielserver, zu  dem man eigentlich will. D.h. man muß sowieso zusätzlich sichere/verschlüsselte Protokolle verwenden oder einen sicheren IP-Tunnel vom eigenen Desktop bis zum Zielserver legen. Für beides bringt ein weiterer &amp;quot;teilweiser&amp;quot; Tunnel drunter nur mehr Latenz (jedes Paket will einmal zusätzlich verschlüsselt und entschlüsselt werden) und verbrauchte CPU-Leistung, aber ansonsten (insbesondere Security-mäßig) gar nichts.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* Auf beiden Enden des Tunnels muß [http://www.openvpn.net/ OpenVPN] installiert sein. Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; ist das trivialerweise längst der Fall, am lokalen Host (egal welcher Bauart) muß das der Node-Owner sicherstellen.&lt;br /&gt;
&lt;br /&gt;
* Am [http://outpost.funkfeuer.at/frontend/ Frontend] legt man sich einen &amp;quot;Tunnel&amp;quot; an. Dem werden 2 Geräte-IP-Adressen zugeteilt - eine für jede Seite. Analog zu den Richtantennen kann man die auch zweckmäßig-nett benennen, also z.B. &amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;dig8tosandwich&amp;lt;/code&amp;gt; und kann auch gleich jede Seite eindeutig adressieren.&lt;br /&gt;
&lt;br /&gt;
* Wir verwenden ''tap'' Devices von [http://www.openvpn.org/ OpenVPN]. Diese tunneln am Layer 2 (d.h. a la Ethernet) und sind daher broadcast-fähig. Außerdem sollte der Tunnel UDP benutzen (und v.a. &amp;lt;strong&amp;gt;nicht&amp;lt;/strong&amp;gt; TCP), da wir auch TCP-Connections drüber haben, die ja automatisch neu zu senden versuchen, wenn es gerade nicht geht. Wenn jetzt die normale Internetverbindung zusammenbricht, versuchen permanent 2 Schichten an TCP-Verbindungen durch Retries etwas zu erreichen und es schaukelt sich auf (d.h. es bringt nichts und erzeugt nur noch mehr sinnlosen Traffic).&lt;br /&gt;
&lt;br /&gt;
=== Netz-seitig ===&lt;br /&gt;
* Am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; muß jemand mit dortigen &amp;quot;root&amp;quot;-Rechten den Tunnelendpunkt (und [http://www.olsr.org/ olsrd]) konfigurieren. Diese Leute erreicht man besten über die Mailingliste [https://lists.funkfeuer.at/mailman/listinfo/discuss/ discuss@lists.funkfeuer.at].&lt;br /&gt;
** Dabei gibst du eine der erhaltenden IP-Adressen (&amp;lt;code&amp;gt;sandwichtodig8&amp;lt;/code&amp;gt; wäre das im obigen Beispiel) bekannt, damit sie am &amp;lt;code&amp;gt;sandwich.funkfuer.at&amp;lt;/code&amp;gt; am Tunnelendpunkt konfiguriert werden kann.&lt;br /&gt;
** Du bekommst dabei die zu verwendende Portnummer mitgeteilt. Nachdem am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; einige Tunnelendpoints sind, kann man nicht einfach irgendwas verwenden. Außerdem sind die verwendeten Portnummern alle in einer geschlossenen Range - das erleichtert die Verwaltung. Im Prinzip kann man am Node eine beliebige andere Portnummer verwenden, aber dem Autor fällt kein besonderer Grund, warum man dieses tun wollte.&lt;br /&gt;
** Dann ist die eine Tunnelseite soweit fertig.&lt;br /&gt;
&lt;br /&gt;
=== Node-seitig === &lt;br /&gt;
&lt;br /&gt;
Am lokalen Host muß man jetzt [http://www.openvpn.org/ OpenVPN] starten sowie die geeigneten Routing-Rahmenbedingungen schaffen. Bei allen Varianten braucht man folgendes:&lt;br /&gt;
&lt;br /&gt;
* Der [http://www.openvpn.net/ OpenVPN] Tunnel geht direkt zum ''sandwich.funkfeuer.at'' über die normale (bzw. sonstige) Internet-Verbindung. Um diese Verbindung durch spätere Routen nicht zu gefährden, setzen wir eine explizite Hostroute:&lt;br /&gt;
&lt;br /&gt;
   /sbin/ip route add 193.239.188.20 via 1.2.3.4 dev eth0&lt;br /&gt;
&lt;br /&gt;
''193.239.188.20'' ist die IP-Adresse, über die netz-seitig die [http://www.openvpn.net/ OpenVPN] Deamons arbeiten. Die IP-Adresse ist '''nicht''' aus dem eigentlichen 0xFF-Netz, weil es sonst Routingprobleme gibt. &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt; ist dabei das Netzwerk-Device, über das die Default-Route geht und ''1.2.3.4'' ist das normale Default Gateway/Next Hop. Die Default-Route(n) kann man mit &amp;lt;code&amp;gt;/sbin/ip route show | fgrep default&amp;lt;/code&amp;gt; sehen. Normalerweise sieht man genau eine, wenn der [http://www.olsr.org/ olsrd] bereits läuft, sieht man mehrere.&lt;br /&gt;
&lt;br /&gt;
Insbesondere darf es keine explizite Hostroute (nur eine automatische über den [http://www.olsr.org/ olsrd]) zu ''193.238.156.2'' (''sandwich.funkfeuer.at'') oder ''193.238.157.5'' (''tema.lo-res.org'') geben: Auf dem Server läuft auch ein Nameserver, den aus dem 0xFF-Netz jeder benutzen kann (und soll) und dazu muß der Request über den Tunnel kommen - der Nameserver verweigert [http://www.zytrax.com/books/dns/ch2/index.html#recursive rekursive Anfragen] (wie sie normale Resolver machen) aus dem (restlichen) Internet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Low-Level/Barebones/Step-by-step/The old Method ====&lt;br /&gt;
&lt;br /&gt;
ist auf [[Alte Konfigurationsmethode]] zu finden.&lt;br /&gt;
&lt;br /&gt;
Der Autor dieser Seite findet sie mühsamer und fehlerträchtiger wie die folgenden Konfigurationsfilemethode.&lt;br /&gt;
&lt;br /&gt;
==== Mit einem [http://www.openvpn.org/ OpenVPN] Konfigurationsfile ====&lt;br /&gt;
Obige Schritte kann [http://www.openvpn.org/ OpenVPN] auch alle selber machen. Entweder man spezifiert eine lange Liste korrekter Optionen oder man packt die Optionen in ein Konfigurationsfile unter &amp;lt;code&amp;gt;/etc/openvpn&amp;lt;/code&amp;gt;, wo es die meisten Linuxdistributionen auch finden werden.&lt;br /&gt;
Am sandwich.funkfeuer.at heißen die per Konvention &amp;lt;code&amp;gt;tap&amp;lt;n&amp;gt;-&amp;lt;node&amp;gt;.conf&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;.conf&amp;lt;/code&amp;gt; am Ende brauchen die Startup-Scripts und mit den Namen davor finden sich die Admins leichter zurecht. Das Node-seitige Konfigurationsfiles des Autors dieser Seite enthält folgende Zeilen:&lt;br /&gt;
&lt;br /&gt;
   #&lt;br /&gt;
   # dig8 tunnel&lt;br /&gt;
   #&lt;br /&gt;
   # '#' or ';' may be used to delimit comments.&lt;br /&gt;
   #&lt;br /&gt;
   dev             tap0&lt;br /&gt;
   proto           udp&lt;br /&gt;
   remote          193.239.188.20&lt;br /&gt;
   port            5011&lt;br /&gt;
   ifconfig        193.238.156.57  255.255.252.0&lt;br /&gt;
   route-up        /etc/openvpn/kill-route.sh&lt;br /&gt;
   daemon&lt;br /&gt;
   #secret          /etc/openvpn/dig8-priv.secret&lt;br /&gt;
   #auth            sha1&lt;br /&gt;
   #cipher          none&lt;br /&gt;
&lt;br /&gt;
Die meisten erklären sich von selbst bzw. haben dieselbe Bedeutung wie die Optionen weiter oben. Die letzten 3 Zeilen sind der 1. Schritt zu autentifizierten (aber nicht verschlüsselten) Verbindungen, damit nicht irgendwer den eigenen Tunnel &amp;quot;übernehmen&amp;quot; kann.&lt;br /&gt;
Um es an die eigenen Bedürfnisse anzupassen, muß man nur den Devicenamen, die Portnummer und IP-Adressen geeignet anpassen.&lt;br /&gt;
&lt;br /&gt;
Das Script &amp;lt;code&amp;gt;kill-route.sh&amp;lt;/code&amp;gt; schaut folgendermaßen aus:&lt;br /&gt;
&lt;br /&gt;
   #!/bin/sh&lt;br /&gt;
   #&lt;br /&gt;
   # Kill the useless openvpn route&lt;br /&gt;
   #&lt;br /&gt;
   /sbin/ip route del &amp;quot;193.238.156.0/22&amp;quot; dev &amp;quot;$dev&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Authentifizierte Tunnels ====&lt;br /&gt;
Obig konfigurierte Tunnels verlassen sich auf die Korrektheit der beteiligten IP-Addressen. Sollte jemand ein passende IP-Adresse konfigurieren und der eigene Tunnel deaktiviert sein, könnte dieser jemand den Tunnel &amp;quot;übernehmen&amp;quot;, indem er die passende Konfiguration einstellt.&lt;br /&gt;
&lt;br /&gt;
Das läßt sich durch (kryptographisch sichere) einfache Authentifizierung mittels eines &amp;quot;Shared Secrets&amp;quot; verhindern.&lt;br /&gt;
&lt;br /&gt;
* Zuerst stellt man den eigenen Tunnel auf obige &amp;quot;Konfigurationsfilevariante&amp;quot; um.&lt;br /&gt;
&lt;br /&gt;
* Dann generieren wir (d.h. eigentlich nur der Nodeowner) einen Shared Key mit&lt;br /&gt;
&lt;br /&gt;
   openvpn --genkey --secret /etc/openvpn/tap0-dig8.secret&lt;br /&gt;
&lt;br /&gt;
Der Filename sollte dabei einen passenderen Namen wie oben bekommen (so heißt das File am dig8 Knoten).&lt;br /&gt;
&lt;br /&gt;
* Dann schickt der Nodeowner eine Email mit passendem Text und dem erzeugten File als Attachment an [mailto:bernd@firmix.at bernd@firmix.at].&lt;br /&gt;
&lt;br /&gt;
* Das Problem bei der Installation ist, daß man das auf beiden Seiten zugleich aktivieren muß, weil sonst die jeweils nicht-authentifizierte Seite nicht mehr verbinden kann/darf. D.h. es wird ausgemacht, wann das passiert und [mailto:bernd@firmix.at bernd@firmix.at] stellt das server-seitig um (indem er obige 3 Zeilen am Ende des .conf Files auskommentiert). Gleichzeitig muß auch auf der Node-seite die entsprechenden Zeilen eingefügt werden.&lt;br /&gt;
&lt;br /&gt;
Der Verkehr selber ist unverschlüsselt - eben aus den viel weiter oben angeführten Gründen. Und das ganze basiert natürlich darauf, daß [mailto:bernd@firmix.at bernd@firmix.at] sowie alle andere &amp;quot;root&amp;quot;s am &amp;lt;code&amp;gt;sandwich.funkfeuer.at&amp;lt;/code&amp;gt; auch vertrauenswürdig sind.&lt;br /&gt;
&lt;br /&gt;
==== Abschluß ====&lt;br /&gt;
* Als letzten Schritt brauchen wir noch einen laufenden [http://www.olsr.org/ olsrd], der die Routen alle richtig verwaltet.&lt;br /&gt;
  siehe [http:... leider ein b0rken link]&lt;br /&gt;
&lt;br /&gt;
== FAQs ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;: &lt;br /&gt;
Ich benutze die FreifunkFirmware ab 1.23 und bekomme &lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
The ifconfig command is replaced with the ip command.&amp;lt;br/&amp;gt;&lt;br /&gt;
For link layer settings refer to &amp;quot;ip link help&amp;quot;; For&amp;lt;br/&amp;gt;&lt;br /&gt;
ip adress settings refer to &amp;quot;ip addr help&amp;quot;. Examples:&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 up&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 down&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 mtu 1500&amp;lt;br/&amp;gt;&lt;br /&gt;
ip link set dev tap0 address 00:01:02:03:04:05&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
   Ab der Version 1.23 von Freifunk fehlt ifconfig, route usw, da&lt;br /&gt;
   sie Speicherplatz sparen wollten. Ich habe das schlicht und einfach nicht&lt;br /&gt;
   bemerkt, da ich ja jedesmal eine Rückmeldung erhalten habe wenn ich ifconfig&lt;br /&gt;
   eingegeben habe.&lt;br /&gt;
&lt;br /&gt;
Mit&lt;br /&gt;
   &amp;lt;tt&amp;gt;ipkg install freifunk-openwrt-compat&amp;lt;/tt&amp;gt;&lt;br /&gt;
können die nachinstalliert werden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Ich habe durch meinen normalen Internetanschluß bereits ein Default-Route. Muß ich die löschen, wenn ich einen Funkfeuer-openvpn-Tunnel habe?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Nein. Am entsprechenden Host des Autors sieht das so aus:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;tt&amp;gt;&lt;br /&gt;
1#/sbin/ip route show | egrep -w '^default'&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 62.178.36.1 dev eth1&amp;lt;br/&amp;gt;&lt;br /&gt;
default via 193.238.156.50 dev tap0  metric 1&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Damit sind 2 Default-Routen mit verschiedenen &amp;quot;Metriken&amp;quot; vorhanden (&amp;quot;metric 1&amp;quot; und die nicht angezeigte &amp;quot;metric 0&amp;quot;). De facto wird die Route mit der Metrik 1 nie verwendet, weil die Hostrouten durch die schmälerer Netzmaske präferiert und die &amp;quot;normale&amp;quot; Default-Route durch die kleinere Metrik bevorzugt werden. Nur wenn es keine Hostroute zu einem Funkfeuer-Host gibt, wird der Weg über das Internet (ohne Tunnel) gewählt. Das sollte zum einen sowieso nicht sein und zum anderen sollte es nach Meinung des Autors (nachdem er es nicht ausprobiert hat) nicht signifikant schaden.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Frage&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Kann ich dann alles machen?&lt;br /&gt;
* &amp;lt;strong&amp;gt;Antwort&amp;lt;/strong&amp;gt;:&lt;br /&gt;
Node-seitig geht alles. Das einzige im Moment noch ungelöste Problem ist: Wenn man von außerhalb des 0xFF-Netzes eine 0xFF-IP-Adresse am Node erreichen will, kommen die IP-Pakete zwar an und die Antwortpakete zurück, aber die werden verworfen, weil - durch das Masquerading über die Default-Route - die Source-IP-Adresse verändert wird. Und damit verweigert der sendende Host die Annahme der Pakete.&lt;br /&gt;
&lt;br /&gt;
Die Lösung ist: Man verwendet mehrere Routing-Tabellen, um auf Grund der Source-Adresse die Antwortpakete über den Tunnel zu Routen. Das kann der &amp;lt;code&amp;gt;olsrd&amp;lt;/code&amp;gt; im Moment nicht.&lt;/div&gt;</summary>
		<author><name>Bernd</name></author>	</entry>

	</feed>