* added a forgotten line
[olsrd.git] / CHANGELOG
1 This file states changes as of version 0.2.4:
2 $Id: CHANGELOG,v 1.120 2007/11/29 17:14:41 bernd67 Exp $
3
4 0.5.5 ---------------------------------------------------------------------
5
6 BUGFIXES and PATCHES by Hannes Gredler <hannes@gredler.at>
7 - fix not deleted tc entry.
8 - avoid setting routes with an invalid/impossible netmask.
9 - refactoring of TC parsing to kill another pile of malloc()/free()s
10   saving (again) code and especially run.time performance.
11
12 PATCH by John Hay <jhay@meraka.org.za>:
13 - also printout our own HNAs in the dotdraw plugin.
14
15 PATCH by Patrick McCarty <mccartyp@gmail.com>:
16 - fixed compile errors in the BSD port
17
18 PATCHES by Sven-Ola Tuecke <mail2news@commando.de>:
19 - 102-olsrd-cvs-fixes.patch: use different buffers in the same printf()
20 - 103-olsrd-rt-exportroute-cleanup.patch: avoid a malloc()ed list of functions
21 - 132-save-the-fish.patch: really save the fish and avoid to forward invalid
22   messages from older olsrd versions
23 - 135-georss-map-for-nameservice.patch: fixes and extensions for the namesaervice plugin
24 - 138-olsrd-fixdotdraw.patch: fix the dot_draw plugin
25 (all to be found on http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/)
26
27 PATCHES and CLEANUPS by Bernd Petrovitsch <bernd@firmix.at>
28 - Jens Nachtigall <nachtigall@web.de> suggested (and reminded) to use
29   olsrd.conf.default.lq as the default installed one.
30   It makes much more sense as - to the best of my(bernd's) knowledge - all
31   larger networks uses the LQ extensions. And new customers should better
32   be pushed in that direction.
33 - with the help of Patrick McCarty <mccartyp@gmail.com>, we got olsr to build
34   on OpenBSD again:
35   * OpenBSD'd `sed` is pretty conservative and doesn't understand 's|re|sub|'.
36     So we fall back to the old 's/re/sub/' and quote all '/' and '.' correctly
37     (which was the main reason to use '|').
38     And while I'm at it: Remove the useless $(CCACHE) from the $(CC) for
39     dependency generation and beautify (read: "$(strip)") $(CPPFLAGS).
40   * OpenBSD needs an explicit "#include <sys/types.h>" before
41     "#include <netinet/in.h>".
42 - fixed lib/secure/src/md5.h: This was broken as it had
43   "typedef unsigned long int UINT4;". "unsigned long int" is 8 bytes on x86_64.
44   We are using now the standardized types from <inttypes.h>.
45 - fixed warnings and improved lib/secure/src/md5.c:
46   * we are using memcpy() and memset() instead of the open-coded loops as
47     suggested 
48   * const'ified
49   * added function prototypes for static functions
50   * moved static functions to the top so that their declaration is before
51     their use to allow gcc to inline if only used once.
52   It remains ugly - God knows why there are that so many useless
53   type-casts.
54 - Some minor and trivial cleanup: Added two functions to calculate the ETX
55   value from a struct tc_edge_entry and a struct link_entry, respectively.
56   And use them everywhere.
57 - added http://meshcube.org/nylon/utils/olsr-topology-view.pl into
58   lib/httpinfo/misc as suggested by Jens Nachtigall <nachtigall@web.de>
59 - Killed "struct olsrd_config *cnf" in src/cfgparser/olsrd_conf.h and replaced
60   it's usage with "olsr_cnf" from src/defs.h.
61   Serious cleanup: olsrd_get_default_cnf() does no longer initialize the global
62   "cnf" variable" but uses a local one which is returned as before. And
63   olsrd_parse_cnf() does no longer return the global variable it is working on.
64 - Merged "struct hna4_entry" and "struct hna6_entry" into
65   "struct local_hna_entry" (as "struct hna_entry" is a different thing)
66   Both have almost the same data (IP address + netmask/prefix) so we use
67   the quite new "struct olsr_ip_prefix" to store it.
68   Also merged the "hna4" and "hna6" pointer in "struct olsr_config" -
69   look at the global "olsr_cnf->ip_version".
70 - added a olsr_ip_prefix_to_string() function
71 - .h file cleanup: def.h does not longer include net_olsr.h because it 
72   doesn't needs it.
73 - more type safety: the macros COPY_IP() and COMP_IP are gone and replaced
74   with "=" or similar "normal" C operations. There are also now the inline
75   functions ip4cmp() and ip4equal() to work on "struct in_addr", ip6cmp()
76   and ip6equal() to work on "struct in6_addr" and ipcmp() and ip6equal()
77   to work on "union olsr_ip_addr".
78   Most (or even more precise: almost all) uses of COPY_IP() and COMP_IP()
79   are in "if (olsr_cnf->ip_version) { ... } else { ... }" anyway to
80   there is no reson to copy an IPv4 address effectively with
81   "memcpy(&dst, &src, 4)" or compare with memcmp(&a, &b, 4)" wher the
82   always "4" is stored in a variable inhibiting compiler optimization.
83   There is also the deprecated function genipcopy() mimicking the old
84   typeless COPY_IP() macro for the last few places where a cleanup is
85   needed anyways.
86   There also lots of old macros left over (commented out of course) until
87   we are confident that everything works. And then I will kill them too.
88 - Fixed the misleading definition of "v4" in "struct olsr_ip_addr" fom
89   "olsr_u32_t" (in network-byteorder!) to "struct in_addr". Lots of
90   temporary variables to call inet_ntoa()/inet_ptoa() vanished .....
91 - We have now ip4_to_string(), ip6_to_string() and olsr_ip_to_string()
92   to print a "struct in_addr", "struct in6_addr" and "union olsr_ip_addr"
93   into a string buffer.
94 - cleanup: olsr_ip_to_string() and similar non-reentrant functions now must
95   get a target buffer. To ease that, there is the "struct ipaddr_str"
96   which is large enough for all of them (read: for an IPv6 address). This
97   also removes the cyclic buffer there.
98   All of these function return a "const char *" which can be directly used
99   for printf(3) and friends.
100 - const'ified more functions
101 - converted the source to UTF-8.
102 - "struct sig_msg" uses an olsr_u8_t for a byte array (and not "char")
103 - force the few inline function to always be inlined.
104 - #ifdef the body of the olsr_print_hna_set() and olsr_print_neighbor_table()
105   if nothing is done
106 - declare "int_addr", "int_netmask" and "int_broadaddr" in "struct interface"
107   as "struct sockaddr_in" since it is that what we actually want there (and
108   it is similar to the IPv6 code).
109 - updated the olsrd.conf.default.lq-fisheye to the Debian-deliverd version
110   after recent discussions olsr-dev@olsr.org
111 - use "inline_avl_comp_ipv4()" in "avl_comp_ipv4()"
112 - clean up the routes on more signals. Basically we want to do this on all
113   signals which terminate the program.
114 - killed a superflous global buffer in src/main.c
115 - made inline functions from avl_walk_{first,last,next,prev} and created
116   "const" versions of it. inline_avl_comp_ipv4() is now also an inline function
117   (and not a macro)
118 - created a typedef's for various function pointers - much easier to read.
119 - cleanup: compare tree->comp (adn other pointers)) to NULL (and not 0)
120 - killed superflous "return"s at the end of void functions
121 - const'ified more parameters in many more functions in the .h and
122   .c files
123 - init-functions with constant or ignored return values are "void"
124 - created a typedef fro the callback in "struct export_route_entry"
125   and using it!
126 - moved the initialization of the {add,chg,del}_kernel_list variables
127   into process_routes.c. So they are now "static" there.
128 - olsr_export_{add,del}_route{,6} are now static in process_routes.c
129   since they are not used elsewhere.
130 - olsr_addroute_add_function() and olsr_deldroute_add_function() were
131   almost identical - made one function out of it.
132   Same for olsr_addroute_del_function() and olsr_deldroute_del_function().
133 - fixed the sort order in avl_comp_ipv4_prefix(): We compare now the IPv4
134   values in host byte order (and not network byte order). So the route
135   list in the e.g. httpinfo plugin is now nicely sorted.
136 - fixed and improved the `gcc-warnings` script:
137   * support older gcc's (as on Debian/Sarge) as they have slightly different
138     error messages
139   * removed superflous lines
140   * replaced the call of `sed` with shell built-in features fixing syntax
141     errors on Debian/Sarge
142   * set all locale-relevant variables to "C" (just to be sure)
143 - consolidated ip{4,6,}{cmp,equal}: all are nwo inline functions using only
144   the minimal necessary operations. Thanks to Hannes Gredler
145   <hannes@gedler.at> and Sven-Ola Tuecke <mail2news@commando.de> for pointing
146   that out and suggesting the `inline`, respectively.
147   use ip{4,}cmp in lq_avl.[ch] to resue the code. inline_avl_comp_ipv4
148   is superflous now (and replaced by ip4cmp) and use the global MIN and MAX
149   macro instead of AVLMIN and AVLMAX
150 - killed netmasks from the IPv4 part of the code and use the prefixlen there
151   (similar to thte IPv6 part). Manymore details on
152   http://lists.olsr.org/pipermail/olsr-dev/2007-November/001464.html
153
154 0.5.4 ---------------------------------------------------------------------
155
156 QUAGGA by Immo 'FaUl' Wehrenberg <immo.olsr@do.bundessicherheitsministerium.de>
157 - updated to svn version 33
158
159 BMF PLUGIN  by Erik Tromp <erik_tromp@hotmail.com>
160 - updated to 1.5.1
161 - updated to latest plugin interfaces changes and killed warnings (by Bernd
162   Petrovitsch <bernd@firmix.at>)
163
164 PATCH by Hannes Gredler <hannes@gredler.at> which rewrites the route handling.
165 To quote him:
166 ----  snip  ----
167 change list:
168 - get rid of separate routing tables for HNA and per-node routes, everything is
169   now unified in an AVL routing tree (&routingtree)
170
171 - introduce walking macros (OLSR_FOR_ALL_RT_ENTRIES()) that hide the internal
172   structure of the RIB for making life of the plugin authors easier.
173
174 - get rid of different SPF implementations for LQ and non-LQ code paths. a
175   non-LQ edge is simply substituted with a cost of 1.0
176
177 - get rid of host masks - a new data type olsr_prefix is introduced which is
178   basically an ip address plus a prefix length.
179
180   do not install the metric in the kernel FIB - for the kernel its pointless
181   if the route gets installed with a metric of N or M.
182
183   we do not need to update the kernel FIB if we have hop count only changes
184   (for example if there is a reroute action further downstream)
185
186   the only things which triggers a kernel FIB route update is a next hop
187   change (a next hop is neighboring gateway router plus an interface).
188
189   all OLSR routes are installed with a metric of 2
190
191 - separate between rt_entry and rt_path - the former is a route installed in the
192   kernel with an next hop. the latter is a candidate for best path selection
193   after SPF calculation has been done. in the rt_entry we keep a pointer to the
194   best_path and also to the next hop that was installed in the kernel FIB.
195
196   we always keep all originator of a route, if a route originator goes away we
197   can easy recompute the best path for the route.
198
199   the next hop in the rt_entry gets only updated upon a successful route_add
200   call - that way we always remember what next hop to delete.
201
202   stray routes should be history now.
203
204 - tweak the linked list toolkit to operate on circular lists.
205
206 - get rid of malloc calls for building the kernel update list. the list node is
207   now embedded in the rt_entry.
208
209 - introduce three queues (add/chg/del) for kernel updates.
210
211 - for neighbor route dependency tracking the neighbor routes are queued first or
212   last (depending on which queue you work on)
213
214 - rework all the plugins which directly manipulate rt entries.
215
216 - rework the plugins that read from the routing table (most notably nameserver,
217   httpinfo and quagga plugin)
218
219 - lots of comments that explains the intentions and purpose of this code-piece.
220
221 non RT related stuff:
222 - use a list rather than a tree for storing the post-SPF results, which further
223   improves the raw-SPF runtime.
224
225 - add display of SPF runtime (masked behind #ifdef SPF_PROFILING)
226
227 - http://gredler.at/download/olsrd/neighbor_routes3.diff: This updates the own
228   IP address (read: the main address) after changes (e.g. on
229   `ifup wlan0; sleep 1; ifdown wlan0`) and kills the
230   olsr_fill_routing_table_with_neighbors() function.
231 ----  snip  ----
232 And Sven-Ola Tuecke <mail2news@commando.de> fixed an instability issue on interface
233 up/down operations (see 102-olsrd-rt-refactoring-fixes.patch below) and a missing
234 initialization.
235
236 PATCH by Hannes Gredler <hannes@gredler.at> which "consolidates
237 the link-state database and the spf-calculation in order
238 to calculate routes more efficiently".
239 To quote him (more):
240 ----  snip  ----
241 - use the link-state (tc) database for SPF calculations rather than
242   replicating the notion of vertices and edges for a SPF run.
243   this heavily reduces malloc() calls and shrinks the total CPU
244   load of the route calculation path between 60%-80%.
245 ----  snip  ----
246
247 PATCHES by Sven-Ola Tuecke <mail2news@commando.de> to be found on from
248 http://download-master.berlin.freifunk.net/sven-ola/nylon/packages/olsrd/files/
249 - 102-olsrd-rt-refactoring-fixes.patch
250   Because you changed a lot of basics: It's time to handle a general
251   flaw in the routing system. Plase take a look at chk_if_changed(). This
252   will free() any "struct interface" pointer without warning at any time.
253   This is why it's possile to SEGV olsrd with a simple "ifdown xxx".
254   The patch replaces the (maybe) invalid pointer with an index reference
255   "iif_index". You can always ask the OS for a name. Please note, that I do
256   not have a working BSD toolchain, so I've placed an #error in the IPv6
257   BSD-part where the author/porter has started to hack something funny.
258
259 - 110-olsrd-double-wlancard-neigh-hack.patch:
260   This is a hack for Nodes having to wifi cards with the same channel,
261   bssid, IP-Range etc. If two nodes can see each other by means of two
262   possible links (here: two wifi cards with equal config), a bug is  triggered
263   with the Neigh-is-SYM detections. This small little hack prevents this.
264
265 - 112-olsrd-nameservice-fixemptyname.patch:
266   This is an addon to my lat/lon stuff which will prevent olsrd from
267   running (oops?) if no hostname is given and the nameservice plugin
268   is loaded.
269
270 - 113-olsrd-dyngwplain-pluginvers5.patch:
271   This updates the dyngwplain plugin to the new Plugin Iface
272
273 - 140-olsrd-arprefreshed.patch:
274   This is a new one. Opens a packet socket and listen to UDP(698), extract
275   the sender MAC and refreshes the ARP cache whith that. Should speedup
276   especially in cases, if you initially try to use a longer routing path which
277   normally triggers a "ARP-Lookup-Chain".
278 - 106-olsrd-nameserviceparams.patch:
279   This patch converts more plugins to the new interface version.
280 - 104-olsrd-policy-routing.patch
281   Reworked this one to discard GPL helper functions. Also checked IPv6 and
282   re-included the IPC hookup. The patch adds a "RtTable [number]" for
283   /etc/olsrd.conf which is simply the Linux
284   policy routing table to use. Defaults to 254 (== main).
285   This patch was modified/clenaed up by <bernd@firmix.at> to use "#if"
286   instead of "#ifdef" as it's more robust against typos.
287 - 110-olsrd-fixpacketprint.patch, 112-olsrd-nameservice-fixemptyname.patch,
288   113-olsrd-txtinfo-fixhttpget.patch, 114-olsrd-timeoutlimit.patch,
289   115-olsrd-nameserviceparamfix.patch and
290   116-olsrd-fix-pluginparam-addons.patch fixing the compilation warning
291   on 64bit and lots of other improvements.
292 - "Save the fish" patch: Avoid forwarding of packets with too low TTL. This
293   kills lots of packet forwarding storms.
294   NB: The oneliner was applied by hand by BP and formatted to look (in BPs O)
295   more readable.
296
297 PATCH by Arnd Hannemann <hannemann@i4.informatik.rwth-aachen.de>
298 olsr_makefile_make_use_of_exename.patch
299 - This patch makes sure that the EXENAME variable of Makefile.inc is used
300   in Makefile.
301
302 PATCHES by John Hay <jhay@meraka.org.za>
303 - update to new FreeBSD WLAN API
304 - do not require /bin/bash, use /bin/sh
305 - Fixed alignment so that olsrd runs on FreeBSD/arm
306 - allow more interface in an IPv6 subnet on FreeBSD
307 - use PREFIX and DESTDIR as all the other Makefile.$OS also for FreeBSD
308 - make txtinfo plugin work with IPv6
309
310 PATCH by Andreas Jacobs <jacobs@i4.informatik.rwth-aachen.de>
311 - fix the loss link quality calculation for "windows size % 4 != 0"
312
313 PATCH by Acinonyx <acinonyxs@yahoo.gr>
314 - Bug fix: include $(TOPDIR)/Makefile.inc at the begin in the Quagga plugin
315
316 PATCH by David Cornejo <dcornejo@gmail.com>
317 - fixed an "+=" of an uninitialized variable (detected with/by the
318   scan.coverty.com).
319
320 BUG reported by Aaron Kaplan <aaron@lo-res.org>
321 - BSD-xargs doesn't know "-r".
322
323 PATCHES and CLEANUPS by Bernd Petrovitsch <bernd@firmix.at>
324 - Made a function from the ME_TO_DOUBLE() macro (in src/mantissa.h).
325   This saves code throughout the code even on i386 and will even more
326   on architectures without floating point units and "-msoft-float".
327 - And the mathemathics in src/mantissa.h is reformulated to minimize
328   floating point operations to save CPU power - especially on embedded
329   devices.
330 - I rewrote the half of src/lq_packet.[ch] which deals with incoming
331   packets. This was triggered with performance output of gcc produced
332   by Sven-Ola Tuecke at CCCamp07.
333   This kills *lots* of (more than) superflous malloc()s and the same
334   number of (free()s). And it also kills some code and copying around of
335   data.
336 - Make it compile without warning with flex-2.5.33 (to be found on Fedora 7
337   and Gentoo in Sep-2007) again.
338
339 - converted the dyn_gw plugin to plugin interface version 5 (which leaves
340   the quagga plugion as the last with the old one).
341 - paving the way to activate -Wshadow, much more to do
342 - const-ify parameters here and there
343 - use NULL for pointers (and not "0")
344 - Killed "extern" declarations in (not generated) .c files
345
346 - Based on a patch by Gianni Costanzi <gianni.costanzi@gmail.com> (so credits
347   and thanks have to go there):
348   added OS_CFLAG_PTHREAD Makefile variable since gcc (on Linux) requests this
349   in the manual page.
350   Changes/additions:
351   - I added definitions to all OS-specific Makefile.$OS with the value similar
352     to the value in OS_LIB_PTHREAD (either empty or "-pthread").
353   - The variable is added to CPPFLAGS (and not CFLAGS) since CPPFLAGS is used
354     for all cpp and gcc calls (and gcc's man page indicates that it sets
355     variables for both of them).
356
357 0.5.3 ---------------------------------------------------------------------
358
359 URGENT BUG FIX
360 Ignacio García Pérez <iggarpe@terra.es> found a serious bug in the dot-draw
361 plugin and identified it's source.
362
363 BUG FIX
364 The bmf plugin wanted to kill a not-started thread and this causes a segmentation
365 violation. This happens if the old plugin interface support is not compiled in
366 and one uses - or more asccurate: wants to use - the bmf plugin which uses that
367 ATM. Thanks to Cedric Krier <ced@ced.homedns.org> for reporting this.
368
369 DEPENDENCIES FIXED
370 The dependencies (*.d files) are now properly generated and used. And they also
371 dependen on the Makefile in the current directory and the Makefile.inc so that
372 changes there also lead to new compilation.
373 Remember: We support "ccache" so install it to save lot of meaningless recompiles
374 if nothing (as seen by the real C compiler, i.e. after the C preprocessor) has
375 changed.
376
377 BUILD FIX
378 Linux/IA64 and Linux/HPPA also need "-fPIC".
379
380 CLEANUPS
381 - olsr_switch does no longer generate warnings
382 - olsr_switch is also built with "build_all" and cleaned with "uberclean"
383 - More "const" all over the place.
384 - More "static" for local functions and variables.
385 - Killed an unnecessary "static" variable.
386
387 0.5.2 ---------------------------------------------------------------------
388
389 URGENT BUG FIX
390 Sven-Ola Tuecke found a serious bug of the class "show stopper" and sent a patch.
391
392 PLUGIN CLEANUP
393 Plugins handle parameters quite individually (case-sensitive vs case-insensitive,
394 different parsing functions for the same values, etc.). Plugin Interface version 5
395 now exports a table of { parameter-name, parsing-function, addr-of-storage } and
396 it's size. Common functions should be shared.
397
398 0.5.1 ---------------------------------------------------------------------
399
400 MISC
401 Upgrade to olsr-bmf 1.5 from Erik Tromp <erik_tromp@hotmail.com>
402
403 latitude/longitude support is now in the nameservice plugin done by
404 Sven-Ola Tuecke <mail2news@commando.de>
405
406 added the spf refactoring patch from  Hannes Gredler <hannes@gredler.at> which
407 saves a noteworthy amount of CPU time. To quote him:
408 ----  snip  ----
409 1. use of an AVL tree as a min-heap implementation
410
411    as a means for efficient sorting.
412    (the etx metric is used as the key in the candidate tree)
413
414 2. next-hop propagation
415
416    rather than tracking the previous node in olsr_relax()
417    i have changed that model and pre-populate all one-hop neighbors
418    with their own IP adress as 'next-hop' and pull that
419    pointer up once new paths are explored.
420
421    as a result no walker for counting hops and extracting next-hops
422    is required - it turns out at this is slighly more efficient
423    than the existing behaviour (even with the cache applied).
424 ----  snip  ----
425
426 CLEANUPS
427 * moved a only locally needed hack from "union olsr_ip_addr" into the only place
428   where it is needed in hashing.c
429
430 0.5.0 ---------------------------------------------------------------------
431
432 APPLIED PATCHES FROM FREIFUNK-FIRMWARE
433 libsmake, dyngwplain, nameservices+services, tzxtinfo, quagga, quagga-routehandler,
434 optimize, fixes from Eric Tromp and Sven-Ola Tuecke, CPU-optimize, secure key, HNA-IP
435
436 CLEANUPS
437 removed hardcoded limit on the number of interfaces (at least in the Unix part)
438 made Makefile targets much more consistent
439
440 MISC
441 put Bmf-1.3 plugin into it
442
443 FreeBSD IPv6 SUPPORT
444
445 Patch from John Hay applied.
446
447 BUGFIXES
448
449 0.4.10 --------------------------------------------------------------------
450
451 OLSR NETWORK SIMULATOR
452
453 An application called olsr_switch(sorry for the nameclash with the win32
454 GUI) has been added. If olsrd is ran using the -hint option it can now
455 connect to olsr_switch and be part of a virtual network. This means
456 that multiple instances can be ran at the same host! The olsr_switch
457 application allows the user to define link variables on all viritual
458 links in the network, creating all possible topologies. Read more in
459 the readme file.
460
461 EXPERIMENTAL FISH EYE ALGORITHM
462
463 An experimental algorithm for TTL settings on TC messages has
464 been added. Read more in the corresponding README file.
465
466 OPENBSD SUPPORT
467
468 olsrd now also compiles on OpenBSD systems. Thanks a lot to Holger
469 Mauermann for the patches!
470
471 BUILDSYSTEM REWRITE
472
473 Bruno has rewritten the make system. OS detection is now done
474 automagically and the general design is much improved.
475
476 IP ADDRESS VALIDATION
477
478 Olsrd now maintains a set of IP addresses that is considered
479 invalid. Checks against this set is done on all received
480 OLSR packets announced originator addresses. The dataset can
481 be updated dynamically.
482
483 PLUGIN INTERFACE
484
485 Updated interface version to 3 and added more noticeable warning
486 for version missmatch.
487
488 MATH LIB DEPENDENCY
489
490 The dependency on the math lib came from the use of pow(3) in the
491 mantissa/exponent calculation. The calls to pow in this long forgotten
492 code, was very unnessecarry. The pow calls are replaced with bitwise
493 shifts and -lm is no longer needed.
494
495 ICMP REDIRECTS ON LINUX
496
497 On Linux systems "0" is now also written to the all/send_redirects
498 procfile and not only the pr. interface ones. Hopefully this resolves
499 problems reported with systems still sending ICMP redirects.
500
501 BUGFIXES
502
503 - Fixed init of IPv6 addrtype variable. It used to be uninitialized,
504   causing it to default to site-local and have some weird side-effects.
505 - Fixed crash when changing IPv6 address at run-time
506 - Fixed a bug that prevented setting willingness 0 in the configfile
507 - Fixed bad handling of missing command line arguments
508 - Did various updates to prevent assertion when a neighbor
509   has changed IP and sends HELLO before its olsrd precess has detected
510   the change.
511 - Fixed return value check on times(2) calls in the scheduler
512 - Fixed bug(s) that could cause crash when an interface was brought
513   down while olsrd was running.
514 - Removed the silent (read: unchecked) hard limit of 16 interfaces.
515 - Compiles now cleanly on 64bit (e.g. x86_64).
516
517 0.4.9 ---------------------------------------------------------------------
518
519 OPTIMIZATIONS
520
521 The MID database is now also indexed by alias addresses. this makes
522 look-ups of main addresses based on alias addresses _much_ faster.
523 The mid_lookup_main_addr function alone has gone from >30% of the
524 total CPU time used by olsrd to <1%.
525 PLUGIN DEVELOPERS: datatypes for MID entries has been changed.
526
527 Routing table calculation in the LQ case now uses balanced binary
528 trees instead of linked lists, which makes look-ups much faster.
529
530 The debug output function olsr_printf() is not used by olsrd
531 internals any more. Instead the macro OLSR_PRINTF is to be used.
532 This macro does debug level testing _before_ doing any function
533 calls(both printf itself and parameters to printf). This is a much
534 more optimized way of doing debug output. In addition olsrd can
535 be built without any debug output code if doing 'make NODEBUG=1'.
536
537 TIMEOUT OF DATASETS
538
539 Validity times for dataset entries are now set using the clock_t type
540 (used to be struct timeval). This data is now fetched from the times(2)
541 function instead of gettimeofday(2). This prevents possible problems
542 if the system time is changed.
543 PLUGIN DEVELOPERS: Note that datatypes for close to all dataset entries
544 (link, neighbor, mid, hna, tc etc.) has been changed!!
545
546 CONFIGURATION FILE
547
548 Multiple interfaces can now use the same interface configuration block.
549 Example:
550 Interface "if0" "if1" "if2"
551 {
552         .....
553 }
554
555 Interface configurations now also support the "Weight" directive. When
556 olsrd finds multiple links to a neighbor it will choose the link
557 going via the interface with the lowest weight. Olsrd normally
558 sets this weight dynamically based on interface characteristics,
559 but if the user wishes to set a fixed weight in a interface(or
560 a group of interfaces), this directive is now available.
561
562 Moreover, interface configurations now support the "LinkQualityMult"
563 directive. It takes an IP address and a multiplier as arguments.
564
565 Example:
566
567 Interface "if0"
568 {
569   [...]
570
571   LinkQualityMult 192.168.0.1 0.7
572   LinkQualityMult default 0.5
573
574   [...]
575 }
576
577 The idea is to make certain links via the configured interface
578 artificially worse or better than they really are. The first parameter
579 specifies the IP address of a neighbour interface. The second
580 parameter is the multiplier to be applied to the link to the specified
581 neighbour interface.
582
583 After we have derived the link quality from the packet loss among the
584 packets received from the specified neighbour interface, we multiply
585 the link quality by the given multiplier. So, the multiplier changes
586 the LQ value that we use when determining the ETX, which is 1 / (LQ *
587 NLQ).
588
589 If "default" is given as the IP address then the multiplier applies to
590 all links via the configured interface. Note, however, that olsrd only
591 assigns one multiplier to each link. It does so in the following way.
592
593 * If there is a "LinkQualityMult" line that matches the IP address of
594   the link's neighbour interface, then use the multiplier in this
595   line.
596
597 * If there isn't any matching line, then look for a "default" line. If
598   there is a "default" line, then use the multiplier in this "default"
599   line.
600
601 * Otherwise use 1.0, i.e. do not modify the LQ value at all.
602
603 Hence, a line with an IP address has priority over a "default" line.
604
605 In the above example, the LQ value of the link between the local
606 interface if0 and the neighbour interface 192.168.0.1 would be
607 multiplied by 0.7. All other links between the local interface if0 and
608 a neighbour interface would be multiplied by 0.5.
609
610 IPV6 SOCKETS
611
612 The socket option IPV6_V6ONLY is now set on IPv6 sockets in linux.
613 This means that olsrd will no longer receive IPv4 traffic when
614 running in IPv6 mode.
615 This should enable users to actually run one olsrd instance using
616 IPv6 and one using IPv4 at the same time :)
617
618 PLUGINS
619
620 The httpinfo, dyn_gw and dot_draw plugins now all include olsrd
621 headerfiles directly. A plugin should define OLSR_PLUGIN before
622 including olsrd headers. Doing things this way removed the
623 redundant datatype definitions that has so often caused trouble
624 when things has been updated in olsrd.
625
626 NETBSD SUPPORT
627
628 olsrd now also compiles on NetBSD systems. Use 'make OS=nbsd' to
629 build. This port is not very well tested and feedback is greatly
630 appreciated.
631
632 EXPERIMENTAL MULTI-INTERFACE CODE FOR FREEBSD
633
634 Experimental code using libnet can be compiled in allowing multiple
635 interfaces to be used in FreeBSD.  You enable this by compiling using
636 OS=fbsd-ll.  You must have libnet-devel installed for this to work
637 (/usr/ports/net/libnet-devel).
638
639 OTHER UPDATES
640
641 - WLAN devices are now detected in FreeBSD
642 - First specified interfaces IP is used as main address.
643 - Broadcastflag is not checked on interface if fixed broadcast is
644   set in config.
645 - Removed Linux link layer code as this was not really in use.
646 - Added -nofork command line option
647
648 BUGFIXES
649
650 - Link sensing now works according to announced vtime from
651   neighbors. Previously links going symmetric->asymmetric
652   were not necessarily detected until the holding time expired.
653 - A bug in route addition/removal that could lead to routes
654   using GWs being added before the actual route to the GW
655   was set up, has been fixed.
656 - A bug in the interface selection in route calculation has been
657   fixed. New routes are no longer added prior to deleting old ones,
658   since this caused trouble.
659 - A bug in the IPv6 multicast address configuration has been fixed.
660   This caused olsrd not to work with global IPv6 addresses.
661 - A bug in the IPv6 prefix-from IPaddr function has been fixed. This
662   bug caused HNA prefixes to always be calculated to 0.
663 - If a 2-hop neighbor is also a 1-hop neighbor, a bug made olsrd
664   prefer a bad direct link to a better link via an MPR.
665 - If a link or interface lookup failed, olsrd crashed.
666 - Fixed a crash in the LQ packet generation code based on a
667   signed/unsigned integer comparison.
668
669
670 0.4.8 ---------------------------------------------------------------------
671
672 LICENSE CHANGE
673
674 Olsrd is now distributed under a BSD style license. We believe olsrd will
675 be better off using this license as it opens up for commercial players
676 to use olsrd freely in their products. In the end this will lead to
677 this kind of users doing serious testing and bug fixing of olsrd.
678
679 ETX-LIKE LINK QUALITY DETECTION
680
681 We can now determine the packet loss on a link by looking at the serial
682 numbers of the OLSR messages received from a neighbor. This tells us how
683 many packets get through from our neighbor to us. We use a new extended
684 kind of HELLO messages (LQ_HELLO messages, LQ = link quality) to broadcast
685 the link quality that we have determined on our end of the link to our
686 neighbors. So do our neighbors, and we as well as they end up with an
687 idea of how good the link is in both directions. From the LQ_HELLOs we
688 also learn the link quality between our neighbors and our two-hop neigh-
689 bors. In this way we can select those neighbors as MPRs that have the
690 best links to our two-hop neighbors. To distribute the link quality
691 throughout the network, we use a new extended version of TC messages
692 (LQ_TC messages). They contain the qualities at both ends of each of our
693 links. Nodes can then run Dijkstra's algorithm to find a path between
694 themselves and other nodes that minimizes the packet loss.
695
696 If the newly introduced "LinkQualityLevel" is set to zero in the
697 configuration file, link quality is not used and the daemon behaves as
698 before, i.e. as specified by the OLSR RFC. If this parameter is set
699 to 1, LQ_HELLOs and LQ_TCs are used instead of HELLOs and TCs, link
700 quality is measured and MPRs are selected based on the link qualities.
701 If this parameter is set to 2, the routing table is additionally
702 calculated based on the link qualities.
703
704 Setting "LinkQualityLevel" to a non-zero value BREAKS COMPATIBILITY. You
705 will then not be able to participate in RFC-conformant OLSR networks
706 any longer. This is because we use LQ_HELLOs and LQ_TCs instead of HELLOs
707 and TCs in this case.
708
709 It's best practice to set "LinkQualityLevel" to the same value on all
710 nodes in a network.
711
712 When determining the quality of a link olsrd only considers a given
713 number of most recent OLSR packets received from its neighbors. By
714 default, olsrd looks at the 10 most recent OLSR packets. This can be
715 changed via the "LinkQualityWinSize" configuration option. Values
716 between 3 and 128 are legal.
717
718 NEW CONFIGFILE PARSER/FORMAT/SCHEME
719
720 A whole new config file syntax and parser is introduced with this
721 release. The parser is generated using flex and bison and it is
722 designed to be very modular. The parser can be compiled as either
723 a standalone binary, a shared library or as part of olsrd. This way
724 other applications can parse and generate olsrd configuration files
725 only by linking to the dynamic library.
726 In the new configfile options can be set pr. interface, plugin
727 parameters can be set, more IPC options can be set...and more.
728 The syntax is documented in the olsrd.conf(5) manual page found
729 in the files/ directory.
730 Olsrd internals now uses a single struct, as returned by the config
731 parser, for all configuration in runtime. this means that updating
732 values in this struct will dynamically update olsrd operation. It
733 also means that all configuration is now kept in one place instead
734 of spread all across the place.
735
736 FREEBSD AND MAC OSX PORT
737
738 This version offers an initial port of olsrd to FreeBSD and Mac OS
739 X. Like the Windows port it currently does not support IPv6. As this
740 is a very first try at supporting FreeBSD and Mac OS X, this port is
741 probably not as reliable as the Linux version. We'd greatly appreciate
742 feedback and bug reports. To compile you need GNU make. Then simply
743 run "gmake OS=fbsd" to build the executable.
744
745 NEW MAKEFILE(S)
746
747 The makefiles used to build olsrd have been rewritten and now includes
748 dependency file generation using makedep.
749
750 DEBUG OUTPUT
751
752 Tables are now only printed if changes occur, so there are no longer
753 any periodical output when using a debuglevel >0. A "heartbeat" is
754 now printed to STDOUT(if it is a terminal) in the form of a rotating
755 line to show that olsrd is actually operating.
756 Adding "ClearScreen yes" to the configuration file clears the screen
757 each time before the debug output shows updated information. This
758 makes the debug output easier to read in many cases. "ClearScreen no"
759 is the default, if no "ClearScreen" directive is given in the
760 configuration file.
761
762 PLUGIN INTERFACE
763
764 There are some changes in the plugin interface. It is now at
765 version 2. Plugin specific parameters from the configfile
766 using the PlParam option, will now be passed on to plugins.
767 To receive such parameters a plugin must implement a function:
768 int
769 register_olsr_param(char *key, char *value)
770 to which parameter pairs will be passed.
771
772 NO MORE THREADS
773
774 Olsrd no longer uses any thread library on its operation. Everything
775 now happens in the main thread allowing for use of olsrd on platforms
776 with no thread library.
777
778 ACPI SUPPORT IN WILLINGNESS CALCULATION(LINUX)
779
780 The willingness calculation for Linux, now also supports the more
781 modern ACPI proc interface in addition to APM. This is not well
782 tested and feedback is appreciated!
783
784 IPC OPTIONS
785
786 Various options regarding IPC connections can now be set in the
787 configfile. The options are max connections, allowed unicast
788 hosts and allowed net-ranges.
789
790 CODE REWRITES
791
792 Much of the message generation and net output code is rewritten.
793 Sending of partial messages should now work 100%. Also TC, MID
794 and HNA messages are now cached for a random amount of time
795 before transmitted - this often leads to the situation where these
796 messages are sent together with an HELLO message, which is highly
797 desirable since it saves network resources.
798 PLUGIN DEVELOPERS must note that the buffers and size variables
799 used in net output is no longer directly accessible!
800
801 NET OUTPUT CODE REWRITTEN
802
803 Every interface now has one outputbuffer registered. This allows
804 messages to be "cached" as explained above, so that multiple
805 messages are stacked together.
806 Also the outputbuffer and size are no longer accessible directly,
807 an API is available to plugins(and olsr code).
808
809 OS DEPENDENT NETWORK INTERFACE
810
811 The OS dependent network functions are now defined in net_os.h
812 instead of being mixed up with internal network functions
813 in net.h.
814
815 BUGFIXES
816
817 A bug that caused the announced ANSN sequence number to never stop
818 being increased when a change in the MPR selector set was detected
819 has been fixed. Another TC related bug that caused timed out TC
820 entries not to be deleted from the routing table in certain cases
821 has also been fixed. These bugs could cause unstable routes.
822 A bug that in many cases caused the wrong routes to be deleted
823 when using IPv6 has been fixed.
824
825
826 0.4.7 ---------------------------------------------------------------------
827
828 NATIVE WINDOWS GUI AND INSTALLER
829
830 We now have a native Windows GUI. The GTK+ version is no longer
831 supported on Windows. The new native GUI is pretty compact as it does
832 not require the GTK+ runtime DLLs. In addition to monitoring olsrds
833 state the GUI offers an easy way for novice users to configure
834 olsrd. It's pretty self-explanatory. Have a look at README-WIN32.txt
835 for details. The Windows version now also comes with an installer
836 based on the freely available Nullsoft Scriptable Install System
837 (NSIS). Looks like the Windows port is becoming more and more
838 Windows-ish. :-)
839
840 WIRELESS INTERFACE DETECTION ON WINDOWS
841
842 Like the Linux version the Windows port is now able to tell WLAN
843 interfaces from wired interfaces. We can now, for example, set
844 different HELLO intervals for WLAN interfaces and wired interfaces,
845 respectively.
846
847 ROUTE UPDATES
848
849 The order of updates of calculated routes is swapped. Now new routes
850 are added prior to deleting old ones. This could fix issues where
851 in some very very few cases one could experiment loss of routes.
852
853 BUGFIXES
854
855 There were quite some bugs in IPv6 operation in 0.4.6. These are
856 the bugs that were fixed:
857 - HNA message parsing did not work.
858 - Some IPv6 addresses were printed as IPv4 addresses in the
859   debug output.
860 - The '-dispin' option now works again.
861 - A filedescriptor leak in the IPv6 interface detection caused
862   olsrd to crash.
863
864
865 0.4.6 ---------------------------------------------------------------------
866
867 WINDOWS PORT!
868
869 Read the README-WIN32.txt file!
870
871 DYNAMIC NETWORK INTERFACE UPDATES
872
873 Network interfaces can now be updated and removed/added at
874 runtime. Olsrd will check all interfaces specified in the config
875 file or on the command-line, every 5 seconds. If updates
876 occur, olsrd will register this and update the necessary data.
877 If interfaces are removed or added, olsrd will detect this
878 and configure the interfaces. If an interface is removed
879 olsrd will continue to check the interface, so if say, a PCMCIA
880 card is removed and later on reinserted(and given the same name),
881 olsrd will detect this and start running on it again.
882
883 Note that olsrd will now run even if no interfaces are detected.
884
885 ROUTE CALCULATION UPDATE
886
887 All 1 hop neighbor addresses that are not directly reachable trough
888 a symmetric link in the link set will now be added with a GW in the
889 routing table. this GW will be an interface address from a registered
890 symmetric link to the neighbor.
891
892 MID UPDATE
893
894 Alias addresses are now registered in the link set processing
895 if available. This is not to pretty(since the vtime has to
896 be a mere guess) but it gives faster initial route updates.
897 If a HELLO is received(at initial registration) from an IP
898 that is not the same as the one set as main address in the
899 received HELLO header, then the IP from which the HELLO was
900 received will be registered as an alias of the main address
901 set in the HELLO header. The default vtime is set to 15 secs.
902
903 CODE RESTRUCTURING
904
905 All OS dependent interface configuration code is now located in
906 OS/ifnet.c(that would be linux/ifnet.c if using GNU/Linux).
907 The functions are available trough the headerfile src/ifnet.h
908
909 CODE CLEANUPS
910
911 - Some timer issues fixed
912 - Got rid of the global socket descriptors
913 - Updated indexing of network interfaces
914 - Introduced a global socket to use for ioctl calls(ioctl_s)
915 - Removed upper limit for interfaces to use
916 - Point-to-point interfaces are now allowed
917 - The main select(2) loop now uses a timeout
918 - A small bugfix in the select fd-set update code
919 - Some bugfixes in the configuration file parsing
920 - stdout/stderr are now set to not be buffered
921 - A bugfix in the MID generation regarding seq. numbering
922
923 PLUGIN INTERFCAE
924
925 A new set of functions that are called whenever a change in the
926 interface configuration(update, addition, removal) is made is
927 introduced.
928 These functions are added and removed very much like the ptf
929 functions. Available trough the functions add_ifchgf and del_ifchgf.
930
931 OBS OBS OBS!!! PLUGIN DEVELOPERS READ THIS!!!!
932
933 The interface struct(declared in interfaces.h) has changed.
934 Plugin developers must update plugins that uses the interface
935 struct!
936
937 The headerfile olsr_plugin_io.h which contains the plugin interface
938 commands now contains a revision list where all changes are
939 stated.
940
941
942 0.4.5 ---------------------------------------------------------------------
943
944 PLUGIN: SECURE OLSR
945
946 A plugin that generates and checks message signatures is added.
947 Check lib/secure
948
949 PLUGIN: TOPOLOGY GRAPH
950
951 A plugin that generates output of the topology in the dot format
952 is added. See lib/dot_draw
953
954 OPTIMIZATIONS
955
956 Some optimizations done that should cause fewer route recalculations.
957
958 BUGFIXES
959
960 Some bugs reported by Takafumi Tanaka fixed.
961
962 RESTORATION OF NETWORK SETTINGS
963
964 Network settings like disabling of ICMP redirects and spoof filter, are
965 now restored at exit by olsrd.
966
967 RFC COMPLIANCE FIX
968
969 Nodes would in certain scenarios retransmit messages originating for
970 themselves. This was a RFC incompliance. Reported by Ingmar Baumgart.
971
972 NON-WLAN TIMERS
973
974 No longer setting the HELLO interval of non-wlan interfaces as a multiplier
975 of the wlan interval. The interval is set seperatly now.
976 Due to this there are some updates in the configfile imperatives.
977
978 CODE CLEANUPS
979
980 Some new macros introduced for table insertion and removal and IP
981 copying and comparison.
982
983 FRONT END BUGFIXES
984
985 IPv6 bugfixes in the GUI.
986
987
988 0.4.4 ---------------------------------------------------------------------
989
990 ROUTE CALCULATION
991
992 Routes are no longer added via neighbors declaring a willingness
993 of WILL_NEVER.
994
995 LINK SENSING AND ROUTE CALCULATION
996
997 Link sensing and route calculation has been updated to handle
998 multiple links between hosts in a sane way.
999
1000 IP SPOOF FILTERING
1001
1002 IP spoof filtering is disabled on the interfaces which olsrd runs.
1003 These settings are not restored!
1004
1005 ICMP REDIRECTS
1006
1007 ICMP redirect message generation is disabled on the interfaces
1008 which olsrd runs.
1009 These settings are not restored!
1010
1011 CONFIGFILE OPTIONS FOR MID AND HNA ADDED
1012
1013 Options to set the MID and HNA emission intervals and
1014 validity time in the configfile added.
1015
1016 IPv6 ADDRESS SCOPE
1017
1018 Option to set what IPv6 address type(scope) to use in the
1019 configfile added. It can be set to either global or site-local.
1020
1021 IPv6 MULTICAST
1022
1023 Options to set site-local and global multicast addresses
1024 in the configfile added.
1025
1026 EMISSION INTERVAL FUNCTION
1027
1028 Functions to set emission intervals at runtime added.
1029
1030 LINK LAYER NOTIFICATIONS
1031
1032 If started with the -llinfo switch olsrd will collect and display
1033 link-layer information on neighbors. This is no longer limited to
1034 one interface. But no action is taken based on this info - and
1035 there is a upper limit of 8 neighbors from which this info can
1036 be collected pr. interface. This limitation is inherited from the
1037 WLAN drivers and is not something imposed by the olsrd code!
1038
1039 IPv6 HNA MESSAGE FORMAT
1040
1041 IPv6 HNA messages now contains 128-bit netmask instead of prefix.
1042
1043 PLUGIN FUNCTIONS
1044
1045 Added "packet transform functions" which allow plugins to alter all
1046 outgoing OLSR traffic.
1047
1048 RESTRUCTURING
1049
1050 Moved most headers out of OS dependent directories. The tunneling
1051 and link-layer notification interface is not yet separated from
1052 the /linux directory.
1053
1054 MANUALPAGE
1055
1056 A manpage(olsrd(8)) describing olsrd has been created. It is installed
1057 when using 'make install'.
1058
1059
1060 0.4.3 ---------------------------------------------------------------------
1061
1062 PLUGIN SUPPORT
1063
1064 Olsrd now supports runtime-loadable plugins! A couple of example plugins
1065 are located in the lib/ directory. Read the README files in the various
1066 plugin directories for more info. A directive to load plugins have been
1067 added to the configfile as well.
1068 Documentation of the plugin interface can be fount at http://www.olsr.org.
1069
1070 The plugin interface is designed to be extendable. But it should _always_
1071 be backwards compatible with the interface used in this release!
1072
1073 LINK-LAYER NOTIFICATION
1074
1075 Some preliminary link-layer notification code has been added. Link quality
1076 can be written to stdout if olsrd is started with the -llinfo switch.
1077 No action is currently taken based on this info. And info will only
1078 be retrieved from the interface named "eth1".
1079 This code is not usable for users as of yet!
1080
1081 MPR UPDATES
1082
1083 Neighbors with willingness set to WILL_ALWAYS is now always added. The
1084 MPR selection is optimized as described in RFC3626 section 8.3.1
1085 point 5.
1086
1087 MPR BUGS
1088
1089 There was a couple of bugs in the MPR selection code. All fixed.
1090
1091 LINUX 2.6 BUG
1092
1093 Users could not run olsrd on multiple interfaces using the Linux 2.6 kernel
1094 series. This is now fixed.
1095
1096 MINOR BUGS
1097
1098 One small bug in link hysteresis initialization and one in HNA route
1099 deletion.
1100
1101 MESSAGE-SEQUENCENUMBER INCOMPLIANCE
1102
1103 Message-seqnos was implemented on a pr. messagetype and pr. interface
1104 basis. This is not RFC3626 compliant and has been updates. All messages
1105 and interfaces now uses a global seuencenumber.
1106
1107 RANDOM SEQUENCENUMBERS
1108
1109 Sequencenumbers are now initialized using a random value.
1110
1111 DAEMON MODE
1112
1113 Fixes for running olsrd in daemon mode(debug 0).
1114
1115 OPTIMIZATIONS
1116
1117 Optimizations based on profiling implemented.
1118
1119 SANITATION
1120
1121 Message size is checked for every message before passing it to the
1122 appropriate message parsing function. If the size is bigger than the
1123 remaining size of the olsr packet then the message is discarded.
1124
1125 GUI FRONT-END
1126
1127 Some minor modifications done to the gui.
1128
1129 INTERNAL CHANGES
1130
1131 Lots of changes in handling of registration and unregistration of
1132 scheduler, socketparser, parser and local hna set.
1133 Some restructuring and movement of functions.
1134
1135
1136 0.4.2 ---------------------------------------------------------------------
1137
1138 No public release
1139
1140 0.4.1 ---------------------------------------------------------------------
1141
1142 No public release
1143
1144 0.4.0 ---------------------------------------------------------------------
1145
1146 LINK HYSTERESIS
1147
1148 Link hysteresis as described in the RFC added.
1149
1150 TC REDUNDANCY
1151
1152 TC redundancy as described in the RFC added
1153
1154 MPR REDUNDANCY
1155
1156 MPR redundancy as described in the RFC added
1157
1158 SCHEDULER REWRITE
1159
1160 The scheduler has been rewritten to register scheduled
1161 events(function pointers) dynamically.
1162
1163 PARSER REWRITE
1164
1165 The parser has been rewritten to register parse functions
1166 on a pr. messagetype dynamically
1167
1168 MALLOC WRAPPER
1169
1170 A wrapper for the malloc(3) syscal has been introduced.
1171 olsr_malloc(size_t, const char *) should ALWAYS be used.
1172
1173 CODE RESTRUCTURING
1174
1175 Lots of restructuring in headerfiles.
1176 Linux spesific code moved to subdirectory linux/
1177 FreeBSD code to be put in freebsd/
1178 LOTS of code restructured due to the rexrite of the scheduler
1179 and parser.
1180
1181 MPR CALCULATION
1182
1183 Optimizing the MPR set as suggested in the RFC section
1184 8.3.1 point 5 added.
1185
1186 BUGFIXES
1187
1188 Some bugs in MPR selection fixed.
1189
1190
1191 0.3.8 ---------------------------------------------------------------------
1192
1193 CODE REWRITES
1194
1195 HNA code completely rewritten!
1196 The old code was really bad! Now it is much cleaner implemented and
1197 should work fine.
1198 One- and two-hop neighbor list structures rewritten. They now use
1199 the same hashed double-linked lists as the rest of the information
1200 sets use.
1201
1202 CODE RESTRUCTURING
1203
1204 Some code restructuring which resulted in the new files: timer.h,
1205 mantissa.c, mantissa.h, hashing.c, hashing.h, linux/net.c
1206 linux/net.h, linux/kernel_routes.c, linux/kernel_routes.h and some
1207 renamed files
1208
1209 BUG FIXES
1210
1211 The bug causing errormessages on exit is fixed.
1212 The bug that caused initial HNA routes in the GUI to display a hopcount
1213 of 0 fixed.
1214 IPv6 HNA netmasks were all added as /128. It's fixed now.
1215
1216 IPv6
1217
1218 Turns out sitelocal address had to be preferred to avoid IPv6 header
1219 messing up link-sensing. Bug fixed
1220
1221
1222 0.3.7 ---------------------------------------------------------------------
1223
1224 CODE REWRITES
1225
1226 The entire TC set and MPR selector set code rewritten. Hashing and
1227 double linked lists added to the MID code.
1228 Lots of HNA code has been rewritten as well.
1229
1230 HNA bugfix
1231
1232 When a node lost connectivity to a HNA GW all HNA entries to that gw
1233 was deleted. This has been fixed - and HNA entries only gets deleted
1234 on timeout now.
1235 Other HNA bugs have been fixed as well. But the whole HNA implementation
1236 needs a rewrite!
1237
1238 Holdingtime BUGfix
1239
1240 There was a bug that caused holdingtime not to be properly recalculated
1241 when using non-default emission intervals.
1242
1243 Forwarding and symmetric neighbors
1244
1245 Seems I had misread the RFC on what a 1-hop symmetric neighbor is.
1246 Now the link-set is checked when a check for a symmetric neighbor
1247 is done. Not the 1 hop neighbor set as it used to be. This way
1248 the hack when receiving MID messages could be removed.
1249
1250 IPv6
1251
1252 Global addresses are now preferred. Sitelocal addresses are only used
1253 if no global addresses are found. There have been problems where
1254 the address set in the IP header of IPv6 packets do not match the
1255 address chosen by OLSR.
1256
1257 GUI - 0.2.5
1258
1259 The GUI is finally updated! It can now handle piggybacked messages
1260 and link sensing HELLO message format.
1261
1262
1263 0.3.6 ---------------------------------------------------------------------
1264
1265 HNA support using IPv6
1266
1267 HNA now works using IPv6 as well! Just add the network address and
1268 prefix in the HNA6 section in the configfile. The IPv6 HNA packets differ
1269 some from the IPv4 as they don't send the netmask but the prefix.
1270
1271
1272 NEW FILENAME FOR THE BINARY AND CONFIG FILE
1273
1274 They are now called olsrd and olsrd.conf. I figured I'd use the olsrd
1275 name before somebody else started using it ;-)
1276
1277
1278 Config file
1279
1280 New options: DEBUG, HNA6 and IPC-CONNECT added to config file.
1281
1282
1283 Output
1284
1285 A printf-wrapper has been introduced - debug level output handling
1286 is much more uniform now.
1287 The daemon should run fine in detached mode now(DEBUG 0)
1288
1289 GUI front-end
1290
1291 The GUI front-end can now connect and disconnect at any time while the
1292 daemon is running, if started using the -ipc switch or with IPC set to
1293 'yes' in the configfile.
1294
1295
1296 BUGS
1297
1298 A small HNA bug fixed.
1299
1300
1301 0.3.5 ---------------------------------------------------------------------
1302
1303 Forwarding jitter
1304
1305 Forwarding jitter added. Messages are piggybacked if they arrive(and are to
1306 be forwarded) while there is data to be forwarded buffered.
1307 Added some bugfixes to support parsing of piggybacked messages as well.
1308
1309 Route calculation
1310
1311 Fixed route calculation so that 2 hop neighbors are added. This smooths
1312 changes from 1 hop to 2 hop neighbor out. The old way one had to wait for
1313 a TC before the 2 hop neighbors were added.
1314
1315 2 hop neighbor set
1316
1317 All neighbors received in HELLO messages are added to the two hop
1318 neighborhood. This helps smoothing out the 1-to-2 hop transition as well.
1319
1320 MID calculation
1321
1322 MID calculation had to be updated due to the registering of two hop neighbors
1323 that are already one hop neighbors. They should not be considered when calculating
1324 two hop coverage.
1325
1326 Optimizations
1327
1328 Deletion of possible one hop neighbors registered on non main-addresses when
1329 first registering MID info from a node removed. This can not occur due
1330 to the fact that registering of neighbor nodes are done on main addresses
1331 from link-sensing
1332 Option to not forward messages on wired links on which they arrived removed.
1333 This is no longer usable to any degree when adding support for piggybacking
1334 of forwarded messages is to be implemented.
1335
1336 Cleanups
1337
1338 Some unused parameters and commandline options were removed.
1339
1340
1341
1342 0.3.3 ---------------------------------------------------------------------
1343
1344 TC MESSAGEING
1345
1346 Added sending of empty TC messages if all MPR selectors are removed. Empty
1347 TC messages are sent for a TC_HOLD_TIME period as described in section
1348 9.3 in the RFC.
1349
1350 HNA
1351
1352 Fixed HNA route calculations for IPv6. I forgot to upgrade this in 0.3.2
1353
1354 OPTIONS
1355
1356 -hnaint and -midint command line optionas added to set the interval
1357 of HNA and MID generation.
1358
1359 FORWARDING
1360
1361 As an optimization messages have not been forwarded on the received interface
1362 if this is registered as a non-WLAN interface. This causes problems for
1363 people using Ethernet-to-WLAN adapters. This optimization is now turned
1364 off by default. It can be activated using the -nofwlan option.
1365
1366 BUGS
1367
1368 THERE ARE SOME NASTY BUGS IN 0.3.2!
1369 Fixed a bug that caused 2 hop neighbors not to time out.
1370 Fixed a bug that caused a 1 hop neighbor timeout not to recalculate
1371 the routing table.
1372 Fixed a small memleak in the MID set
1373 Fixed some smaller bugs.
1374
1375 IPv6 functioning is not well tested in this release.
1376
1377 0.3.2 ---------------------------------------------------------------------
1378
1379 HNA
1380
1381 Updated HNA to be RFC compliant. This means that all received HNA tuples
1382 are registered and only the subset of unique entries(net/netmask) with
1383 the smallest hopcount is inserted into the routing table.
1384
1385 Config file
1386
1387 User can specify configfile name using the -f switch.
1388
1389 Bugs
1390
1391 Fixed a link-sensing bug that caused problems when using MID nodes.
1392
1393 0.3.1 ---------------------------------------------------------------------
1394
1395 MPR calculation
1396
1397 MPR calculation is now based on the willingness announced by nodes.
1398
1399 Neighbor set
1400
1401 The neighbor set does not have timeouts on entries any more. Creation
1402 and deletion of neighbor entries is done from the link-set as suggested
1403 in the RFC.
1404
1405 Cleanups
1406
1407 Gotten rid of a lot of code that became more or less obsolete due to
1408 all the changes introduced in 0.3.0.
1409
1410 Bugs
1411
1412 Fixed a nasty bug concerning the sequence numbering of TC packets.
1413 Fixed some bugs regarding MPR calculation - and probably introduced
1414 a whole new species when implementing the willingness-based calculation ;-)
1415
1416
1417 0.3.0 ---------------------------------------------------------------------
1418
1419 Due to the extensive amount of updates this release is versioned 0.3.0
1420
1421 Duplicate table and forwarding
1422
1423 The duplicate table functionality is totally rewritten in 100% RFC
1424 compliance. The forward algorithm specified in the RFC is implemented
1425 this meant rewriting much of the packet processing code. The daemon
1426 also forwards unknown packettypes now.
1427
1428 Link sensing and neighbor processing
1429
1430 Link sensing and neighbor processing was done in the same operation in the
1431 old code. Link sensing is now a mechanism of its own which is 100% RFC
1432 compliant. Neighbor processing and HELLO generation has been partly
1433 rewritten to be RFC compliant. Neighbors are now registered as either
1434 SYN or NOT_SYM. The NOT_NEIGH, SYM_NEIGH and MPR_NEIGH values are only
1435 used when building HELLO messages. Links are in one of the following states:
1436 UNSPEC_LINK, ASYM_LINK or SYM_LINK.
1437 HELLO messages now advertise link status of neighbors on the interface
1438 the message is transmitted.
1439
1440 Willingness
1441
1442 A node now dynamically calculates willingness based on powersource and
1443 possibly battery power. If the node is AC powered it announces a willingness
1444 of 6. If batterypowered the willingness is calculated as:
1445 P / 26
1446 Where P is percentage of power left.
1447
1448 Configuration file
1449
1450 The daemon now tries to read its configuration from the file /etc/uolsrd.conf
1451 A "standard" configuration file is installed when doing 'make install'.
1452 This file should be edited to fit your needs.
1453 Command-line options can still be used to override the configuration form
1454 the file(ore if no config file is present).
1455 The -f switch can also be used to specify a configuration file.
1456
1457 Willingness
1458
1459 If AdvancedPowerManagemant(APM) is supported on your system the willingness
1460 of the node is dynamically calculated based upon the powerstatus of the node.
1461 MPR calculation based upon willingness is not done as of yet.
1462
1463 TC ANSN
1464
1465 A bugs in the TC processing fixed.
1466
1467 HNA
1468
1469 Some serious HNA bugs fixed. These bugs caused a node to always choos the
1470 gateway with the larges hopcout :) More seriously - a bug caused looping
1471 of HNA messages in certain scenarios.
1472
1473 Package sequence numbers
1474
1475 These were added. Not much use as of now - but they're there(as specified
1476 in the RFC).
1477
1478 Broadcast address
1479
1480 Users can now specify the broadcast address to use. Useful if one wishes to
1481 use the 255.255.255.255 broadcast.
1482
1483
1484
1485 0.2.5 ---------------------------------------------------------------------
1486
1487 Htime and Vtime
1488
1489 Htime and Vtime processing and handling added. Holding times used to be
1490 a static value for all nodes. Now every node can signal its vlidity time
1491 to others.
1492 To achieve this mantissa/exponent calculation functionality was added.
1493 Messages now include Vtime(and Htime in HELLO) values in mantissa/exponent
1494 format instead of just zero. These values are as stated above, used as holding
1495 time for nodes.
1496 the GUI should be upgraded as well...
1497
1498 Jitter
1499
1500 The use of jitter in message generation intervals vere fixed.
1501
1502
1503 0.2.4 ---------------------------------------------------------------------
1504
1505 Seqno bugs
1506
1507 Some bugs concerning sequence numbers in HELLO and MID message handling
1508 was fixed. Newly registered nodes in the neighbor and MID sets were
1509 initialized with a seqno of 0. When using a "wraparound" sequencenumber
1510 check(as defined in olsr_protocol.h) this can produce errors if a new
1511 node joins a network where existing nodes has seqnos >0x00FF.
1512
1513 IPv6 related bugs
1514
1515 Some checks and copying of node addresses where done using sizeof(u_olsr32_t)
1516 which is 32 bits. This caused only the 32 firs bits of IPv6 addresses to
1517 be copied and checked.